Flutter.Dart

[Flutter와 Dart] Cross Platform App 개발해보기(1) - 배포 (Android)

Auzii 2025. 1. 19. 22:10
300x250

 

 

Flutter는 안드로이와 iOS 모두 앱으로 만들어서 배포할 수 있다.
여기서는 안드로이드 배포와 관련한 간단한 방법들을 알아보자.

 

 

1. 앱 성능 테스트: Profile & Release 모드

앱 성능을 테스트하거나 최적화하려면 profile과 release 모드를 활용

// 자세한 성능 정보 확인
flutter run --profile

// 최적화된 앱 성능 확인
flutter run --release

2. Android APK 생성

2.1. 준비 단계

APK 생성 전에 앱을 최적화하려면 아래 사항들을 확인.

  • proguard-rules.pro 파일 작성
    • 앱 난독화와 최적화를 위한 설정 파일. 프로젝트의 android/app/ 디렉터리에 proguard-rules.pro 파일을 생성하고 필요한 규칙을 추가.
    • 예:
      # Flutter 관련 클래스 유지
      -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.**
  • build.gradle 설정
    • android/app/build.gradle 파일의 buildTypes 섹션에서 release 설정을 다음과 같이 구성
    • 이 설정은 R8 컴파일러를 사용하여 코드 축소, 난독화, 최적화를 수행. 자세한 내용은 Android 공식 문서를 참고
    • 예:
      buildTypes {
          release {
              signingConfig signingConfigs.release
              // 코드 난독화 및 리소스 축소 설정
              minifyEnabled true
              shrinkResources true
              proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
          }
      }


2.2. APK 빌드 명령어

  • 기본 명령어 
    • 이 명령어는 각 ABI별로 APK를 생성하여 앱 크기를 최적화
    • flutter build apk --split-per-abi
 
  • 빌드 결과:
    • app-arm64-v8a-release.apk

2.3. 특정 타겟 플랫폼 설정

  • 디버그용 APK 생성:
flutter build apk --debug --target-platform=android-arm64
  • 릴리즈용 APK 생성:
flutter build apk --release --target-platform=android-arm64​
 

2.4. 코드 난독화 및 디버그 정보 분리

보안을 위해 난독화를 활성화하고 디버그 정보를 분리해서 빌드 가능:

flutter build apk --obfuscate --split-debug-info=./build/app/outputs/flutter-apk

2.5. 빌드 결과 위치

./build/app/outputs/flutter-apk/app-release.apk
 

3. Android AAB 생성 (Google Play 배포용)

3.1. AAB 빌드 명령어

flutter build appbundle --obfuscate --split-debug-info=./build/app/outputs/bundle/release

3.2. build.gradle에서 버전 정보 업데이트

  • defaultConfig 섹션에 버전 정보를 입력.
defaultConfig {
    applicationId "com.example.myapp" // 앱의 고유 ID
    minSdkVersion 21
    targetSdkVersion flutter.targetSdkVersion

    // 버전 코드와 이름 업데이트
    versionCode 2
    versionName "1.0.1"

    multiDexEnabled true // Firebase 등에서 필요할 수 있음
}

3.3. AAB 네이티브 코드 디버그 심볼 업로드 문제 해결

빌드 과정에서 발생할 수 있는 디버그 심볼 관련 경고를 해결하려면, merged_native_libs 경로의 폴더들을 ZIP으로 묶어 제출.

3.4. 빌드 결과 위치

./build/app/outputs/bundle/release/app-release.aab​

4. 참고 사항

  • aab만 가능: Google Play Store에 업로드하려면 AAB 형식이 필수.
  • --no-sound-null-safety 옵션 제거: Dart 3.0 이상에서는 해당 옵션이 지원되지 않음.

 


지금까지 안드로이드 배포의 과정을 상세히 알아보았습니다. 

이 과정에 앞서 해야하는 것들이 여러가지 있을 수 있습니다. 

예로, License 관련한 것, 앱 아이콘, 화면 설정 관련 등 여러가지에 대해서 앞으로 여러 작성해보도록 하겠습니다.

관련해 궁금하거나 고쳐야할 부분, 추가 꿀팁은 댓글로 부탁드립니다~

 

참고)

2025.01.19 - [Flutter.Dart/Flutter 패키지 추천] - [Flutter 추천 패키지] Flutter OSS Licenses

300x250