Gradle ラッパー コマンドライン ツールを使用して、Android プロジェクトで利用可能なビルドタスクをどれでも実行できます。このツールは、Windows ではバッチファイル(gradlew.bat
)として、Linux と Mac ではシェル スクリプト(gradlew.sh
)として使用でき、Android Studio で作成した各プロジェクトのルートからアクセスできます。
ラッパーを使ってタスクを実行するには、ターミナル ウィンドウで次のいずれかのコマンドを使用します(Android Studio で [View] > [Tool Windows] > [Terminal] を選択します)。
- Windows Command Shell の場合:
gradlew task-name
- Mac、Linux、Windows PowerShell の場合:
./gradlew task-name
プロジェクトで利用可能なビルドタスクのリストを表示するには、tasks
コマンドを実行します。
gradlew tasks
続いて、Gradle ラッパーを使用してアプリをビルド、実行するための基本事項について説明します。Android ビルドの設定方法について詳しくは、ビルドを設定するをご覧ください。
コマンドライン ツールではなく Android Studio ツールを使用する場合は、アプリをビルドして実行するをご覧ください。
ビルドタイプの概要
どの Android アプリでも、デバッグするための「デバッグ」ビルドと、ユーザーにリリースするための「リリース」ビルドの 2 種類のビルドタイプをデフォルトで利用できます。各ビルドで生成されるアプリは、デバイスにデプロイする前に、証明書で署名する必要があります。デバッグビルドは SDK ツールから提供されるデバッグ鍵で自動的に署名されます(これは安全ではないため、Google Play ストアに公開できません)。リリースビルドには自身の秘密鍵で署名する必要があります。
リリース用にアプリをビルドする場合は、適切な署名鍵でアプリに署名することが重要です。一方、アプリの開発を始めたばかりの場合はデバッグ APK をビルドすれば、エミュレータまたは接続されたデバイスでアプリをすぐに実行できます。
build.gradle.kts
ファイルでカスタム ビルドタイプを定義し、debuggable true
を指定することでデバッグビルドとして署名するように設定することもできます。詳細については、ビルド バリアントの設定をご覧ください。
APK をビルドしてデプロイする
アプリをパッケージ化して Play Console にアップロードするには App Bundle をビルドする方法が最適ですが、デバッグビルドをすぐにテストしたり、アプリをデプロイ可能なアーティファクトとして共有したりする場合は、APK をビルドするほうが適しています。
デバッグ APK をビルドする
デバッグ APK をビルドすると、すぐにアプリをテストしてデバッグできます。デバッグ APK は SDK ツールから提供されるデバッグ鍵で署名され、adb
を使用してデバッグできます。
デバッグ APK をビルドするには、コマンドラインを開いてプロジェクト ディレクトリのルートに移動します。デバッグビルドを開始するには、assembleDebug
タスクを呼び出します。
gradlew assembleDebug
これにより、module_name-debug.apk
という APK が project_name/module_name/build/outputs/apk/
に生成されます。このファイルはデバッグ鍵ですでに署名されており、zipalign
でアライメントされているため、すぐにデバイスにインストールできます。
APK をビルドした直後に実行中のエミュレータまたは接続されたデバイスにインストールする場合は、installDebug
を実行します。
gradlew installDebug
上記タスクの「Debug」の部分はビルド バリアント名をキャメルケースで指定しただけなので、実際にアセンブルまたはインストールするビルドタイプかバリアントで置き換えることができます。たとえば、「demo」プロダクト フレーバーの場合は assembleDemoDebug
タスクでデバッグ版をビルドできます。
各バリアントで使用できるすべてのビルドタスクとインストール タスク(アンインストール タスクを含む)を確認するには、tasks
タスクを実行します。
エミュレータでアプリを実行する方法とデバイスでアプリを実行する方法についてのセクションもご覧ください。
リリース バンドルまたは APK をビルドする
アプリのリリースと配布の準備が整ったら、リリース バンドルまたは APK をビルドして秘密鍵で署名する必要があります。詳細については、コマンドラインからアプリに署名する方法をご覧ください。
アプリをエミュレータにデプロイする
Android エミュレータを使用する場合は、Android Studio で Android Virtual Device(AVD)を作成する必要があります。
AVD を作成したら、Android Emulator を起動し、次の手順でアプリをインストールします。
コマンドラインで
android_sdk/tools/
に移動し、AVD を指定してエミュレータを起動します。emulator -avd avd_name
AVD 名がわからない場合は、
emulator -list-avds
を実行します。- デバッグ APK をビルドする方法として説明した Gradle インストール タスクのうちのいずれか、または
adb
ツールを使用して、アプリをインストールします。APK のビルドに Developer Preview SDK を使用した場合(
targetSdkVersion
が数字ではなく文字の場合)、install
コマンドで-t
オプションを指定してテスト APK をインストールする必要があります。adb install path/to/your_app.apk
ビルドした APK はすべて
project_name/module_name/build/outputs/apk/
に保存されています。
詳細については、Android Emulator 上でアプリを実行するをご覧ください。
実機にアプリをデプロイする
デバイスでアプリを実行するには、そのデバイスで [USB デバッグ] を有効にしておく必要があります。このオプションは [設定] > [開発者向けオプション] にあります。
注: Android 4.2 以降のバージョンでは、[開発者向けオプション] はデフォルトで非表示になっています。表示するには、[設定] > [デバイス情報] に移動して [ビルド番号] を 7 回タップします。前の画面に戻ると、[開発者向けオプション] が表示されます。
デバイスを設定して USB 経由で接続したら、デバッグ APK をビルドする方法で説明した Gradle インストール タスク、または adb
ツールを使用して、アプリをインストールできます。
adb -d install path/to/your_app.apk
ビルドした APK はすべて project_name/module_name/build/outputs/apk/
に保存されています。
詳細については、ハードウェア デバイス上でのアプリの実行をご覧ください。
App Bundle をビルドする
アプリのコンパイル済みコードとリソースはすべて Android App Bundle に含まれますが、APK の生成と署名は Google Play ストアで行います。APK とは異なり、App Bundle をデバイスに直接デプロイすることはできません。 そのため、APK を他のユーザーとすぐにテストまたは共有する場合は、代わりに APK をビルドする必要があります。
App Bundle をビルドするには、Android Studio を使用するほうが簡単です。ただし、コマンドラインから App Bundle をビルドする必要がある場合は、次のセクションで説明するように Gradle または bundletool
を使用します。
Gradle を使用して App Bundle をビルドする
コマンドラインから App Bundle を生成する場合は、アプリのベース モジュールで bundleVariant
Gradle タスクを実行します。たとえば、次のコマンドでベース モジュールのデバッグ版の App Bundle をビルドします。
./gradlew :base:bundleDebug
Play Console にアップロードするための署名済みバンドルをビルドする場合は、まずベース モジュールの build.gradle.kts
ファイルをアプリの署名情報を含めて設定する必要があります。詳細については、Gradle を設定してアプリに署名する方法をご覧ください。これにより、たとえばアプリのリリース版をビルドすると、Gradle は自動的に App Bundle を生成し、build.gradle.kts
ファイルに指定されている署名情報で署名します。
ビルド時以外に App Bundle に署名する場合は、jarsigner
を使用してコマンドラインから署名できます。アプリ バンドルをビルドするコマンドは次のとおりです。
jarsigner -keystore pathToKeystore app-release.aab keyAlias
bundletool を使用して App Bundle をビルドする
bundletool
は Android Studio、Android Gradle プラグイン、Google Play で使用するコマンドライン ツールです。アプリのコンパイル済みコードとリソースを App Bundle に変換し、そのバンドルからデプロイ可能な APK を生成します。
そのため、App Bundle を bundletool
でテストし、Google Play による APK の生成方法をローカルで再現する場合には便利ですが、通常は App Bundle 自体をビルドするのに bundletool
を呼び出す必要はありません。代わりに、前のセクションで説明した Android Studio または Gradle タスクを使用してください。
ただし、バンドルのビルドにカスタムビルド ツールチェーンを使用するなどして Android Studio や Gradle のタスクを使用しない場合は、コマンドラインから bundletool
を使用して、事前にコンパイルされたコードとリソースから App Bundle をビルドできます。まだダウンロードしていない場合は、GitHub リポジトリから bundletool
をダウンロードしてください。
ここでは、アプリのコンパイル済みコードとリソースをパッケージ化する方法と、コマンドラインで bundletool
を使用して Android App Bundle に変換する方法について説明します。
proto 形式でマニフェストとリソースを生成する
bundletool
を使用するには、アプリのマニフェストやリソースなどのアプリ プロジェクトに関する特定の情報を Google の Protocol Buffer 形式(別名「protobuf」、*.pb
ファイル拡張子を使用)にしておく必要があります。protobuf は、構造化データをシリアル化するためのメカニズムであり、言語やプラットフォームに依存せず、拡張することも可能です。XML に似ていますが、XML より小さくなり、高速で、シンプルです。
AAPT2 をダウンロードする
Google の Maven リポジトリにある最新版の AAPT2 を使用すると、アプリのマニフェスト ファイルとリソース テーブルを protobuf 形式で作成できます。
AAPT2 を Google の Maven リポジトリからダウンロードする方法は次のとおりです。
- リポジトリのインデックスで com.android.tools.build > aapt2 に移動します。
- AAPT2 の最新版の名前をコピーします。
コピーしたバージョン名を次の URL に挿入し、ターゲットとなるオペレーティング システムを指定します(https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/aapt2-version/aapt2-aapt2-version-[windows | linux | osx].jar)。
たとえば、Windows 用のバージョン 3.2.0-alpha18-4804415 をダウンロードする場合は、次のようになります(https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-windows.jar)。
ブラウザでこの URL にアクセスすると、AAPT2 のダウンロードが開始されます。
ダウンロードした JAR ファイルを解凍します。
アプリのリソースをコンパイルしてリンクする
AAPT2 を使用して、次のコマンドでアプリのリソースをコンパイルします。
aapt2 compile \ project_root/module_root/src/main/res/drawable/Image1.png \ project_root/module_root/src/main/res/drawable/Image2.png \ -o compiled_resources/
AAPT2 がさまざまなコンパイル済みリソースを 1 つの APK にリンクするリンクフェーズで、AAPT2 がアプリのマニフェストとコンパイル済みリソースを protobuf 形式に変換するように、次のとおり --proto-format
フラグを指定してください。
aapt2 link --proto-format -o output.apk \ -I android_sdk/platforms/android_version/android.jar \ --manifest project_root/module_root/src/main/AndroidManifest.xml \ -R compiled_resources/*.flat \ --auto-add-overlay
これにより、アプリの AndroidManifest.xml
、resources.pb
といったリソース ファイルなどのコンテンツを出力 APK から protobuf 形式で抽出できます。次のセクションで説明するように、App Bundle のビルドに bundletool
で必要となる入力を準備する際に、これらのファイルが必要になります。
コンパイル済みのコードとリソースをパッケージ化する
bundletool
を使用してアプリの App Bundle を生成する前に、まず各アプリ モジュールのコンパイル済みコードとリソースを含む ZIP ファイルを用意する必要があります。各モジュールの ZIP ファイルの内容と構成は、Android App Bundle 形式のものとよく似ています。たとえば、アプリのベース モジュールの base.zip
ファイルを作成し、次のようにコンテンツを整理する必要があります。
ファイルまたはディレクトリ | 説明 |
---|---|
manifest/AndroidManifest.xml
|
protobuf 形式のモジュールのマニフェスト。 |
dex/...
|
アプリのコンパイル済み DEX ファイルを 1 つ以上含むディレクトリ。これらのファイルには、classes.dex 、classes2.dex 、classes3.dex といった名前を付ける必要があります。
|
res/...
|
すべてのデバイス設定用に protobuf 形式のモジュールのリソースが含まれます。サブディレクトリとファイルは、一般的な APK のような形式にする必要があります。 |
root/... 、assets/... 、lib/...
|
これらのディレクトリは、Android App Bundle 形式で説明したものと同じです。 |
resources.pb
|
protobuf 形式のアプリのリソース テーブル。 |
アプリの各モジュール用の ZIP ファイルを準備したら、次のセクションで説明するように、bundletool
に渡して App Bundle をビルドします。
bundletool を使用して App Bundle をビルドする
App Bundle をビルドするには、次のように bundletool build-bundle
コマンドを使用します。
bundletool build-bundle --modules=base.zip --output=mybundle.aab
次の表で、build-bundle
コマンドのフラグについて詳しく説明します。
フラグ | 説明 |
---|---|
--modules=path-to-base.zip, path-to-module2.zip,path-to-module3.zip
|
App Bundle をビルドするために bundletool が使用するモジュール ZIP ファイルのリストを指定します。
|
--output=path-to-output.aab
|
出力 *.aab ファイルのパスとファイル名を指定します。
|
--config=path-to-BundleConfig.json
|
ビルドプロセスをカスタマイズするために使用できる、オプションの構成ファイルへのパスを指定します。詳細については、ダウンストリームの APK 生成をカスタマイズするをご覧ください。 |
--metadata-file=target-bundle-path:local-file-path
|
メタデータ ファイルを含める場合 App Bundle 内にパッケージ化するように bundletool に指示します。このファイルを使用して、ProGuard マッピングやアプリの DEX ファイルの全リストなどのデータを含めることができます。これらのデータは場合によって、ツールチェーンまたはアプリストアでの他の手順で使用するのにも便利です。
target-bundle-path には、メタデータ ファイルをパッケージ化する App Bundle のルートからの相対パスを指定し、local-file-path には、ローカルのメタデータ ファイル自体へのパスを指定します。 |
ダウンストリームの APK 生成をカスタマイズする
App Bundle には BundleConfig.pb
ファイルが含まれます。このファイルは、Google Play などのアプリストアでバンドルから APK を生成する際に必要なメタデータを提供します。bundletool
でこのファイルが作成されますが、BundleConfig.json
ファイルにメタデータのいくつかの要素を設定して bundletool build-bundle
コマンドに渡すことができます。bundletool
が後でこのファイルを変換し、各 App Bundle に含まれる protobuf 版とマージします。
たとえば、どのカテゴリの設定 APK を有効または無効にするかを管理できます。次の BundleConfig.json
ファイルの例では、それぞれ異なる言語をターゲットとする設定 APK を無効にします(つまり、全言語のリソースがそれぞれの基本 APK または機能 APK に含まれています)。
{
"optimizations": {
"splitsConfig": {
"splitDimension": [{
"value": "LANGUAGE",
"negate": true
}]
}
}
}
BundleConfig.json
ファイルには、次のように glob パターンを使用して、APK をパッケージ化する際に圧縮しないファイル形式を指定することもできます。
{
"compression": {
"uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
}
}
bundletool
はデフォルトで、アプリのネイティブ ライブラリ(Android 6.0 以上)とリソース テーブル(resources.arsc
)を圧縮しません。BundleConfig.json
で設定できる項目について詳しくは、Proto3 構文を使用して記述された bundletool
config.proto
ファイルをご覧ください。
App Bundle からアプリをデプロイする
App Bundle をビルドして署名した場合は、bundletool
を使用して APK を生成し、デバイスにデプロイします。
コマンドラインからアプリに署名する
アプリの署名に Android Studio は必要ありません。apksigner
(APK)または jarsigner
(App Bundle)を使用してコマンドラインからアプリに署名するか、ビルド時にデベロッパーに代わって署名するように Gradle を設定できます。どちらの方法でも、下記のとおり keytool
を使用して秘密鍵を最初に生成する必要があります。
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias
上記の例では、キーストアと鍵のパスワード欄、および鍵の「識別名」欄への入力を求められます。次に、キーストアが my-release-key.jks
というファイルとして生成され、現在のディレクトリに保存されます(任意の保存先に移動できます)。このキーストアには 10,000 日間有効な鍵が 1 つ含まれます。
これで、下記のセクションで説明するように APK または App Bundle に手動で署名する、または Gradle を設定してビルドプロセス時にアプリに署名することが可能になりました。
コマンドラインから手動でアプリに署名する
コマンドラインから App Bundle に署名する場合は、jarsigner
を使用できます。代わりに APK に署名する場合は、下記のとおり zipalign
と apksigner
を使用する必要があります。
- Android Studio からコマンドラインを開いて [View] > [Tool Windows] > [Terminal] を選択し、未署名の APK があるディレクトリに移動します。
-
zipalign
を使用して未署名の APK をアライメントします。zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
zipalign
によって、すべての非圧縮データがファイルの先頭を基準とする特定のバイト アライメントで開始されるようになります。これにより、アプリが使用する RAM の量を削減できます。 -
apksigner
を使用して秘密鍵で APK に署名します。apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
この例では、単一のキーストア ファイル
my-release-key.jks
に保存されている秘密鍵と証明書で署名された APK がmy-app-release.apk
に出力されます。apksigner
ツールは、個別の秘密鍵と証明書ファイルを使用した APK ファイルの署名や、複数の署名者を使用した APK の署名を含め、その他の署名オプションもサポートしています。詳細については、apksigner
のリファレンスをご覧ください。注:
apksigner
ツールを使用するには、リビジョン 24.0.3 以上の Android SDK Build Tools がインストールされている必要があります。このパッケージは、SDK Manager を使用してアップデートできます。 -
APK が署名されたことを確認します。
apksigner verify my-app-release.apk
Gradle を設定してアプリに署名する
モジュール レベルの build.gradle.kts
ファイルを開き、storeFile
、storePassword
、keyAlias
、keyPassword
の各エントリを含む signingConfigs {}
ブロックを追加して、そのオブジェクトをビルドタイプの signingConfig
プロパティに渡します。例:
Kotlin
android { ... defaultConfig { ... } signingConfigs { create("release") { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile = file("my-release-key.jks") storePassword = "password" keyAlias = "my-alias" keyPassword = "password" } } buildTypes { getByName("release") { signingConfig = signingConfigs.getByName("release") ... } } }
Groovy
android { ... defaultConfig { ... } signingConfigs { release { // You need to specify either an absolute path or include the // keystore file in the same directory as the build.gradle file. storeFile file("my-release-key.jks") storePassword "password" keyAlias "my-alias" keyPassword "password" } } buildTypes { release { signingConfig signingConfigs.release ... } } }
Gradle タスクを呼び出してアプリをビルドすると、Gradle がアプリに署名します(zipalign も実行します)。
さらに、署名鍵でリリースビルドを設定したため、そのビルドタイプで「インストール」タスクを使用できます。そのため、installRelease
タスクにより、すべてのエミュレータまたはデバイスでリリース APK のビルド、アライメント、署名、インストールが可能になります。
秘密鍵で署名されたアプリを配布する準備が整いましたが、まずアプリを公開する方法の詳細を確認し、Google Play のリリース チェックリストを確認してください。