-
[게임 개발] 유니티, 구글 플레이 - keystore -> pem 앱 무결성 등록 작업2021.09.03 PM 03:49
8월 말에 Google Play로부터 메일을 받았습니다.
[제목] 조치 필요: 2020년 11월 2일까지 Android targetSdkVersion을 업데이트하세요
[내용] 2020년 11월 2일부터 Google Play의 앱 및 게임 업데이트는 Android 10(API 수준 29) 이상을 타겟팅해야 합니다. 이 날짜가 지나면 Play Console에서 targetSdkVersion이 29 미만인 새 App Bundle 및 APK를 제출할 수 없습니다.
애플이 보내는 개발자 메일은 거의 영어인데요. 구글은 한글 메일로 보내줍니다. (고마워요 구글!)
이제 암산 & 주산 앱을 개발이 끝났으니 기존 앱들을 업데이트+패치 해야겠네요.
옛날 버전의 유니티에서 작업하던 프로젝트라, 최신 버전의 유니티에서 열면 자체적으로 컨버팅 작업을 진행하는데요.
저처럼 1년 2년전에 작업했던 프로젝트를 최신 버전의 유니티에서 열면 많은 에러 메시지가 올라옵니다.
Warning은 뭐 당연하게 올라오고 Error도 한 두개정도 덤으로 따라옵니다. Deprecated 된 API나 Player 설정에 바뀐 부분들이 항상 있더라구요.
다음으로 유니티 에셋, 내 에셋들도 최신 버전으로 업데이트합니다.
내가 구입한 에셋들은 업데이트 방법이 제각각이라 조심하지 않으면 삽시간에 쓰레기가 되고 맙니다. ㅠㅠ
대충 작업을 마치고 최종 빌드를 했는데요.
aab 설치 파일을 Google Play 대시보드의 프로덕트에 올리려고 했더니 에러가 납니다. Google Play 키스토어 정책이 바뀌었나봅니다.
옛날 keystore로 마켓에 등록한 앱을
1. *.keystore -> pepk.jar 컴파일 -> *.pem
2. 대시보드 "앱 무결성" 내용에 *.pem 등록
3. 유니티에서 *.keystore로 aab 설치 파일 빌드
4. 대시보드 프로덕트에 aab 파일을 성공적으로 올리는 데에 4시간 정도 들었습니다.
[현상]
- 옛날에 서비스하던 앱을 새로 빌드하는 상황
- 옛날에 등록했던 *.keystore 파일로 aab 빌드 파일 생성 성공
- 새로 빌드한 aab 파일을 프로덕션에 올렸는데 "앱 무결성" 등록이 안되었다고 나옴
[정보]
앱 무결성 메뉴 위치: GooglePlay Console > 해당 앱 > 출시 > 설정 > 앱 무결성
- 2021년 8월 이전에 만들어진 앱 안내 내용대로 따라 작업하면 됨
기존 keystore 내용 요약
- 유니티 에디터 혹은 Android Studio 에서 keystore 신규 생성
- keystore 파일 안에 프로젝트별 보안키를 alias로 생성: 하나의 *.keystore 파일 안에 여러 개의 alias를 등록할 수 있음
(예를 들면 company.keystore 파일 안에 alias인 game_one, alias인 game_two 가 포함됨)
(상단 password까지가 keystore 내용, 그 아래부터는 alias 내용)
- 기존 keystore의 확장자는 *.keystore(유니티 키스토어 매니저) 혹은 *.jks(java keystore)
새로운 Play 앱 서명 정보
- 개발자 keystore 파일을 pepk 로 한 번 더 암호화
- 확장자는 *.pem 또는 *.der
https://developer.android.com/studio/publish/app-signing?hl=ko
[문제 해결 과정]
개발자 페이지를 보고 따라하는데, java -jar pepk.jar 명령어에 들어가는 인자를 어떻게 넣어야 할지 잘 몰랐습니다.
그 부분만 아래에 부연 설명했습니다.
1. PEPK 도구 다운로드
2. 아래 명령어를 사용하여 pepk.jar 로 기존의 비공개 키(*.keystore, *.jks)를 암호화
java -jar pepk.jar --keystore=foo.keystore --alias=foo --output=encrypted_private_key_path --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6 |
* --keystore=foo.keystore 에서 foo.keystore: 기존의 비공개 키 (*.keystore, *.jks)
* --alias=foo 에서 foo: 기존의 비공개 키에 등록된 alias
* --output=encrypted_private_key_path 에서 encrypted_private_key_path: pepk가 적용되어 새로 발급받을 파일의 fullpath (예: new_key_pepk.pem)
기존에 apk 파일 빌드할 때 company.keystore 안에 game_one alias 를 사용했다면
company.keystore 파일과 (다운받은) pepk.jar 파일을 같은 폴더에 두고
java -jar pepk.jar --keystore=company.keystore --alias=game_one --output=./company.pem --encryptionkey=eb10fe8f7c7c9df715022017b00c6471f8ba8170b13049a11e6c09ffe3056a104a3bbe4ac5a955f4ba4fe93fc8cef27558a3eb9d2a529a2092761fb833b656cd48b9de6a
명령을 실행합니다. 결과물인 company.pem 파일은 --output 옵션에 지정된 fullpath(폴더와 파일명)로 저장됩니다.
[알게 된 내용]
안드로이드(구글 플레이)앱을 빌드할 때, 설치 파일 확장자가 apk -> aab 로 바뀌었습니다.
aab 빌드시 새로 요구하는 앱 무결성 (새로운 보안 키가 적용된 keystore) 등록 작업이 선행되어야 합니다.
기존 *.keystore 를 사용하던 앱은 pepk 도구를 실행하여 *.pem 파일을 생성하고 등록하면 됩니다.
밀렸던 작업을 하느라 이번엔 신규 앱 업데이트 작업이 미뤄지네요.
조급해하지 말고 밀렸던 작업을 진행하면서, 신규 앱 업데이트 작업 내용을 천천히 구상해보려고 합니다. ^^
user error : Error. B.