외부 API를 이용할 때 debug.keystore를 기반으로 hashKey를 생성해야 하는 경우가 있다. 하지만 debug.keystore는 개발 환경마다 달라서, 각 개발자의 PC에서 개별적으로 hashKey를 찾아 등록해야 하는 번거로움이 있었다.
//안드로이드에서 debug.keyStore을 이용한 keyHash 얻는 법
//스크립트를 보면 'debug.keystore'을 활용하고 있다.
keytool -list -v -keystore "C:\Users\aa\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
그런데 debug.keystore를 프로젝트에 포함시켜 하나의 파일로 관리할 수도 있다는 사실을 알게 되었다.
왜 이 방법을 생각 못했지?!
자세한 방법은 여기 참고
안드로이드 네이티브 난독화 (R8/ProGuard)
1. app/build.gradle 설정:
android {
buildTypes {
release {
minifyEnabled true // 코드 난독화 활성화
shrinkResources true // 사용하지 않는 리소스 제거
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
iOS 네이티브 난독화 (Xcode 설정)
1. Xcode의 Build Settings에서:
Flutter/Dart 코드 난독화
1. Android APK 빌드:
flutter build apk --obfuscate --split-debug-info=build/app/outputs/symbols
flutter build appbundle --obfuscate --split-debug-info=build/app/outputs/symbols
flutter build ios --obfuscate --split-debug-info=build/app/outputs/symbols
여기서:
--obfuscate: Dart/Flutter 코드 난독화 활성화--split-debug-info: 디버그 심볼 파일 저장 위치 지정추가 참고사항:
crashlytics 설정 후 디버그 심볼이 Flavor에 따라 Crashlytics에 업로드 되도록 빌드스크립트를 수정해주어야한다.
environment="default"
# 기본 환경 변수 설정
echo "Configuration: ${CONFIGURATION}"
# 현재 설정된 CONFIGURATION 값을 출력 (예: Release-prod, Debug-dev 등)
if [[ $CONFIGURATION =~ \-([^-]*)$ ]]; then
flavor=${BASH_REMATCH[1]}
fi
# CONFIGURATION 값에서 마지막 하이픈(-) 뒤의 문자열을 추출하여 flavor 변수에 저장
# 예: "Release-prod"에서 "prod"를 추출
echo "Flavor: $flavor"
# 추출된 flavor 값을 출력
"$PODS_ROOT/FirebaseCrashlytics/upload-symbols" \
-gsp "${PROJECT_DIR}/FirebaseConfig/${flavor}/GoogleService-Info.plist" \
-p ios \
"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
# Crashlytics에 디버그 심볼을 업로드하는 명령어
# - $PODS_ROOT/FirebaseCrashlytics/upload-symbols: 심볼 업로드 도구 경로
# - -gsp: GoogleService-Info.plist 파일 경로를 지정
# - -p ios: iOS 플랫폼 지정
# - 마지막 줄은 디버그 심볼 파일의 경로 지정