Android
GooglePlay

APK を Google Play に自動アップロードする

概要

Android アプリを自動的に Google Play へアップロードする方法について述べます。

手動でのリリース

個人のAndroid アプリ開発だとこんな感じではないでしょうか。

  1. ローカルPCでAPKをビルド
  2. APK を Google Play の Developer Console にアップロード
  3. mapping.txt を Google Play の Developer Console にアップロード
  4. リリースノートを Google Play の Developer Console に記入
  5. βチャネルでのリリース前テストが終わったら公開

自動化すると、1-4までは自動化できます。

どうやるのか?

今回は gradle-play-publisher という Gradle プラグインを使います。

特徴

  • (サービスアカウントがあれば) build.gradle に追記するだけで使える
  • APKの作成からアップロードまで一括して実行
  • アップロードチャネルを指定可能

導入

以下3ステップが必要です。

  1. サービスアカウントを発行
  2. signingConfigs を分離
  3. Gradle ファイルに設定を追加

1. サービスアカウントを発行

こちらの記事の #サービスアカウントの登録を参考に、サービスアカウントを発行します。

serviceaccount.png

2. signingConfigs を分離

署名等の情報を別のファイルに定義し、そのファイルを.gitignore に登録して git の構成管理から外しておきます。

signingConfigs {
  release {
    storeFile file("keystore.jks")
    storePassword "st0rep@ssw0rd"
    keyAlias "keyaliasname"
    keyPassword "keyp@22w0rd"
  }
}

.gitignore

.gitignore
/app/signing

3. Gradle ファイルに設定を追加

まずプロジェクトルートの build.gradle に依存を追加します。

build.gradle
buildscript {
  dependencies {
    classpath 'com.github.triplet.gradle:play-publisher:1.2.0'

続いて、 app/build.gradle にプラグインの追加と、2. で分離した signing config の追記、Google Play サービスアカウントの設定をします。

app/build.gradle
apply plugin: 'com.github.triplet.play'

// 分離した signingConfigs を include
apply from: 'signing/config.gradle', to: android

android {
//...
    playAccountConfigs {
        defaultAccountConfig {
            serviceAccountEmail = 'account-name@api-XXXXXXXXXXXXXXX-XXXXXXX.iam.gserviceaccount.com'
            jsonFile = file('signing/Google Play Android Developer-xxxxxxxxx.json')
        }
    }
    play {
        track = 'beta'
        untrackOld = true
    }

playAccountConfigs

先ほど発行したサービスアカウントの情報を指定します。JSON ファイルは安全のため、バージョン管理から外しておくのが無難でしょう。

play

Google Play のアップロード先等を指定できます。今回はリリース前テストを実行してから本番リリースをしたいので、βを指定しておきます。


実行

ここまでの設定が上手くいっていれば、gradle tasks で publishApkRelease というタスクが追加されているはずです。

あとは開発が終了次第、タスクを実行しましょう。

$ gradle publishApkRelease

これだけで APK のビルドからアップロードまで自動でやってくれます。なお、時間は多少かかります。


自動化すると何がよいのか?

Google Play の Developer Console を使えば APK のアップロードはできますし、ストア情報の更新も同様に可能ですので、導入のコストを支払ってまで自動化する必要はないのではと思われるかもしれません。

よいこと

  • 「うっかり別アプリの情報を編集していた!」が防げる
  • クラッシュレポートが送信されてから「あ、mapping.txtアップロードし忘れてた!しかもローカルから消えてる!」が防げる
  • リリース時のストアの更新情報を git でバージョン管理できる(しなくてもよい)

なお、Firebase 等のクラッシュレポートツールを用いている場合は別途そちらへ mapping ファイルをアップロードする必要があります。


考慮点

会社で使う場合、CI が Gradle の実行タスク変更に対応していること、サービスアカウント作成が可能であること、を確認する必要があります。


まとめ

Gradle プラグインを使って APK を自動アップロードする方法について説明しました。手作業でミスするリスクを最小化しましょう。