【Android Studio】Fastlaneの導入方法!デバッグ/リリース用APK/AABファイルの生成

【Android Studio】Fastlaneの導入方法!デバッグ/リリース用APK/AABファイルの生成

この記事からわかること

  • Android Studio/KotlinFastlane導入する方法
  • デバッグ/リリースAPK/AABファイルの生成
  • gradle(task:)できること

index

[open]

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

みんなの誕生日

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

posted withアプリーチ

環境

Fastlaneとは?

公式リファレンス:Fastlane

Fastlane」とはiOSまたはAndroidアプリの配布やテスト周りの作業を自動化するためのCI/CDツールです。できることは大きく分けて以下の4つになります。

仕組みとしてはFastfileというRubyで記述した設定ファイルを用意し、ターミナルなどからコマンドを実行するだけで特定の作業を自動で行ってくれるものになります。

CI/CDとは?

CI/CDとは「Continuous Integration(継続的インテグレーション)/ Continuous Delivery(継続的デリバリー)」の略称で、ざっくり言うとソースコードの統合(Integration)と配布(Delivery)を自動化する手法のことを指します。

MacにFastlaneの環境を構築する

MacでFastlaneの環境を構築するためにHomebrewrbenvbundlerの3つを使用します。詳細なセットアップ手順は下記の記事を参考にしてください。

最終的にbundler -vで正常にバージョンが返ってくるようであれば前準備はOKです。

$ bundler -v
Bundler version 2.5.13

AndroidプロジェクにFastlaneを組み込む

AndroidプロジェクトにFastlaneを組み込んでいきます。ターミナルを起動しカレントディレクトリをAndroidプロジェクトに合わせてbundle initコマンドを実行します。

$ bundle init

実行するとプロジェクトルートに「Gemfile」が生成されます。GemFileGemとツールのバージョンを指定するためのテキストファイルです。


# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails"

この中にgem "fastlane"を追加してbundle installコマンドを実行します。するとfastlaneを動作させるために必要なライブラリなどがインストールされていきます。いろいろインストールされますがこれはfastlane依存関係を多く持っているためです。


# frozen_string_literal: true

source "https://rubygems.org"

# gem "rails"

gem "fastlane"

bundle installコマンドが完了すると「Gemfile.lock」がプロジェクトルートに生成されます。このファイルにはインストールされたGemのバージョンと依存関係が記録されています。同じGemfile.lockを使用する他の開発者や環境でも、バージョンの齟齬がないように環境構築することができるようになります。

$ bundle install

Fastlaneのセットアップ

bundle exec fastlane initコマンドを実行してFastlaneを使用するための設定ファイルを生成していきます。最初に色々聞かれるので回答しています。

$ bundle exec fastlane init

1.パッケージ名

最初に対象プロジェクトのパッケージ名を聞かれます。com.XXX.XXX形式で指定しているパッケージ名を入力してEnterを押します。

Package Name (com.krausefx.app): 

2.Google Play認証ファイルパス

Google Playと連携するための認証ファイルのパスを問われます。認証ファイルを設定するとFastlaneからGoogle PlayにAPK/AABファイルのアップロードを行うことができるようになります。認証ファイルが用意できていない場合はEnterを押すことでスキップできます。

Follow the Setup Guide on how to get the Json file: https://docs.fastlane.tools/actions/supply/
Path to the json secret file: 

3.メタデータ管理

既存のメタデータをダウンロードし、メタデータ管理を設定しますか?と聞かれるので必要ならyで進めてください。これは認証パスを設定していないとうまく行かないようです。

Download existing metadata and setup metadata management? (y/n)

スキップした場合は以下のコマンドを実行することでストアのメタ情報を取得することが可能です。

$ fastlane supply init

最後に以下のように表示されればセットアップの完了です。完了するとプロジェクトルートに「fastlane」ディレクトリが生成されその中に「Appfile」と「Fastfile」ファイルが生成されます。Fastfileの方に実行したいアクションやワークフローを定義していきます。

Successfully generated fastlane configuration

ここまでで回答したパッケージ名と認証ファイルのパスは「AppFile」の中に記述されます。もしスキップした場合や異なる値を渡した場合はここから修正してください。


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

APKファイルを生成する

まずはFastlaneを使用して「クリーンビルドしてリリース用のAPKを生成する処理」を自動化してみます。ターミナルからGradleで実行出来る操作は、gradle(task:)を使用することで同じ動作を実現できます。今回はクリーンビルドからのAPKファイルの生成なのでclean assembleReleaseを使用すればOKです。


default_platform(:android)

platform :android do

  # クリーンビルドしてリリースAPKを作成する
  desc "Clean Build And Create Release APK"
  lane :clean_build_release_apk do
    gradle(task: "clean assembleRelease")
  end

end

ターミナルの場合のコマンド

./gradlew clean assembleRelease

レーンの実装が完了したら以下のコマンドを実行して正常に生成されるか試してみてください。fastlane.tools finished successfully 🎉と出れば成功です。

$ bundle exec fastlane clean_build_release_apk
// 〜〜〜〜〜〜〜〜〜〜〜〜
+--------------------------------------------+
|              fastlane summary              |
+------+-----------------------+-------------+
| Step | Action                | Time (in s) |
+------+-----------------------+-------------+
| 1    | default_platform      | 0           |
| 2    | clean assembleRelease | 17          |
+------+-----------------------+-------------+

[20:07:23]: fastlane.tools finished successfully 🎉
// 〜〜〜〜〜〜〜〜〜〜〜〜

もしエラーになる場合は./gradlew clean assembleReleaseで正常に動作するか試してみてください。私はFAILURE: Build failed with an exception.が発生していたので失敗していましたが、以下の記事の手順で解消して無事正常に動作するようになりました。

署名済みのAABファイルを生成する

Google Play Consoleへアップロードするための「署名ずみのAABファイル」を生成することも可能です。AABファイルの場合はbundleReleaseを使用し、署名済みにするためにpropertiesパラメータを使用してKeyStoreの情報を渡します。(そのためKeyStore情報は作成しておいてください)

gradle(
  task: "bundle",
  build_type: "release",
  properties: {
    # KeyStore生成時に.jks拡張子なしにしていた場合はなしでOK 絶対パスで記載
    "android.injected.signing.store.file" => "path/to/keystore.jks",
    "android.injected.signing.store.password" => "生成時に登録したパスワード",
    "android.injected.signing.key.alias" => "生成時に登録したエイリアス名",
    "android.injected.signing.key.password" => "生成時に登録したパスワード"
  }
)

keystore(.jks)ファイルへのパスは絶対パスで記述すると確実です。

gradleブロックで出来ること

公式リファレンス:gradleブロック

gradleブロックにはさまざまなパラメータを渡すことができますがtask:には基本となるタスクを渡します。先ほどのようにクリーンとビルドなど同時に複数渡すことも可能です。

デバッグ用APKをビルド

gradle(task: "assembleDebug")

# この指定も同じ
gradle(
  task: "assemble",
  build_type: "debug"
)

リリース用APKをビルド

gradle(task: "assembleRelease")

リリース用AABをビルド(未署名)

gradle(task: "clean bundleRelease")

リリース用AABをビルド(署名)

gradle(
  task: "bundle",
  build_type: "release",
  properties: {
    "android.injected.signing.store.file" => "path/to/keystore.jks",
    "android.injected.signing.store.password" => "your-store-password",
    "android.injected.signing.key.alias" => "your-key-alias",
    "android.injected.signing.key.password" => "your-key-password"
  }
)

クリーンビルド

gradle(task: "clean")

単体テストの実行

gradle(task: "test")

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

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

searchbox

スポンサー

ProFile

ame

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

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

New Article

index