본문 바로가기
개발/flutter

앱 서명된 flutter android release apk 생성

by hyperhand 2023. 12. 24.

1. 앱 서명에 사용될 업로드 키 생성

$ keytool -genkey -v -keystore ./app.keystore -keyalg RSA -keysize 2048 -validity 10950 -alias appKey
-genkey: 키 생성 명령
-v: 상세 정보 표시
-keystore: 키 저장소 위치 및 이름
-keyalg: 알고리즘
-keysize: 키 비트 크기
-validity: 유효 기간(일)
-alias: 키 별칭

키 저장소 비밀번호 입력:  
새 비밀번호 다시 입력: 
Enter the distinguished name. Provide a single dot (.) to leave a sub-component empty or press ENTER to use the default value in braces.
이름과 성을 입력하십시오.
  [Unknown]:  myname
조직 단위 이름을 입력하십시오.
  [Unknown]:  dev
조직 이름을 입력하십시오.
  [Unknown]:  company
구/군/시 이름을 입력하십시오?
  [Unknown]:  city
시/도 이름을 입력하십시오.
  [Unknown]:  state
이 조직의 두 자리 국가 코드를 입력하십시오.
  [Unknown]:  KR
CN=myname, OU=dev, O=company, L=city, ST=state, C=KR이(가) 맞습니까?
  [아니오]: y 입력
  
다음에 대해 유효 기간이 10,950일인 2,048비트 RSA 키 쌍 및 자체 서명된 인증서(SHA384withRSA)를 생성하는 중
	: CN=myname, OU=dev, O=company, L=city, ST=state, C=KR
[./app.keystore을(를) 저장하는 중]

 

2. 생성한 키는 android/app 디렉토리에 복사. 이 파일은 반드시 .gitignore에 등록돼 있어야 한다.

 

3. android 디렉토리에 생성 키스토어의 참조정보를 생성한다. 파일 이름은 key.properties. 이 파일도 반드시 .gitignore에 등록돼 있어야 한다.

storePassword=키스토어 생성시 입력한 비밀번호
keyPassword=키스토어 생성시 입력한 비밀번호
keyAlias=a키스토어 생성시 입력한 별칭
storeFile=app.keystore  // 다른 위치에 있다면 해당 경로 입력

 

4. android/app/build.gradle 파일을 열어 android 블럭 바로 앞에 아래 코드를 삽입한다.

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

   android {
         ...
   }

 

5. buildTypes 블럭을 찾아 다음 내용으로 변경한다.

// 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.debug
//     }
// }
signingConfigs {
   release {
       keyAlias keystoreProperties['keyAlias']
       keyPassword keystoreProperties['keyPassword']
       storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
       storePassword keystoreProperties['storePassword']
   }
}
buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

 

6. 캐시된 빌드가 앱 서명 절차에 영향을 미칠 수 있으므로 다음 명령 실행

$ flutter clean

 

7. 빌드

$ flutter build apk --release --target-platform=android-arm64

 

8. 정상적으로 완료되면 app-release.apk 파일 생성

 

반응형