麦芽を支える技術

麦芽(ばくが、英語:malt)とは、麦、特に大麦の種子を発芽させたもので、ビール、ウイスキー、水飴の原料となる。(Wikipediaより)

既存APKアプリをGoogle Playアプリ署名・Android App Bundleへ移行

はじめに

既にAPKで公開済のアプリをGoogle Play アプリ署名の利用に変更し、Android App Bundleを利用できるようにするまでのメモです。

現状うまく動いているからあとでいいじゃん、と思い続けて結構長らく放置してたんですが、2021年後半よりGoogle PlayではAndroid App Bundleが必須化されるという公式情報も出ており、いずれやらないといけないなぁと思っていたので今回対応しました。

developer.android.com

既存アプリのリリース署名はJava KeyStoreでやっていたので、今回はそこからの移行作業となります。

f:id:asmz0:20201016120648p:plain:w600

↑このラジオボタンの真ん中のやつですね

事前に用意しておいた方が良いもの

  • 現在リリースアプリ署名に使っているKeyStore情報(ファイル本体、エイリアス名、パスワードなど)
  • Google Play Consoleのアカウント所有者権限 or 管理者権限アカウント

Java KeyStore から鍵をエクスポートしてアップロードする

PEPKツールをダウンロード

KeyStoreファイルから秘密鍵のエクスポート+暗号化ができるPlay Encrypt Private Key(PEPK)ツールをダウンロードします。

これは、Google Play Consoleのここ↓でダウンロードできます。

f:id:asmz0:20201016180027p:plain:w600

秘密鍵エクスポート

次にPEPKツールを使って秘密鍵をエクスポートします。

$ java -jar pepk.jar --keystore={現在のKeystoreファイル} --alias={エイリアス名} --output={出力秘密鍵ファイル名} --encryptionkey={Google Play Console内で自動的に入ってる値そのまま}

このコマンド実行する際に必要なencryptionkeyは、この作業を行なっているGoogle Play Console手順内に記載されているので、その値をそのまま使用します。

f:id:asmz0:20201016180532p:plain:w600

コマンド実行後、{出力秘密鍵ファイル名}に記載したファイルが出力されることを確認しておいてください。これが今後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の以下のからアップロードします。

f:id:asmz0:20201016123546p:plain:w600

なおこの作業を行うためには、アカウント所有者か管理者権限で利用規約に同意する必要があります。

f:id:asmz0:20201016125200p:plain:w600

これで無事にアップロードできれば、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に任せてます。

github.com

Google APIを叩くための各種設定作業が必要となりますが、それらを設定すればあとは./gradlew publish{Flavor}{BuildType}Bundleで一発で済むのでそれなりにおすすめです。

おわりに

以上の作業を経て、無事Google Playアプリ署名・Android App Bundleへ移行することができました。

この移行作業、なんかあまりRevertできるようなことが書いてなくて、失敗するとリリースできなくなるんじゃないかと心配になるので、なかなか手を付けられていなかったんですよね。

まだ手を付けてない方いらっしゃいましたら、ぜひ参考にしていただければ。