既存APKアプリをGoogle Playアプリ署名・Android App Bundleへ移行
はじめに
既にAPKで公開済のアプリをGoogle Play アプリ署名の利用に変更し、Android App Bundleを利用できるようにするまでのメモです。
現状うまく動いているからあとでいいじゃん、と思い続けて結構長らく放置してたんですが、2021年後半よりGoogle PlayではAndroid App Bundleが必須化されるという公式情報も出ており、いずれやらないといけないなぁと思っていたので今回対応しました。
既存アプリのリリース署名はJava KeyStoreでやっていたので、今回はそこからの移行作業となります。
↑このラジオボタンの真ん中のやつですね
事前に用意しておいた方が良いもの
- 現在リリースアプリ署名に使っているKeyStore情報(ファイル本体、エイリアス名、パスワードなど)
- Google Play Consoleのアカウント所有者権限 or 管理者権限アカウント
Java KeyStore から鍵をエクスポートしてアップロードする
PEPKツールをダウンロード
KeyStoreファイルから秘密鍵のエクスポート+暗号化ができるPlay Encrypt Private Key(PEPK)ツールをダウンロードします。
これは、Google Play Consoleのここ↓でダウンロードできます。
秘密鍵エクスポート
次にPEPKツールを使って秘密鍵をエクスポートします。
$ java -jar pepk.jar --keystore={現在のKeystoreファイル} --alias={エイリアス名} --output={出力秘密鍵ファイル名} --encryptionkey={Google Play Console内で自動的に入ってる値そのまま}
このコマンド実行する際に必要なencryptionkey
は、この作業を行なっているGoogle Play Console手順内に記載されているので、その値をそのまま使用します。
コマンド実行後、{出力秘密鍵ファイル名}
に記載したファイルが出力されることを確認しておいてください。これが今後Google Play側で管理されることになるアプリ署名となりますので、あとでGoogle Play Consoleへアップします。
新しいアップロード鍵を生成
セキュリティを強化するため、これまでのアプリ署名鍵ではなく新しいアップロード鍵を用意してアプリに署名することが推奨されており、そのアップロード鍵を生成します。
ここではAndroid Studioを使った手順で説明します
- Android Studioのメニュー「Build」-「Generate Signed Bundle / APK...」
- ラジオボタン「Android App Bundle」「APK」いずれかを選択して「Next」(最後までやらないのでどっちでもいい)
- 「Key store path」のところにある「Create new ...」
- 新しいKeyStore情報を入れてOKして作成
- 公式では新しいKeyStoreを「upload-keystore.jks」っていう名前にしてる
- KeyStore情報入力の参考にこれまで使ってたKeyStoreの情報を参考にしたい場合はこちら
keytool -list -v -storepass {pass} -keystore {keystore_file}
- ここまでで必要なKeyStoreは作られているので、「Generate Signed Bundle / APK」ダイアログは閉じる
- 次のコマンドで、Keystoreから証明書をPEMファイルとしてエクスポートする
keytool -export -rfc -keystore {生成したKeystore名} -alias {エイリアス名} -file {出力PEMファイル名}
ここで最終的に出力された{出力PEMファイル名}
が以降の手順で使用するアップロード鍵の証明書となります。
アプリ署名秘密鍵とアップロード鍵証明書をGoogle Play Consoleへアップロード
ここまでで生成した秘密鍵{出力秘密鍵ファイル名}
と、アップロード鍵の証明書{出力PEMファイル名}
をそれぞれGoogle Play Consoleの以下のからアップロードします。
なおこの作業を行うためには、アカウント所有者か管理者権限で利用規約に同意する必要があります。
これで無事にアップロードできれば、Google Playアプリ署名の設定は完了です。
アップロード鍵で署名したAndroid App Bundle生成
以降はこれまで使用していたアプリ署名鍵ではなく、今回新しく生成したアップロード鍵でリリースアプリを署名することになります。
signingConfigs { release { storeFile file("./upload-keystore.jks") // <- ここが新しいアップロード鍵のKeyStore storePassword "your_password" keyAlias "your_alias_name" keyPassword "your_password" } }
また、これまでassemble{Flavor}{BuildType}
コマンドなどで.apkを生成していましたが、以降はbundle{Flavor}{BuildType}
で.aabを生成することになります。
ちなみに私はこの辺のaab生成〜Google Play Consoleへのアップまでの一連の流れを以下のgradle-play-publisherに任せてます。
Google APIを叩くための各種設定作業が必要となりますが、それらを設定すればあとは./gradlew publish{Flavor}{BuildType}Bundle
で一発で済むのでそれなりにおすすめです。
おわりに
以上の作業を経て、無事Google Playアプリ署名・Android App Bundleへ移行することができました。
この移行作業、なんかあまりRevertできるようなことが書いてなくて、失敗するとリリースできなくなるんじゃないかと心配になるので、なかなか手を付けられていなかったんですよね。
まだ手を付けてない方いらっしゃいましたら、ぜひ参考にしていただければ。