-
[Flutter/Android] 좌충우돌 Flutter 앱 번들 만들고 등록하기카테고리 없음 2024. 10. 4. 22:17
$ keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key4
나는 너무 많이 key파일을 만들어서 저렇게 되었다.
그리고 rootProject/android/app/key.properties 파일을 만든다.
storePassword=<<비밀번호>> keyPassword=<<비밀번호>> keyAlias=key4 storeFile=<<위치>>
그리고 코드 난독화를 위한 파일도 만들어보자.
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.**
그리고 flutter build appbundle하니 다음과 같은 오류가 나온다.
A problem occurred evaluating project ':app'. > Could not find method useProguard() for arguments [true] on BuildType$AgpDecorated_Decorated{name=release, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, minifyEnabled=true, zipAlignEnabled=true, signingConfig=SigningConfig$AgpDecorated_Decorated{name=release, storeFile=/Users/iseunghui/key.jks, storePassword=Wjsry1emd!, keyAlias=key3, keyPassword=Wjsry1emd!, storeType=pkcs12, v1SigningEnabled=true, v2SigningEnabled=true, enableV1Signing=null, enableV2Signing=null, enableV3Signing=null, enableV4Signing=null}, embedMicroApp=true, mBuildConfigFields={}, mResValues={}, mProguardFiles=[/Users/iseunghui/workspace/flutter_test/test1/build/app/intermediates/default_proguard_files/global/proguard-android.txt-8.1.0, /Users/iseunghui/workspace/bookenvi/mvp/flutter/packages/flutter_tools/gradle/flutter_proguard_rules.pro, /Users/iseunghui/workspace/flutter_test/test1/android/app/proguard-rules.pro], mConsumerProguardFiles=[], mManifestPlaceholders={}} of type com.android.build.gradle.internal.dsl.BuildType$AgpDecorated. * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. > Get more help at https://help.gradle.org.
그리고 app/build.gradle을 다음과 같이 수정한다.
plugins { id "com.android.application" // START: FlutterFire Configuration id 'com.google.gms.google-services' // END: FlutterFire Configuration id "kotlin-android" // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id "dev.flutter.flutter-gradle-plugin" } def keystoreProperties = new Properties() def keystorePropertiesFile = rootProject.file('key.properties') if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } android { namespace = "com.DREAMNARU.bookenvi" compileSdk = 34 ndkVersion = flutter.ndkVersion compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8 } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId = "com.dreamnaru.bookenvi" // You can update the following values to match your application needs. // For more information, see: https://flutter.dev/to/review-gradle-config. minSdk =24 targetSdk = 34 versionCode = flutter.versionCode versionName = flutter.versionName } signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null storePassword (keystoreProperties['storePassword']) } } buildTypes { release { // release 속성으로 변경 signingConfig signingConfigs.release // start of 코드난독화 및 사이즈 축소 minifyEnabled true // useProguard true //remove this line shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // end of 코드난독화 및 사이즈 축소 } } } flutter { source = "../.." } dependencies { // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:33.3.0') // TODO: Add the dependencies for Firebase products you want to use // When using the BoM, don't specify versions in Firebase dependencies implementation 'com.google.firebase:firebase-analytics' implementation 'androidx.webkit:webkit:1.4.0' // Example of a WebView dependency x // Add the dependencies for any other desired Firebase products // https://firebase.google.com/docs/android/setup#available-libraries }
ERROR: Missing classes detected while running R8. Please add the missing classes or apply additional keep rules that are generated in /Users/iseunghui/workspace/flutter_test/test1/build/app/outputs/mapping/release/missing_rules.txt. ERROR: R8: Missing class com.google.android.play.core.splitcompat.SplitCompatApplication (referenced from: void io.flutter.app.FlutterPlayStoreSplitApplication.<init>() and 2 other contexts) FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:minifyReleaseWithR8'. > A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable > Compilation failed to complete
Proguard Missing classes detected while running R8 after adding package names in proguard-rules.pro
AGPBI gives this as output: > Task :app:minifyReleaseWithR8 AGPBI: {"kind":"warning","text":"Unexpected reference to missing service class: META-INF/services/r...
stackoverflow.com
찾아보니 여기서 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.** { *; } -keep class com.google.firebase.** { *; } -dontwarn io.flutter.embedding.** -ignorewarnings
이렇게 하니 빌드가 된다.
빌드는 다 됐다.
이제 키만 올리면 된다.
나는 android/app 폴더에
keys.jks랑
여기서 1. 암호화 공개 키 다운로드 한 upload_certificate.pem과
2. perk 도구 다운로드 한 perk.jar이랑 넣고
$ java -jar pepk.jar --keystore=key.jks --alias=key4 --output=output.zip --include-cert --rsa-aes-encryption --encryption-key-path=/Users/iseunghui/workspace/flutter_test/test1/android/app/encryption_public_key.pem
터미널로 그 위치까지 가서 다음과 같이 입력한다.
Enter password for store 'key.jks': Enter password for key 'key4':
둘 다 똑같은 비번을 입력해준다.
그런데 다음과 같은 오류가 나왔다.
Error: Unable to export or encrypt the private key java.security.NoSuchAlgorithmException: Cannot find any provider supporting RSA/NONE/OAEPWithSHA1AndMGF1Padding at java.base/javax.crypto.Cipher.getInstance(Cipher.java:574) at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.encryptPrivateKeyWithCkmRsaAesKeyWrapEncryption(ExportEncryptedPrivateKeyTool.java:284) at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.run(ExportEncryptedPrivateKeyTool.java:213) at com.google.wireless.android.vending.developer.signing.tools.extern.export.ExportEncryptedPrivateKeyTool.main(ExportEncryptedPrivateKeyTool.java:165)
'Cannot find any provider supporting RSA/NONE/OAEPWithSHA1AndMGF1Padding' when trying to enroll to 'Let Google Play manage your
Hi I am trying to enroll to 'Let Google Play manage your app signing key' but when I follow the steps I am getting this error : From what i have seen on other answers, Google used to give another
stackoverflow.com
위의 오류를 보고 ARM.DMG 로 다운로드 받는다.
https://www.oracle.com/java/technologies/downloads/?er=221886
Download the Latest Java LTS Free
Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.
www.oracle.com
해결이 안된다.
그래서 찾아보았다.
Getting NoSuchAlgorithmException while generating private key using PEPK tool. - Google Play Developer Community
support.google.com
위에서 openjdk를 homebrew로 깔라고 한다.
$ brew install openjdk
$ echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> ~/.zshrc
그 후에 다시 시도해보았고, 다행히 output.zip이 나왔다.
그러니까 output.zip이 나왔다.
다행히 잘 올라갔다. 힘들었다.
예전엔 바로 런칭이 되었는데... 이제는 테스트 후에 된다.
총 다음과 같은 기간이 걸린다....
- 신규 개발자 신원 확인 (1일)
- 비공개 테스트 검수 요청 (7일)
- 비공개 테스트 진행을 위한 20명 모으기 (케바케, 평균 1주일로 계산)
- 비공개 테스트 진행 (14일)
- 프로덕션 검수 요청 (4일)
[1인 앱개발] 너무나 힘들었던 플레이스토어 출시 후기 (feat. 비공개 테스트) | Disquiet*
작년 11월부터 새로생긴 정책으로 인해 안드로이드 플레이스토어 출시가 굉장히 까다로워졌다. 개인 개발자들의 신규 계정에 대해 프로덕션 출시 이전 20명을 모아 비공개 테스트를 진행해야
disquiet.io
미친것같다....
거의 한 달 정도 걸리는거 아닌가....