반응형

나는 과거에 가지고 있던 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 코드난독화 및 사이즈 축소
        }
    }

 

 

 

 

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

반응형

+ Recent posts