flutter 안드로이드 출시하기 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 번들로 컴파일 하는데 과거의 문서를 따라했더니 오류가 많았다. 그래서 처음인 사람을 위해(나도 초보다) 새로 작성하게 되었다. 

 

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 코드난독화 및 사이즈 축소
        }
    }

 

 

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

Flutter(플러터)

번호 제목 글쓴이 날짜 조회수
16 flutter fcm push 관리자 01-12 365
15 webview_flutter로 file upload하기 (Android) 관리자 12-01 511
14 Flutter에서 webview_flutter alert confirm 안 될때 처리 관리자 10-26 503
13 [flutter] Guideline 5.1.1 관리자 10-06 578
12 [ Flutter ] ITMS-90078 오류 해결 관리자 10-06 498
11 Flutter로 App 을 store 등록하기 관리자 09-13 483
10 [flutter] 앱의 패키지 이름을 변경하는 방법 관리자 09-10 418
9 Flutter 디버그 모드 / 릴리즈 모드 구분하기 / 디버깅 안될때 관리자 09-10 287
8 [Flutter] 안드로이드 앱 배포하기 관리자 09-10 328
7 flutter 안드로이드 출시하기 keystore 적용 (keystore 분실 해결방법) 관리자 09-10 307
6 flutter 프로젝트 생성 및 iPhone에서 실행해보기(for Mac) 관리자 08-23 285
5 Flutter 인기 아키텍처 라이브러리 3종 비교 분석 - GetX vs BLoC vs Provider 관리자 04-13 685
4 플루터 관리자 04-11 391
3 [Flutter] WebView 사용하기 2편 관리자 04-10 650
2 [Flutter] WebView 사용하기 1편 관리자 04-10 967
1 Java / Spring 공부를 처음 시작 한다면 관리자 10-25 2,102