본문 바로가기
개발일지/GoodWishes

[굿위시 제작기] 18. 구글 플레이스토어 출시과정 - 본인확인, 비공개 테스트 버전 앱 번들 제작하기

by 박기린 2024. 11. 16.

지난 과정에 이어서, 이번엔 '본인 확인, 테스트 버전 앱 번들 빌드'를 등록할 차례입니다.

 

 


개발자 본인 확인 인증

앱을 출시하기 전까지 꼭 본인확인을 마쳐야 합니다.

 

 

 

 

 

그런데 PASS앱을 통하는 본인확인이 아니라, '주소지 증빙 서류'를 필요로 합니다.

저는 주민등록등본(초본)을 스캔해서 보냈습니다.

 

 

 

 

 

 

 

주소 형식이 알맞지 않을 경우, 수정된 주소를 추천합니다.

수정한 후 제출하면, 며칠 내로 개발자 인증을 해준다고 합니다.

 

만약 인증과정에 문제가 생길 경우, 메일로 안내를 해줍니다.

 

 

 

 

 

 

 


비공개 테스트 

플레이스토어는 앱 출시 전에 꼭 '비공개 테스트'를 진행해야 합니다.

 

 

 

 

 

알파 테스트 버전을 생성한 후, 앱 번들파일(aab)을 제출해야합니다.

지금부터 이 파일을 만들기 위해 필요한 과정들을 밟아보겠습니다.

 

 

 

 

 


앱 이름 지정하기

android/app/src/main/AndroidManifest.xml

android:label에 앱 이름을 적어줍니다.

 

 

 

 

android/app/build.gradle

 

 

 

사진의 applicationId 부분에 "com.개발자이름.앱이름"을 적어줍니다.

 

 

 

 


앱 버전 & 앱 권한

pubspec.yaml

버전 이름을 적어줍니다.

 

 

 

 

android/app/src/main/AndroidManifest.xml

앱이 필요로 하는 권한을 지정합니다.

 

굿위시는 사진을 불러오기 때문에, 'READ_EXTERNAL_STORAGE' 권한을 가져왔습니다.

 

 

 

 

 


앱 키 스토어(keystore) 만들기

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

위 코드를 입력하면, 키스토어를 제작하기 위한 과정을 밟을 수 있습니다.

 

 

 

 

개발자 정보에 대한 여러 문답이 이뤄지고, 끝나면 keystore 파일이 생성됩니다.

 

 

 

 

 

key.jks 파일을 android/app 폴더에 넣습니다.

 

 

 

 

 

그리고 key.properties 파일이 없다면 생성한 후

 

 

 

 

storePassword=키 생성할 때 입력한 암호
keyPassword=키 생성할 때 입력한 암호
keyAlias=key
storeFile=./key.jks

위 형식으로 파일을 작성합니다.

 

 

 

 

 

 

 

 

 

이제 android/app/build.gradle 파일로 이동합니다.

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

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

 

 

 

 

 

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }

위 코드들을 추가합니다.

 

 

 

 

 


앱 번들 빌드 오류 : flutterRoot 변수

flutter build appbundle

앱번들 빌드를 하려고 하면,

 

 

 

오류문구가 뜨는데, 'flutterRoot'가 무엇인지 모르겠다는 이유로 뜹니다.

 

 

 

 

android/app/build.gradle

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

이 코드 바로 위에,

 

 

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

위 코드를 입력해서 flutterRoot를 지정합니다.

 

 

 

 

그리고 다시 앱번들 빌드를 하면, 오류없이 작동합니다.

 

 

 

 


1차 제출 실패 : 출시 모드로 앱 번들 빌드하기

빌드한 aab 파일을 제출합니다.

 

 

 

 

 

그런데 오류가 뜹니다.

디버그 모드가 아니라 출시 모드로 빌드한 앱 번들을 가져오라는 뜻입니다.

 

 

 

 

 

android/app/build.gradle

buildTypessigningConfig의 debug를 release로 변경합니다.

 

 

 

 

 

빌드를 하려고 하니,

 

 

 

 

 

:app:validateSignReleaseBundle에 관련된 문제가 발생합니다.

디버그 모드에서 출시 모드로 바꾸면서, 아까 생성한 KeyStore 파일을 불러와야 합니다. 그런데 그 파일이 잘 안 불러와지면 해당 오류가 발생합니다.

 

아까 keystore는 생성해놨기 때문에, 경로가 잘 지정됐는지를 살펴봐야 합니다.

 

 

 

 

android/app/build.gradle

keystorePropertiesFile의 경로가 잘못됐습니다.

 

 

 

 

 

key.properties파일은 android/app 폴더에 저장해놨기 때문에, 

 

 

 

 

 

def keystorePropertiesFile = rootProject.file('app/key.properties')

경로를 위처럼 수정합니다.

 

 

 

 

 

 

이제 빌드가 잘 됩니다.

 

 

 

 

 

 

 


추천 사항 : proguard-rules.pro

android/app/proguard-rules.pro

플러터 앱의 코드를 난독화하는 장치입니다.

위 파일을 생성한 후, 빌드를 하는 것을 추천드립니다.

 

 

 

 

 

proguard-rules.pro를 작성한 후, android/app/build.gradle파일의 buildTypes 코드 안에

 

 

 

            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'app/proguard-rules.pro'

위 내용을 추가합니다.

* 예전엔 useProguard라는 함수를 사용했는데, 지금은 사용하지 않습니다. 만약 옛날에 사용된 코드를 긁어오셨다면, useProguard에서 오류가 발생합니다.

 

 

다시 앱 번들 파일을 빌드합니다.

 

 

 

 

 

 

 


2차 제출 실패 : 국가/지역 설정과 API 타겟 SDK 지정

이제 앱 번들을 제출하면,

 

 

 

 

번들 파일에 등록된 정보가 자동으로 입력되고, 추가로 출시 설명을 적으라고 합니다.

다 적은 후 제출을 하면,

 

 

 

 

 

이번엔 두 가지 오류가 떴습니다.

1. 국가/지역 설정 문제

2. API 수준 문제

 

 

 

 

 

 


국가 선택

비공개 테스트 탭에서 국가를 선택할 수 있습니다.

모든 국가 선택한 다음 '확인'하면 끝입니다.

 

 

 

 

 

 


API SDK 버전 문제

현재 안드로이드 SDK API의 수준이 33인데, 34로 높이라는 경고를 합니다.

이건, 앱을 제작하는 동안 안드로이드 새 버전이 출시되면서 발생한 문제입니다.

 

 

 

 

flutter upgrade로 플러터 버전을 업데이트 한 후, 앱 번들을 다시 빌드하면 문제가 해결됩니다.

 

 

 

 

 

 


3차 제출 실패 : 이미 사용된 버전 코드

이제는 정말 끝난 줄 알았지만, 버전 코드 오류가 떴습니다.

아까 API 레벨을 높인 후 다시 앱 번들 빌드를 하고 제출을 하면, 제출한 앱 번들마다 버전 코드를 다르게 하라는 오류가 뜹니다.

 

버전 코드는 앱의 버전과는 다른 것입니다.

버전 코드 : 플레이스토어에 제출한 앱 번들 파일의 순서

앱 버전 : 스토어에 정식 출시한 앱 버전

 

 

 

 

android/app/build.gradle

defaultConfig에 versionCode를 지정할 수 있는 항목이 있습니다. 여기에서 숫자를 +1 합니다.

 

그리고 다시 앱 번들 빌드를 한 후, 제출합니다.

 

 

 

 

 


제출 성공?

버전 코드, 타겟 SDK까지 잘 적용된 모습입니다.

 

 

 

 

 

이제 앱 안정성 검사로 넘어가나 싶은데,

 

 

 

 

 

 

 

 


4차 제출 실패 : 광고 ID 선언

마지막 관문으로 '불완전한 광고 ID 선언' 문제가 떴습니다.

'선언 작성' 링크로 가면

 

 

 

 

앱의 광고 ID 사용 여부를 확인합니다.

굿위시는 광고 ID를 사용하지 않기 때문에 '아니요'를 체크하고 넘어갑니다.

 

 

 

 

 

 


본인인증 완료 & 제출 완료

앱 번들 제작이 완료됐습니다.

 

 

맨 처음에 했던 '개발자 본인 인증'이 완료되면

 

 

 

 

 

이제 정식으로 앱을 검토받을 수 있습니다.

 

 

 

 

 

앱을 제출하고 하루정도 기다리면,

 

 

 

 

 

 

 

게시 완료라고 뜹니다.

하지만 여기서 플레이스토어 출시가 끝난 게 아닙니다. 큰 관문이 하나 더 남았습니다.

 

 

 

 

 


남은 관문 : 테스터 모집하기

해당 앱은 정식 출시가 된 게 아니라, '테스트가 허용'된 상태일 뿐입니다.

 

 

 

 

 

이제 정식으로 테스터를 구해서, 플레이스토어를 통해 테스트를 진행해야 합니다.

이 과정은 다음 글에서 알아보겠습니다.

 

 

끝.

 

반응형