flutter의 dart-define은 2.2 이상에서는 base64로 인코딩되므로 대응하는 스크립트 소개
11376 단어 Flutter
호텔에 있던 말이 너무 신경이 쓰여서, 무심코 가르쳐 버렸습니다.
최근 flutter를 괴롭히고 있고 Flutter 업데이트에 의한 함정을 받았으므로 공유하겠습니다.
여러분 dart-define을 아십니까?
dart-define을 사용하면 환경별로 설정 파일 등을 전환할 수 있습니다.
구체적인 순서에 관해서는 아래의 기사가 참고가 됩니다.
이번에는 상기의 순서에서는 Flutter1.17까지의 방법 밖에 기재되어 있지 않았습니다만, 아래 기사에서 Flutter2.2로부터의 순서도 있었기 때문에 dart-define의 업데이트에 관한 부분만 발췌해 소개합니다.
dart-define의 표현 역사
dart-define의 역사는 다음과 같이 바뀌었습니다.
DEFINEEXAMPLE_APP_NAME=awesomeApp1,DEFINEEXAMPLE_APP_SUFFIX=.dev
DEFINEEXAMPLE_APP_NAME%3Dawesome1,DEFINEEXAMPLE_APP_SUFFIX%3D.dev
REVGSU5FRVhBTVBMRV9BUFBfTkFNRT1hd2Vzb21lMg==,REVGSU5FRVhBTVBMRV9BUFBfU1VGRklYPS5kZXY=
스크립트
표현 방법의 변경에 맞추어 android의 gradle이나 ios의 pre build script등도 변경하지 않으면 안 됩니다.
(이러한 스크립트의 사용법은 서두에 소개한 기사를 참고해 주세요!)
Android (gradle)
flutter1.17.gradle
def dartEnvironmentVariables = [
DEFINEEXAMPLE_APP_NAME: 'awesomeApp',
DEFINEEXAMPLE_APP_SUFFIX: null
];
if (project.hasProperty('dart-defines')) {
dartEnvironmentVariables = dartEnvironmentVariables + project.property('dart-defines')
.split(',')
.collectEntries { entry ->
def pair = entry.split('=')
[(pair.first()): pair.last()]
}
}
Flutter1.20.gradle
if (project.hasProperty('dart-defines')) {
dartEnvironmentVariables = dartEnvironmentVariables + project.property('dart-defines')
.split(',')
.collectEntries { entry ->
def pair = URLDecoder.decode(entry).split('=')
[(pair.first()): pair.last()]
}
}
Flutter2.2.gradle
if (project.hasProperty('dart-defines')) {
dartEnvironmentVariables = dartEnvironmentVariables + project.property('dart-defines')
.split(',')
.collectEntries { entry ->
def pair = new String(entry.decodeBase64(), 'UTF-8').split('=')
[(pair.first()): pair.last()]
}
}
iOS
Flutter1.17.sh
echo "$DART_DEFINES" | tr ',' '\n' > ${SRCROOT}/Flutter/Defineexample.xcconfig
Flutter1.20.sh
function urldecode() { : "${*//+/ }"; echo "${_//%/\\x}"; }
IFS=',' read -r -a define_items <<< "$DART_DEFINES"
for index in "${!define_items[@]}"
do
define_items[$index]=$(urldecode "${define_items[$index]}");
done
printf "%s\n" "${define_items[@]}"|grep '^DEFINEEXAMPLE_' > ${SRCROOT}/Flutter/Defineexample.xcconfig
Flutter2.2.sh
function entry_decode() { echo "${*}" | base64 --decode; }
IFS=',' read -r -a define_items <<< "$DART_DEFINES"
for index in "${!define_items[@]}"
do
define_items[$index]=$(entry_decode "${define_items[$index]}");
done
printf "%s\n" "${define_items[@]}"|grep '^DEFINEEXAMPLE_' > ${SRCROOT}/Flutter/Defineexample.xcconfig
요약
Flutter 버전에 맞게 스크립트를 수정해야하므로 dart-define을 사용할 때는주의하십시오.
마지막으로, 원나이트인 늑대 온라인 라는 게임을 만들고 있습니다! 좋으면 놀아주세요!
그 밖에도 카메콘 이나 Offcha 라고 하는 서비스도 만들고 있으므로 좋으면 사용해 주세요!
또, 팀 빌딩이나 기술 고문, Firebase의 설계나 어드바이스등의 이야기도 접수하고 있으므로 어용의 분은 당사에 문의해 주세요.
Reference
이 문제에 관하여(flutter의 dart-define은 2.2 이상에서는 base64로 인코딩되므로 대응하는 스크립트 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mogmet/items/dd9191ddc7d43f13bd62텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)