Android Asset Studio에서 런처 아이콘을 생성할 수 있다.
https://romannurik.github.io/AndroidAssetStudio/icons-launcher.html
대충 아이콘을 만든 다음 ic_launcher.zip 파일을 다운로드 받자.
압축파일을 풀면 res 폴더가 있다. res 폴더 내부의 모든 파일들을 배포할 프로젝트의 android/app/src/main/res 폴더에 복사하자.
이후 에뮬레이터로 실행해 보면 아이콘이 변경된 것을 확인할 수 있다.
배포할 앱의 개발자 정보를 앱에 주입해야 한다. 개발자를 인증하기 위한 일종의 인증서이다.
windows
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
생성한 key 파일을 android/app/ 폴더에 놔주자.
배포용 앱을 빌드할 때 참조하기 위해 프로젝트 android/app/ 폴더에 key.properties 파일을 생성한 후 아래와 같이 작성한다.
storePassword=<키생성시 입력한 암호>
keyPassword=<키생성시 입력한 암호>
keyAlias=key
storeFile=./key.jks
Gradle 빌드 시 key.properties 파일을 참조하기 위해 app/build.gradle 파일의 android 블럭 상단에 아래 내용 추가.
// start of Gradle 서명 구성
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
// end of Gradle 서명 구성
android {
...
}
앱을 배포용(release)으로 빌드하기 위해 android 블럭 내부의 buildType을 release 속성으로 변경, buildType 상단에 signingConfigs 블럭을 추가한다.
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
}
}
}
Proguard는 배포할 앱의 소스코드를 암호화 하는 설정이다. apk 빌드 시 번들 사이즈를 줄이고 소스코드를 암호화 한다.
Proguard Rule을 구성하기 위해 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 코드난독화 및 사이즈 축소
}
}
}
Proguard Rule 파일을 사용해서 배포용 앱을 빌드할 때 에러가 발생할 수 있다. Flutter 외부 패키지들을 암호화 하는 중 에러가 발생하는 것으로 보여진다고 한다. 이 경우 암호화 및 사이즈 축소 설정을 주석 처리 하여 빌드를 진행하자..
android/app/src/main/AndroidManifest.xml 파일을 열어 앱의 배포 이름과 사용할 퍼미션을 구성한다.
...
android:label="빌드앱이름"
...
딱히 건드릴 건 없다. 나같은 경우는 빌드할 앱 이름만 소문자에서 대문자로 바꿨다.
android/app/build.gradle
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
defaultConfig {
...
applicationId "com.example.앱이름"
...
}
프로젝트 루트 경로에서 빌드를 시작한다.
flutter build appbundle
빌드 결과
Running Gradle task 'bundleRelease'... 5.0s
✓ Built build/app/outputs/bundle/release/app-release.aab (22.1MB).
프로젝트 루트 경로에서 빌드를 시작한다.
flutter build apk --split-per-abi
빌드 결과
Running Gradle task 'assembleRelease'... 13.4s
✓ Built build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk (9.1MB).
기기를 연결하고 인스톨하자.
flutter install