플러터 Android 번들 만들기
플러터 공식문서(https://docs.flutter.dev/deployment/android#signing-the-app)를 따라 하시는걸 추천드립니다.
참고로 Window 용 사용법입니다.
<< 공식문서에서 반드시 따라 해야하는 부분 >>
- Adding a launcher icon : Icon 설정
- Create an upload keystore : keystore 파일 생성 (매우 중요)
- Reference the keystore from the app : key.properties 파일을 만들어 안에 속성값 설정
- Configure signing in gradle : /android/app/build.gradle 안에 값 설정
- Build an app bundle : 번들 파일 만들기
1. Adding a launcher icon
- Icon 설정은 사전준비 페이지에서 설명한대로 준비 되어 있을듯 하니 패스
2. Create an upload keystore
- keystore 파일은 한번 설정해서 등록하면 변경하는게 쉽지 않습니다.
변경하는대 몇일씩 걸릴수도 있으므로 신중히 처리하고 파일을 잘 보관하세요.
- PowerShell 를 실행시켜서 다음 명령어를 입력합니다. (잘 안되시면 관리자 권한으로 실행해서 해보시길..)
keytool -genkey -v -keystore %userprofile%\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload
* %userprofile%\upload-keystore.jks : keystore 파일 저장위치 및 파일이름을 쓰시면 됨
* -alias upload : upload 는 alias name이며 특정 이름을 사용하시면 됩니다.
* 파일이름과 alias name은 저 같은경우는 프로젝트이름을 포함시켜서 사용합니다. 프로젝트 단위로 keystore를 사용
하기 위해서입니다.
* keystore를 회사단위로 쓰기도 한다는대 그건 사용을 해보지 않아서 잘 모르겠네요.
- 생성된 keystore 파일을 [project]/android/app/keystore.jks 복사하세요..
꼭 app 밑에 넣으셔야 번들 빌드할때 에러 안납니다.
- keytool 명령을 실행 한후
Password : <패스워드>
What is your first and last name?
[Unknown]: <영어 본명>
What is the name of your organizational unit?
[Unknown]: <조직 단위 이름>
What is the name of your organization?
[Unknown]: <조직이름>
What is the name of your City or Locality?
[Unknown]: <구,군,시>
What is the name of your State or Province?
[Unknown]: <시, 도>
What is the two-letter country code for this unit?
[Unknown]: <국가코드> --> 한국 : ko
Is CN=ChangYoung Lee, OU=StoneMong, O=StoneMong, L=Korea, ST=Busan, C=ko correct?
[no]: yes
- 위의 정보는 복사해서 따로 보관해놓는것을 추천드립니다.(패스워드 잊어버리시면 안되요..)
3. Reference the keystore from the app
- [project]/android/key.properties 파일을 임의로 생성시킨뒤에 다음을 입력하세요
storePassword=<password-from-previous-step>
keyPassword=<password-from-previous-step>
keyAlias=<upload>
storeFile=<keystore-file-location>
* storePassword : keystore 생성할때 사용한 패스워드
* keyPassword : keystore 생성할때 사용한 패스워드
* keyAlias : keystore 생성할때 alias name
* storeFile : keystore 파일명 확장자까지 포함
4. Configure signing in gradle
- [project]/android/app/build.gradle 파일에서 설정을 합니다
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
...
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
- 정확한 위치를 찾아서 위에 설정으로 등록 하시면 됩니다.
- (중요) 앱을 플레이스토어에 테스트 등록하여 테스트결과를 보면 오류(!)가 발생하는 경우가 있습니다.
여기서 x86 에러가 나는 경우가 있어요.앱 실행이 안된다고 오류가 뜰꺼에요.
이게 Abi 종류에 따라 cpu 명령어 코드가 틀려서 실행이 안되는 경우가 있다는군요.. 정확한건 아님..
Abi정보는 https://developer.android.com/ndk/guides/abis?hl=ko#v7a 여기서 확인해보십시오
일단. x86 오류로 인한 실행이 안되는 버그 발생시
x86 은 주로 옛날 cpu계열인걸로 알거든요.. 과감히 포기. 그래서 빌드에서 x86은 제외시키게 하겠습니다.
abiFilters를 이용하여 아래 3개만 적용한다고 적고 빌드를 하시면 됩니다.
defaultConfig {
....
// 이부분을 적어주시면 됩니다
ndk { abiFilters 'arm64-v8a', "armeabi-v7a", 'x86_64' }
}
5. Build an app bundle (PowerShell에서 실행)
- cd [project] : 디렉토리 이동
- flutter build appbundle : 실행
- 실행완료후에 메세지에 보면 번들 파일 위치와 파일명이 나오니 그것을 보고 확인하시면 됩니다.