[flutter (플루터 앱 개발)] flutter 안드로이드 출시하기 keystore 적용 (keystore 분실 해결방법)

나는 과거에 가지고 있던 keystore을 잃어버려 앱을 업데이트 못하고 있었다. 이를 해결하는 방법에 대해서 적고 이번에 앱을 업데이트하면서 발생했던 문제를 적으려고 한다. 필자는 맥북을 사용중이다!

 

1. keystore 분실 해결 방법

2. keystore 적용 및 오류 해결 방법

 

1. keystore 분실 해결 방법

먼저 새로 key를 만들어 준다.

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

여기서 -keystore 다음에 key.jks는 키파일 이름이고      /      마지막에 alias 뒤에 key는 별칭이다.

나의 경우 둘다 key로 지정했다. 둘이 같을 필요는 없지만 나중에 flutter 소스에 추가해줘야하므로 기억해야한다.

 

아래와 같이 적당히 입력해준다.

kang@ganghyeonsuui-MacBookPro ~ % keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
키 저장소 비밀번호 입력:  암호 입력하면 됨
새 비밀번호 다시 입력: 암호 입력하면 됨
이름과 성을 입력하십시오.
  [Unknown]:  spin earth
조직 단위 이름을 입력하십시오.
  [Unknown]:  tistory
조직 이름을 입력하십시오.
  [Unknown]:  writer
구/군/시 이름을 입력하십시오?
  [Unknown]:  seoul
시/도 이름을 입력하십시오.
  [Unknown]:  Gangbuk               
이 조직의 두 자리 국가 코드를 입력하십시오.
  [Unknown]:  82
CN=spin earth, OU=tistory, O=writer, L=seoul, ST=Gangbuk, C=82이(가) 맞습니까?
  [아니오]:  Y

다음에 대해 유효 기간이 10,000일인 2,048비트 RSA 키 쌍 및 자체 서명된 인증서(SHA256withRSA)를 생성하는 중
	: CN=spin earth, OU=tistory, O=writer, L=seoul, ST=Gangbuk, C=82
<key>에 대한 키 비밀번호를 입력하십시오.
	(키 저장소 비밀번호와 동일한 경우 Enter 키를 누름):  그냥 엔터 누르거나 위의 암호와 똑같이 하는것을 추천 (기억만 잘 하면 상관없음)
[/Users/kang/key.jks을(를) 저장하는 중]

 

그럼 가장 아래에 위치한 저장소에 키파일이 저장된다. 그리고 이 파일을 구글에 제출 하면 되는데 원본을 제출하는것이 아니라 .pem으로 제출해한다. 터미널을 사용해 key파일이 있는 위치로 가서(명령어 : cd /Users/kang) 아래의 명령어를 통해 pem으로 만들어 준다.

keytool -export -rfc -keystore key.jks -alias key -file upload_certificate.pem

그럼 원래 key.jks가 있던 위치에 upload_certificate.pem 파일이 있을 것이다.

 

그 다음 https://support.google.com/googleplay/android-developer/contact/otherbugs 로 접속을 한다.

 

이름 , 성, 이메일, 위치까지는 알아서 상식선으로 입력하고

개발자 이름(https://play.google.com/console/ 에 접속하여 가장 왼쪽 상단 버튼 눌러서 목록에 개발자 페이지 들어가면 있다.)

개발자 계정 ID(https://play.google.com/console/ 에 접속하여  가장 왼쪽 상단 버튼 눌러서 목록에 계정 세부정보 들어가면 가장 아래에 숫자로 되어있다.)

앱 이름(상식)

앱패키지 이름(com.~~~~.~~~~)

문제 설명(keystore을 분실하여 새로 등록하려고 합니다. 만 입력하면 된다.)

파일 첨부(바로 위에서 만든 upload_certificate.pem를 첨부해준다.)

 

이렇게 입력해서 3~4일 뒤에 메일로 키가 새로 등록됬다고 날라온다.

 

 

 

2. keystore 적용 및 오류 해결 방법

새로 키를 등록하고 abb 번들로 컴파일 하는데 과거의 문서를 따라했더니 오류가 많았다. 그래서 처음인 사람을 위해(나도 초보다) 새로 작성하게 되었다. 

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

1.먼저 프로젝트 파일/android/app/ 위치에 위에서 생성한 키파일(key.jks)을 넣어준다.

 

2.프로젝트 파일/android/app/ 위치에 key.properties 를 생성해준다.

그리고 key.properties에 아래와 같이 입력한다.

storePassword=password1234(위에서 가장 처음에 입력한 암호)
keyPassword=password1234(위에서 가장 마지막에 입력한 암호)
keyAlias=key(키 별칭)
storeFile=key.jks(키 파일 이름)

일부가 블로거가 헷갈리게 아래와 같이 해놔서 <>, "" 등 특수문자가 필요한줄 알았는데 나중에 오류가 났다. 오로지 평문으로만 입력해야한다.
storePassword=<암호 입력>
storePassword="암호 입력"

무조건 아래와 같이 해야한다.
storePassword=password1234

 

 

3. 프로젝트 파일/android/app/ 위치에 proguard-rules.pro 생성해준다.

그리고 proguard-rules.pro에 아래와 같이 입력한다.

proguardpro는 당신의 소스를 암호화,난독화 하는 것이다. 이렇게 간단하니 하는게 좋다.

## 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.**

 

4. 프로젝트 파일/android/app/build.gradle 를 수정해야한다.

 

4-1. 먼저 가장 최상단에 아래와 같은 코드를 입력해준다.

// start of Gradle 서명 구성
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('app/key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
// end of Gradle 서명 구성

일부 사람들이 2번째줄에 key.properties 경로를 그냥 def keystorePropertiesFile = rootProject.file('key.properties')으로 해놓은 경우가 있었는데 나는 이렇게 하니 키 파일을 불러오지 못해서 컴파일 과정에서 아래와 같은 오류가 발생했다.

* What went wrong: Execution failed for task ':app:validateSigningRelease'. > Keystore file not set for signing config release

Keystore file not set for signing config release

기타 등등 (물론 위에서 말한 이유로 암호를 잘못 입력한것도 있었다.)

 

4-2. buildtype 위에 아래의 코드를 입력해준다.

// 아래의 signingConfigs를 추가해주면 된다.

signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }
 // 위의 signingConfigs를 추가해주면 된다.


//여기는 예시

    buildTypes {
        release {
            signingConfig signingConfigs.debug
        }
    }
//예시 끝

여기서 나는 처음에 과거 블로그를 보고 3번째줄에 storeFile keystoreProperties['storeFile']만 입력했었는데 App problem occurred evaluating project ':app'. > path may not be null or empty string. path='null' 오류가 발생해서 구글링을 통해 위와같이 소스를 수정해서 해결했다

 

4-3. buildtype을 수정해준다.

buildTypes {
        release {
            //signingConfig signingConfigs.debug로 되어있는데 signingConfig signingConfigs.release로 수정해준다.
            signingConfig signingConfigs.release

            // start of proguard 코드난독화 및 사이즈 축소
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            // end of proguard 코드난독화 및 사이즈 축소
        }
    }

 

이렇게 수정해주고 flutter build appbundle 명령어를 실행하면 abb 번들이 만들어 진다.

 

 

[출처] https://earthspin.tistory.com/10

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
171 [Ren'Py] 렌파이(RenPy) 에 광고 (애드몹) 붙이기 file 졸리운_곰 2024.12.20 225
170 [godot 엔진] 오픈 소스 고도 프로젝트 모음 - 고도 배우기, Godot file 졸리운_곰 2024.12.16 337
169 [RPG Maker] Simple AdMob - RPG Maker MV 졸리운_곰 2024.12.16 324
168 [RPG Maker] 코르도바 광고 삽입 플러그인 - RPG Maker MV file 졸리운_곰 2024.12.15 160
167 [RPG Maker] MacOS에서 RPG Maker MZ로 만든 게임을 Android 앱으로 빌드하기 file 졸리운_곰 2024.12.15 196
166 [Unity] [모바일, 2D] 유니티 기초2 - 씬 전환하기 file 졸리운_곰 2024.12.14 186
165 [flutter (플루터 앱 개발)] How to Implement Any UI in Flutter : 플러터에서 모든 UI를 구현하는 방법 file 졸리운_곰 2024.11.28 192
164 [게임 일반] SharpMoku a Gomoku/Five in a Row Written in C# : SharpMoku a Gomoku/Five in a Row C#로 작성됨 : 오목게임 개발 file 졸리운_곰 2024.10.31 311
163 [flutter] A PocketBase backend for Flutter and Dart : Flutter 및 Dart용 PocketBase 백엔드 file 졸리운_곰 2024.10.29 266
162 [flutter] 44... 실 기기 테스트용 apk 파일 빌드하기 졸리운_곰 2024.10.26 233
161 [게임 마켓플레이스] 스팀에 ‘게임’을 출시하고 싶다면? file 졸리운_곰 2024.09.07 316
160 [TextMode Game Create] Text based game 졸리운_곰 2024.08.25 519
159 [pocketbase] 포켓 베이스(Pocket Base) 빠르게 입문하기(CRUD) file 졸리운_곰 2024.08.20 342
158 [pocketbase] Flutter 및 Dart용 PocketBase 백엔드 : A PocketBase backend for Flutter and Dart file 졸리운_곰 2024.08.18 394
157 [flutter (플루터 앱 개발)] [플러터] ios : error while build iOS app in Xcode : Sandbox: rsync.samba (13105) deny(1) file-write-create, Flutter failed to write to a file file 졸리운_곰 2024.07.26 296
156 [flutter (플루터 앱 개발)] [플러터] ios 앱 출시하기 file 졸리운_곰 2024.07.24 343
» [flutter (플루터 앱 개발)] flutter 안드로이드 출시하기 keystore 적용 (keystore 분실 해결방법) 졸리운_곰 2024.07.16 333
154 [flutter (플루터 앱 개발)] Flutter - GetX를 이용한 상태관리 file 졸리운_곰 2024.07.12 326
153 [pocketbase] A PocketBase backend for Flutter and Dart : Flutter 및 Dart용 PocketBase 백엔드 file 졸리운_곰 2024.06.19 283
152 [flutter (플루터 앱 개발)] flutter pocketbase 사용법 3탄(로그인) file 졸리운_곰 2024.06.10 413
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED