【Android Studio】FastlaneでGoogle Play Consoleへアップロードを自動化する方法
この記事からわかること
- Android Studio/Kotlin FastlaneでGoogle Play Consoleへアップロードを自動化する方法
- Google Play Android Developer APIの有効
- upload_to_play_storeのパラメータ一覧
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Android Studio:Koala
- Kotlin:1.9.0
- Gradle:8.7
- java:17.0
- macOS:Sonoma 14.6.1
Fastlaneを使用してGoogle Play Consoleへアップロードを自動化する方法
FastlaneではGoogle Play Consoleへアプリ(APK/AABファイル)のアップロードを自動化ことも可能になっています。そのためにはFastlaneがGoogle Play Consoleへアクセスできるようにする必要があるので最初に「Google Play Android Developer API」を有効にして認証ファイルを用意しておく必要があります。詳細は以下の記事を参考にしてください。
上記の準備ができた前提で実装の流れを解説していきます。
実装の流れ
- AndroidプロジェクトにFastlaneを導入
- セットアップ(認証ファイルを含む)
- 署名済みAABファイルの生成
- 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」ファイルを用意して読み込むように実装しておくと安全です。
おすすめ記事:Fastlane:.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のパラメータ一覧
鍵 | 説明 | デフォルト |
---|---|---|
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
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。