【Android Studio】FastlaneでGoogle Play Consoleへアップロードを自動化する方法

【Android Studio】FastlaneでGoogle Play Consoleへアップロードを自動化する方法

この記事からわかること

  • Android Studio/Kotlin FastlaneGoogle Play Consoleアップロード自動化する方法
  • Google Play Android Developer API有効
  • upload_to_play_storeパラメータ一覧

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

公式リファレンス:Google認証情報を収集する

Fastlaneを使用してGoogle Play Consoleへアップロードを自動化する方法

FastlaneではGoogle Play Consoleへアプリ(APK/AABファイル)のアップロードを自動化ことも可能になっています。そのためにはFastlaneがGoogle Play Consoleへアクセスできるようにする必要があるので最初に「Google Play Android Developer API」を有効にして認証ファイルを用意しておく必要があります。詳細は以下の記事を参考にしてください。

上記の準備ができた前提で実装の流れを解説していきます。

実装の流れ

  1. AndroidプロジェクトにFastlaneを導入
  2. セットアップ(認証ファイルを含む)
  3. 署名済みAABファイルの生成
  4. upload_to_play_storeでアップロード

上記の「1〜3」の手順は以下の記事でまとめてあるので詳細はこちらを参考にしてください。ここでは最低限の流れだけ記述していきます。

1.AndroidプロジェクトにFastlaneを導入

AndroidプロジェクトにFastlaneを導入します。以下はBundlerを使用して組み込んでいる場合のコマンドです。

$ bundle exec fastlane init

2.セットアップ(認証ファイルを含む)

bundle exec fastlane initコマンドを実行して問いに適切に対応していくと「AppFile」の中身が以下のようになります。「Google Play Android Developer API」を有効にして発行した認証ファイルをプロジェクト内に設置してそのパスがここで指定できていればOKです。


json_key_file("./fastlane/secrets/service_account_key.json")
package_name("com.XXXXX.XXXXXXX")

3.署名済みAABファイルの生成

「Fastfile」の中に「署名済みAABファイルを生成してGoogle Play Consoleへアップロード」を行う一連の流れを記載していきます。まずは署名済みのAABファイルをgradleブロックを使用して生成します。


default_platform(:android)

platform :android do

  desc "認証済みリリースAABファイルを生成してGoogle Play Consoleへアップロード"
  lane :upload_aab do
    # AABファイル生成
    gradle(
      task: "clean bundle",
      build_type: "release",
      properties: {
        # KeyStore情報を指定して認証
        "android.injected.signing.store.file" => ENV['KEY_FILE_PATH'],
        "android.injected.signing.store.password" => ENV['KEY_STORE_PASS'],
        "android.injected.signing.key.alias" => ENV['KEY_STORE_ALIAS'],
        "android.injected.signing.key.password" =>  ENV['KEY_STORE_PASS'],
      }
    )
    
    # Google Play Consoleへアップロード
    // 〜〜〜後述
  end
end

KeyStoreの情報が必要になるので作成していなければ先に作成しておいてください。またKeyStoreの情報は直接「Fastfile」に記述せずに「.env」ファイルを用意して読み込むように実装しておくと安全です。

4.upload_to_play_storeでアップロード

Google Play Consoleへのアップロードupload_to_play_storeブロックを使用して行います。


# Google Play Consoleへアップロード    
upload_to_play_store(
    # 内部テストとしてアップロード
    track: "internal",
    # リリースのステータスを下書きとする
    release_status: "draft",
    # APKファイルのアップロードをスキップ
    skip_upload_apk: true,
    # 各メタデータのアップロードをスキップ
    skip_upload_metadata: true,
    skip_upload_changelogs: true,
    skip_upload_images: true,
    skip_upload_screenshots: true,
)

これでレーン内の処理の実装が完了したのでupload_aabコマンドを実行して正常に動作するか確認してみてください。

$ bundle exec fastlane upload_aab

upload_to_play_storeのパラメータ一覧

公式リファレンス:upload_to_play_store

説明 デフォルト
package_name 使用するアプリケーションのパッケージ名 *
version_name バージョン名(新しい APK/AAB をアップロードするときに使用) *
version_code 生成された APK をダウンロードするバージョンコード *
release_status リリースステータス(例:completed, draft, halted, inProgress) *
track 使用するアプリケーションのトラック(例: production, beta, alpha, internal) production
rollout ロールアウト トラックにアップロードするときのユーザーの割合
metadata_path メタデータファイルを含むディレクトリへのパス *
json_key Google での認証に使用されるサービス アカウント JSON を含むファイルへのパス *
json_key_data Google での認証に使用される生のサービス アカウント JSON データ *
apk アップロードする APK ファイルへのパス *
apk_paths アップロードする APK ファイルへのパスの配列
aab アップロードする AAB ファイルへのパス *
aab_paths アップロードする AAB ファイルへのパスの配列
skip_upload_apk APKのアップロードをスキップするかどうか false
skip_upload_aab AABのアップロードをスキップするかどうか false
skip_upload_metadata メタデータのアップロードをスキップするかどうか false
skip_upload_changelogs 変更ログのアップロードをスキップするかどうか false
skip_upload_images 画像のアップロードをスキップするかどうか false
skip_upload_screenshots スクリーンショットのアップロードをスキップするかどうか false
sync_image_upload sha256 比較を使用して画像やスクリーンショットのアップロードをスキップするかどうか false
validate_only 実際に公開するのではなく、Google Play で変更を検証するかどうか false
timeout 読み取り、オープン、送信のタイムアウト(秒単位) 300

発生したエラー

AABファイルの作成からアップロードまでに発生したエラーをまとめておきます。

Google Api Error: Invalid request - Version code 6 has already been used.

これはシンプルにversionCodeをインクリメントしていないために発生していたエラーでした。Google Play Consoleにすでにアップロード済みの番号の場合はこのようにエラーになるようです。


defaultConfig {
    applicationId "com.XXXXXX.XXXXXX"
    minSdk 26
    targetSdk 34
    versionCode 6 // この番号をあげないといけなかった
    versionName "1.4.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

WARNING: We recommend using a newer Android Gradle plugin to use compileSdk = 34

このエラーはAndroidプロジェクトのGradleやJavaのバージョンが期待通りでないことで発生しているエラーのようでした。

WARNING: We recommend using a newer Android Gradle plugin to use compileSdk = 34

This Android Gradle plugin (8.0.2) was tested up to compileSdk = 33.

You are strongly encouraged to update your project to use a newer
Android Gradle plugin that has been tested with compileSdk = 34.

If you are already using the latest version of the Android Gradle plugin,
you may need to wait until a newer version with support for compileSdk = 34 is available.

To suppress this warning, add/update
    android.suppressUnsupportedCompileSdk=34
to this project's gradle.properties.
> Task :app:clean FAILED

FAILURE: Build failed with an exception.

解決策

build.gradle(Module:App)」内のJavaバージョンを17に変更し、Gradleのバージョンなどもあげることで解消することができました。


  compileOptions {
      sourceCompatibility = JavaVersion.VERSION_17
      targetCompatibility = JavaVersion.VERSION_17
  }
  kotlinOptions {
      jvmTarget = JavaVersion.VERSION_17.toString()
  }

distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip

plugins {
    id 'com.android.application' version '8.5.2' apply false
    id 'com.android.library' version '8.5.2' apply false
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index