DevBoi

[Flutter] Aos 앱 빌드 릴리즈 하기 본문

[Mobile]/[Flutter]

[Flutter] Aos 앱 빌드 릴리즈 하기

HiSmith 2023. 6. 2. 21:28
반응형

일단 플러터 기반으로 빌드함.

옛날에는 스무스하게 진행했는데, 다시 해보니까 바뀐것도 좀 있고 그래서 이슈가 많음

그래서, 정리함 나중에 또 고생하기 싫은 나를 위해...

 

콘솔 플레이스토어 접속 및 앱을 만듬, 패키지 정보를 넣는거나 기타 앱 정보를 넣는  그런건 인터넷에도 많고 그냥 찾아서 할 수 있음

중요한건 appbundle을 빌드하는데 오류가 많음

 

Appbundle 빌드

 

1. 키 생성

이렇게 생성하지 않으면, 나중에 빌드할때 알고리즘 관련 이슈가 발생함

keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key -storetype JKS

 

빌드 파일 관련된 내용은 크게 아래와 같음

app/build.gradle

build.gradle

gradle/wrapper/gradle-wrapper.properties

(없으면 생성) gradle/key.properties

(없으면 생성) gradle/local.properties

 

 

 

1. app/build.gradle

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
  keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

///** Sets the compileSdkVersion used by default in Flutter app projects. */
//static int compileSdkVersion = 31
//
///** Sets the minSdkVersion used by default in Flutter app projects. */
//static int minSdkVersion = 16
//
///** Sets the targetSdkVersion used by default in Flutter app projects. */
//static int targetSdkVersion = 31
  android {
    compileSdkVersion 33
    buildToolsVersion "33"
    ndkVersion flutter.ndkVersion

    compileOptions {
      sourceCompatibility JavaVersion.VERSION_1_8
      targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
      jvmTarget = '1.8'
    }

    sourceSets {
      main.java.srcDirs += 'src/main/kotlin'
    }


    defaultConfig {
      // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
      applicationId "com.inna.innaapp.inna"
      // You can update the following values to match your application needs.
      // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
      minSdkVersion 21
      targetSdkVersion 33
      versionCode flutterVersionCode.toInteger()
      versionName flutterVersionName
    }
    signingConfigs {
      release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['storePassword']
      }
    }

    buildTypes {
      release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.release
      }
    }


    flutter {
      source '../..'
    }

    dependencies {
      implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    }

}

 

2. build.gradle

buildscript {
    ext.kotlin_version = '1.6.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

3. local.properties

sdk.dir=/Users/ysj/Library/Android/sdk
flutter.sdk=/Users/ysj/Downloads/flutter
flutter.buildMode=release
flutter.versionName=1.0.1
flutter.versionCode=2
flutter.compileSdkVersion=31
flutter.flutterMinSdkVersion=16
flutter.flutterTargetSdkVersion=31
flutter.ndkVersion=21.1.6352462

 

4. key.properties

storePassword=<비밀>
keyPassword=<비밀>
keyAlias=smithand
#storeFile="/Users/ysj/smith.jks"
storeFile=smithand.jks
flutterRoot = localProperties.getProperty('flutter.sdk')

 

5.gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip

 

추가로 IDE관련 설정을 좀 맞춰야 한다 (빌드는 로컬에서 하기때문에)

 

1. Preference > Android Sdk 버전

2. File > project Structure > project settings 아래와 같이 맞추기

3. 없으면 깔아서 변수 추가해주기

 

 

잘 보면 33버전 체크되어있다.(없으면 install도 해야한다)

 

 

아 마지막으로 플러터에서 안드로이드 빌드는 아래명령어로 하면 알아서 aab 파일이 생성되고 경로도 알려준다 (물론오류도 알려준다)

 

flutter build appbundle

 

 

만약에 추가로 업데이트 된 버전을 출시 하기 위해서는

몇가지 수정을 하고, 빌드를 다시 해줘야 한다.

해당 defaultConfig 에서 버전 코드를 변경해주고 다시 빌드한다.

defaultConfig {
    // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
    applicationId "com.smith.memoapp"
    // You can update the following values to match your application needs.
    // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
    minSdkVersion 21
    targetSdkVersion 33
    versionCode 2
    versionName flutterVersionName
  }
반응형