前回の「deploygateにapkをコマンドでアップロード」に続き、GooglePlayへの本番アプリのリリースも自動化にも取り組みました。
今まではAndroidStudio上の操作でAppBundleファイルを作成し、GooglePlayへのアップロードは手動でやっていましたが、作業の効率化やミス防止やCI導入を見据えて一連の作業をコマンド化しています。
AppBundleの導入
AppBundleの詳細についてはこちら。すでに導入している場合はスキップしてください。
1. アプリ署名への登録
GooglePlayConsoleを開き、「登録するアプリ > リリース管理 > アプリの署名」を選択します。利用規約が表示されるので、内容を確認して問題なければアプリを登録しましょう。
2. 秘密鍵のエクスポートと暗号化
まだ秘密鍵をエクスポートしていないと思うので、まずはエクスポートと暗号化を行います。合意後に表示されている画面の指示に従い、PEPKツールをダウンロードしましょう。PEPKツールで既存のkeystoreから秘密鍵のエクスポートと暗号化をおこないます。
$ java -jar pepk.jar --keystore=foo.keystore --alias=foo --output=encrypted_private_key_path --encryptionkey=xxxxxxxxx
3. 暗号化された秘密鍵をアップロード
出力されたencrypted_private_key_pathを表示されている画面上のボタンからGooglePlayへアップロードします。新たにアップロード鍵を生成して使用する場合はこちらを参考に。
gradle-play-publisherの導入
GooglePlayへのアップロードには、gradle-play-publisherを利用します。
1. GooglePlayConsoleとGoogleAPIConsole上のプロジェクトをリンク
GooglePlayConsoleの「設定 > APIアクセス」を開き、プロジェクトをGooglePlayにリンクさせます。プロジェクトが表示されない場合はGoogleAPIConsole上で新規作成し、GooglePlayAndroidDeveloperAPIを有効にしましょう。
2. サービスアカウントキー(JSON)のダウンロード
続いて表示されている画面の「サービスアカウントを作成」ボタンをクリックし、GoogleAPIConsoleでのサービスアカウント作成に進みます。画面の指示に従いサービスアカウントを作成したら、「認証情報 > 認証情報の作成 > サービスアカウントキー」 にてサービスアカウントキー(JSON)をダウンロードします。
3. 作成したサービスアカウントからのアクセスを許可
作成が完了するとGooglePlayConsoleの画面上の「サービスアカウント」欄に作成したサービスアカウントが表示されます。「アクセスを許可」ボタンから適切な権限を設定しましょう。
4. build.gradleの設定
app下のbuild.gradleに記述を追加します。
plugins {
id 'com.android.application'
id 'com.github.triplet.play' version '2.1.0'
...
}
ダウロードしたサービスアカウントキー(JSON)をAndroidプロジェクトの適当な場所に配置し、serviceAccountCredentialsで指定します。以下ではbeta版向きにしていますが、製品版をアップロードする場合はtrackをproductionにします。
play {
serviceAccountCredentials = file("your-key.json")
track = "beta"
}
GooglePlayへのアップロード
コンソールでプロジェクト直下に移動し、まずは以下のコマンドでGooglePlayに登録している画像等のリソースをダウンロードしましょう。
./gradlew bootstrapReleasePlayResources
GooglePlayに登録してある画像等を変更したい場合は、リソースを更新して以下のコマンドでアップロードできます。
./gradlew publishListingRelease
いよいよAppBundleをGooglePlayへアップロード!
./gradlew publishReleaseBundle
※productFlavorsを利用している場合はタスクもそのBuildVariantに合わせましょう。./gradlew tasks
で確認できます。
以上、簡単アップロードでした (^o^)/