개발 공부/FLUTTER

[Flutter] 안드로이드 ABB, APK 추출 방법

애해 2023. 12. 28. 23:38
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).

 

 

반응형