asmz.beer

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

Google Play Developer ConsoleへのAPKアップロードにgradle-play-publisherを使ってみた

Google Play Developer ConsoleへのAPKアップロードができるGoogle Play Developer Publishing APIをGradleから実行できれば、リリースビルドAPK作成後にそのままアップロードできて便利だなーと思ってました。

で、自前でAPI使ってツール作るのもちょっと手間だったのでいろいろ探したら「gradle-play-publisher」というのが見つかったので、今回ちょっと使い方を調べてみました。

事前準備

これはAPI使う際の共通作業で、ググればもっと親切なサイト見つかるので、ここではとてもざっくりとだけ書きます。

Google Play Developer Consoleにて

  • 「設定」−「APIアクセス」でサービスアカウントを作成

Google Developer Consoleにて

  • APIと認証」−「認証情報」でOAuthの新しいクライアントID(種類:サービスアカウント)を作成
  • 「新しいP12キーを作成」でp12ファイルをダウンロードする

Google Play Developer Consoleに戻って

  • 「設定」−「APIアクセス」でサービスアカウントの権限を設定

この画面でサービスアカウントの「メール」欄に表示されている内容(サービスアカウントメール)と、手順内でダウンロードしたp12ファイルは後ほど使用します。

自ブロジェクトへの導入

ブロジェクトルートのbuild.gradleに以下のように記述(バージョンはその時最新のやつを設定)して、Gradle Syncします。

 buildscript {
     repositories {
         ...
     }
     dependencies {
        ...
        // Gradle-play-publisher
        classpath 'com.github.triplet.gradle:play-publisher:1.1.2'
     }
}

app/build.gradleへ追記

app/build.gradleの方にも以下のようにAPIを利用するためのcredentialな情報などを記載します。

apply plugin: 'com.github.triplet.play'

android {
    ....
 }

play {
    track = 'beta'    // GooglePlayのベータ版へのアップ。製品版は 'production' 、アルファ版は 'alpha'
    serviceAccountEmail = System.getenv("SERVICE_ACCOUNT_EMAIL")
    pk12File = file('key.p12')
}

環境変数「SERVICE_ACCOUNT_EMAIL」には事前準備にて出てきた「サービスアカウントメール」、pk12Fileにはダウンロードしたp12ファイルの配置パスを指定します。

なお、自分は今回プライベートリポジトリ使ってたので、p12ファイルを直接リポジトリ内に含んで、ここでそのファイル指定してましたが、この辺も必要に応じて環境変数などに置き換えて下さいな。

Gradleタスク実行

各種導入・設定が完了していれば、Gradleのタスクに以下が追加されているはずです。

$ ./gradlew tasks
:
Play Store tasks
----------------
bootstrapReleasePlayResources - Downloads the play store listing for the Release build. No download of image resources. See #18.
generateReleasePlayResources - Collects play store resources for the Release build
publishApkRelease - Uploads the APK for the Release build
publishListingRelease - Updates the play store listing for the Release build
publishRelease - Updates APK and play store listing for the Release build
:

上記英文の説明の通り、publishReleaseApkがリリースビルドAPKをDeveloper Consoleへアップロードするタスクとなります。また今回はやってませんが、APKだけでなくその他の情報のアップロードもできるので、「紹介文などを全てGitで管理して、プルリクエストベースで更新する」といった運用も可能となります。

ちなみにbootstrapReleasePlayResourcesタスクは更新系ではなくストアの紹介文など各種メタ情報をダウンロードするタスクなので、いきなりAPKアップロードするのが怖い場合は、一度このタスクを実行することでAPI疎通取ると良いかもしれません。

CircleCIで回す

ここまででgradle-play-publisher自体は使用可能ですが、CircleCIでこれを自動で回すなら以下の様な感じになります。 (例ではmasterマージ時に自動でAPKアップロード)

$ cat circle.yml
:
deployment:
   ...
  production:
    branch: master
    commands:
      - ./gradlew assembleRelease
      - ./gradlew publishApkRelease

まとめ

ちょっと類似のツールは使ってないので使い勝手の比較などは出来ませんが、個人的な目的は十分達せられるツールでした。

これでアプリ申請作業だいぶ楽や…。