728x90
1. 앱서명 (keystore 생성)
배포를 하기 위해서는 개발자가 서명한 인증서 파일이 필요하다.
- Window
keytool -genkey -v -keystore c:/Users/[사용자명]/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
- Mac
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
2. 앱에 keystore 파일 저장
생성한 jks파일을 android/app 폴더에 저장한다.
앱을 빌드할 때 참조하기 위해 android 폴더에 key.properties 파일을 생성하고 하단의 코드를 붙여넣는다
storePassword=<키생성시 입력한 암호>
keyPassword=<키생성시 입력한 암호>
keyAlias=key
storeFile=key.jks
3. gradle 설정 추가
gradle 빌드 시 key.properties를 참조할 수 있도록 android/app/build.gradle 파일에 하단의 코드를 추가한다.
// START 서명 구성
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
// END 서명 구성
android {
...
}
앱을 배포할 경우 buildType을 debug속성에서 release속성으로 변경하고 signingConfig 코드를 추가한다.
android {
...
// start of signingConfigs
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
// end of signingConfigs
buildTypes {
release {
// release 속성으로 변경
signingConfig signingConfigs.release
}
}
}
4. proguard 설정 추가
proguard는 앱의 소스코드를 암호화하는 설정으로 apk 빌드 시 번들 사이즈를 줄이고 소스코드를 암호화한다.
android/app/proguard-rules.pro 파일을 생성하고 하단의 코드를 붙여넣는다.
## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-dontwarn io.flutter.embedding.**
gradle 빌드 시 proguard-rules.pro파일을 참조하도록 android/app/build.gradle 파일의 buildTypes에 코드를 추가한다.
(배포용 앱을 빌드할때 코드난독화 부분에서 에러가 발생하면 주석처리 후 빌드)
android {
...
buildTypes {
release {
// release 속성으로 변경
signingConfig signingConfigs.release
// start of 코드난독화 및 사이즈 축소
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
// end of 코드난독화 및 사이즈 축소
}
}
}
5. 앱 번들 빌드
프로젝트 루트경로에서 앱 번들을 빌드해본다.
flutter build appbundle
정상인 경우
Running Gradle task 'bundleRelease'... 39.7s
✓ Built build/app/outputs/bundle/release/app-release.aab (30.0MB).
6. APK 빌드
프로젝트 루트경로에서 APK를 빌드해본다.
flutter build apk --release --target-platform=android-arm64
정상인 경우
Running Gradle task 'assembleRelease'... 5.5s
✓ Built build/app/outputs/flutter-apk/app-release.apk (15.9MB).
반응형
'개발 공부 > Flutter' 카테고리의 다른 글
[Flutter] InheritedWidget이란? (0) | 2024.08.23 |
---|---|
[Flutter] Material 디자인과 Cupertino 디자인의 차이 (0) | 2024.08.23 |
[Flutter] Firebase 연동하기 (0) | 2024.08.19 |