Android Studio ビルドシステムは Gradle をベースにしており、Android Gradle プラグインは Android アプリのビルドに役立つ複数の機能を追加します。Android プラグインは通常、Android Studio に同期してアップデートされますが、プラグイン(および他の Gradle システム)は Android Studio から独立して実行でき、個別にアップデートできます。
このページでは、Gradle ツールを最新の状態に保つ方法と、最近のアップデート内容について説明します。
Android Gradle プラグインの今後の破壊的変更については、Android Gradle プラグインのロードマップをご覧ください。
Gradle で Android ビルドを設定する方法の詳細については、下記のページをご覧ください。
Gradle ビルドシステムの詳細については、Gradle のユーザーガイドをご覧ください。
Android Gradle プラグインのアップデート
Android Studio をアップデートすると、Android Gradle プラグインを利用可能な最新バージョンに自動的にアップデートするように促すメッセージが表示されることがあります。アップデートに同意するか、プロジェクトのビルド要件に基づいて手動でバージョンを指定するかを選択できます。
プラグインのバージョンは、Android Studio の [File] > [Project Structure] > [Project] メニュー、または最上位の build.gradle
ファイルで指定できます。プラグインのバージョンは、その Android Studio プロジェクトでビルドされたすべてのモジュールに適用されます。次の例では、build.gradle
ファイルからプラグインをバージョン 4.2.0 に設定しています。
Groovy
buildscript { repositories { // Gradle 4.1 and higher include support for Google's Maven repo using // the google() method. And you need to include this repo to download // Android Gradle plugin 3.0.0 or higher. google() ... } dependencies { classpath 'com.android.tools.build:gradle:4.2.0' } }
Kotlin
buildscript { repositories { // Gradle 4.1 and higher include support for Google's Maven repo using // the google() method. And you need to include this repo to download // Android Gradle plugin 3.0.0 or higher. google() ... } dependencies { classpath("com.android.tools.build:gradle:4.2.0") } }
注意: バージョン番号には、'com.android.tools.build:gradle:2.+'
などの動的な依存関係を使用しないでください。予期しないバージョンのアップデートが起こり、バージョンの相違を解決するのが難しくなる可能性があるためです。
指定したプラグイン バージョンがダウンロードされていない場合、次回のプロジェクトのビルド時に Gradle によってダウンロードされます。または、Android Studio のメニューバーから [File] > [Sync Project with Gradle Files] をクリックします。
Gradle のアップデート
Android Studio をアップデートすると、Gradle を利用可能な最新バージョンにアップデートするように促すメッセージが表示されることもあります。アップデートに同意するか、プロジェクトのビルド要件に基づいて手動でバージョンを指定するかを選択できます。
次の表に、Android Gradle プラグインの各バージョンに必要な Gradle のバージョンを示します。最高のパフォーマンスを得るには、Gradle とプラグインの両方について、最新バージョンを使用してください。
プラグインのバージョン | 必要な Gradle のバージョン |
---|---|
1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 |
1.5.0 | 2.2.1 - 2.13 |
2.0.0 - 2.1.2 | 2.10 - 2.13 |
2.1.3 - 2.2.3 | 2.14.1 - 3.5 |
2.3.0 以降 | 3.3 以降 |
3.0.0 以降 | 4.1 以降 |
3.1.0 以降 | 4.4 以降 |
3.2.0 - 3.2.1 | 4.6 以降 |
3.3.0 - 3.3.3 | 4.10.1 以降 |
3.4.0 - 3.4.3 | 5.1.1 以降 |
3.5.0 - 3.5.4 | 5.4.1 以降 |
3.6.0 - 3.6.4 | 5.6.4 以降 |
4.0.0 以降 | 6.1.1 以降 |
4.1.0 以降 | 6.5 以降 |
4.2.0 以降 | 6.7.1 以降 |
7.0 | 7.0 以降 |
Gradle のバージョンは、Android Studio の [File] > [Project Structure] > [Project] メニューで、または gradle/wrapper/gradle-wrapper.properties
ファイルの Gradle 配布リファレンスを編集することで指定できます。次の例では、gradle-wrapper.properties
ファイルで Gradle のバージョンを 6.7.1 に設定しています。
...
distributionUrl = "https\://services.gradle.org/distributions/gradle-6.7.1-all.zip"
...
バージョニングの変更(2020 年 11 月)
基盤となる Gradle ビルドツールのバージョン番号により近い番号で管理できるよう、Android Gradle プラグイン(AGP)のバージョン番号の付け方を変更します。
主な変更点は次のとおりです。
AGP はセマンティック バージョニングを使用するようになり、互換性のない変更はメジャー リリースとして扱われます。
Gradle のメジャー リリースに合わせて、AGP のメジャー バージョンを年 1 回リリースします。
AGP 4.2 の次のリリースはバージョン 7.0 となり、Gradle のバージョンも 7.x にアップグレードする必要があります。AGP のメジャー リリースのたびに、基盤となる Gradle ツールのメジャー バージョン アップグレードが必要になります。
API はメジャー リリースの約 1 年前からサポート終了となり、それと同時に代替機能が利用可能になります。サポートが終了した API は、約 1 年後のメジャー アップデート時に削除されます。
7.0.0(2021 年 7 月)
Android Gradle プラグイン 7.0.0 はメジャー リリースで、さまざまな新機能や改善措置が組み込まれています。
7.0.1(2021 年 8 月)
このマイナー アップデートには、さまざまなバグの修正が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。
互換性
最小バージョン | デフォルトのバージョン | 備考 | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | 詳細については、Gradle のアップデートをご覧ください。 |
SDK Build Tools | 30.0.2 | 30.0.2 | SDK Build Tools をインストールまたは設定します。 |
NDK | なし | 21.4.7075529 | 別のバージョンの NDK をインストールまたは設定します。 |
JDK | 11 | 11 | 詳細については、JDK バージョンの設定をご覧ください。 |
AGP 7.0 の実行に JDK 11 が必要
Android Gradle プラグイン 7.0 を使用してアプリをビルドする場合、Gradle の実行に JDK 11 が必要になりました。Android Studio Arctic Fox には JDK 11 がバンドルされており、Gradle がデフォルトでこれを使用するように設定されています。そのため、ほとんどの Android Studio ユーザーはプロジェクトの設定を変更する必要がありません。
Android Studio 内で AGP が使用する JDK バージョンを手動で設定する必要がある場合は、JDK 11 以降を使用する必要があります。
Android Studio とは別に AGP を使用する場合は、JAVA_HOME 環境変数または -Dorg.gradle.java.home
コマンドライン オプションを JDK 11 のインストール ディレクトリに設定して、JDK バージョンをアップグレードします。
Variant API 安定版
新しい Variant API が安定版になりました。com.android.build.api.variant パッケージの新しいインターフェースと、gradle-recipes GitHub プロジェクトの例をご覧ください。新しい Variant API の一部として、Artifacts インターフェースを通じて、アーティファクトという複数の中間ファイルを利用できるようになりました。これらのアーティファクトは、マージ マニフェストのように、サードパーティのプラグインとコードを使用して安全に取得でき、カスタマイズできます。
Google は今後も新機能を追加したり、カスタマイズに利用できる中間アーティファクトの数を増やしたりすることで、引き続き Variant API を拡張していきます。
lint の動作の変更点
このセクションでは、Android Gradle プラグイン 7.0.0 で変更された複数の lint 動作について説明します。
ライブラリ依存関係の lint の改善
checkDependencies = true
での lint の実行が以前よりも高速になりました。ライブラリ依存関係を持つアプリで構成される Android プロジェクトの場合、次のように checkDependencies
を true
に設定し、./gradlew :app:lint
を介して lint を実行することをおすすめします。これにより、すべての依存関係モジュールが並行して分析され、アプリとそのすべての依存関係から生じる問題を含むレポートが 1 つ生成されます。
Groovy
// build.gradle android { ... lintOptions { checkDependencies true } }
Kotlin
// build.gradle.kts android { ... lint { isCheckDependencies = true } }
lint タスクを UP-TO-DATE にできるようになりました
モジュールのソースやリソースが変更されていない場合、モジュールの lint 分析タスクを再度実行する必要はありません。この場合、タスクの実行は Gradle の出力に「UP-TO-DATE」と表示されます。この変更により、checkDependencies = true
でアプリ モジュールの lint を実行する場合、分析を実行する必要があるのは変更があったモジュールのみとなります。そのため、lint の実行がさらに高速になります。
また lint レポートタスクも、入力が変更されていない場合は実行する必要がありません。関連する既知の問題は、lint タスクが UP-TO-DATE の場合に lint テキストが stdout に出力されないことです(問題 #191897708)。
動的機能モジュールでの lint の実行
AGP は動的機能モジュールからの lint の実行をサポートしなくなりました。対応するアプリ モジュールから lint を実行すると、その動的機能モジュールで lint が実行され、すべての問題がアプリの lint レポートに含まれます。関連する既知の問題は、アプリ モジュールから checkDependencies = true
で lint を実行したとき、アプリ依存関係でもある場合を除き、動的機能のライブラリ依存関係がチェックされないことです(問題番号 191977888)。
デフォルトのバリアントのみの lint の実行
./gradlew :app:lint
を実行すると、デフォルトのバリアントに対してのみ lint が実行されるようになりました。以前のバージョンの AGP では、すべてのバリアントに対して lint が実行されていました。
R8 圧縮ツールでのクラス欠落警告
R8 は、欠落しているクラスと -dontwarn
オプションを、より正確に、一貫して処理します。そのため、R8 が発するクラス欠落警告の評価を開始する必要があります。
アプリまたはその依存関係のいずれにも定義されていないクラス参照を検出すると、R8 は警告を発します。これはビルド出力に表示されます。次に例を示します。
R8: Missing class: java.lang.instrument.ClassFileTransformer
この警告は、アプリのコードを分析したときにクラス定義 java.lang.instrument.ClassFileTransformer
が見つからなかったことを示しています。通常はエラーがあることを意味しますが、この警告を無視する場合があることも考えられます。この警告を無視する一般的な理由は 2 つあります。
JVM と欠落しているクラスをターゲットとするライブラリが、上の例のように JVM ライブラリ タイプである。
いずれかの依存関係にコンパイル時のみの API が使用されている。
クラス欠落警告は、-dontwarn
ルールを proguard-rules.pro
ファイルに追加することで無視できます。次に例を示します。
-dontwarn java.lang.instrument.ClassFileTransformer
便宜上、AGP は欠落している可能性のあるルールをすべて含むファイルを生成し、app/build/outputs/mapping/release/missing_rules.txt
のようなファイルパスに書き込みます。警告を無視するには、proguard-rules.pro
ファイルにルールを追加します。
AGP 7.0 では、クラス欠落メッセージは警告として表示されます。エラーにするには、gradle.properties
で android.r8.failOnMissingClasses = true
を設定します。この警告は、AGP 8.0 ではビルドを破壊するエラーになります。-ignorewarnings
オプションを proguard-rules.pro
ファイルに追加することで AGP 7.0 の動作を維持することは可能ですが、おすすめはしません。
Android Gradle プラグインのビルド キャッシュを削除
AGP 4.1 では、AGP ビルド キャッシュが削除されました。Gradle ビルド キャッシュを補完するために以前 AGP 2.3 で導入された AGP ビルド キャッシュは、AGP 4.1 の Gradle ビルド キャッシュに完全に置き換えられました。この変更はビルド時間には影響しません。
AGP 7.0 では、android.enableBuildCache
プロパティ、android.buildCacheDir
プロパティ、cleanBuildCache
タスクが削除されました。
プロジェクトで Java 11 のソースコードを使用する
アプリのプロジェクトで Java 11 までのソースコードをコンパイルできるようになりました。これにより、プライベート インターフェース メソッド、匿名クラスのダイヤモンド演算子、ラムダ パラメータのローカル変数構文などの新しい言語機能を使用できます。
この機能を有効にするには、compileOptions
を目的の Java バージョンに設定し、compileSdkVersion
を 30 以上に設定します。
Groovy
// build.gradle android { compileSdkVersion 30 compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } // For Kotlin projects kotlinOptions { jvmTarget = "11" } }
Kotlin
// build.gradle.kts android { compileSdkVersion(30) compileOptions { sourceCompatibility(JavaVersion.VERSION_11) targetCompatibility(JavaVersion.VERSION_11) } kotlinOptions { jvmTarget = "11" } }
依存関係構成を削除
AGP 7.0 では、次の構成(または依存関係スコープ)が削除されました。
compile
ユースケースに応じて、api
またはimplementation
に置き換えられました。
*Compile バリアントにも適用されます(debugCompile
など)。provided
compileOnly
に置き換えられました。
*Provided バリアントにも適用されます(releaseProvided
など)。apk
runtimeOnly
に置き換えられました。publish
runtimeOnly
に置き換えられました。
ほとんどの場合、AGP アップグレード アシスタントがプロジェクトを自動的に新しい構成に移行します。
Android Gradle プラグインに対してコンパイルする際のクラスパスの変更
Android Gradle プラグインに対してコンパイルする場合、コンパイル クラスパスが変更されることがあります。AGP は内部で api/implementation
構成を使用するようになったため、コンパイル クラスパスから一部のアーティファクトが削除されることがあります。コンパイル時に AGP の依存関係に依存している場合は、明示的な依存関係として追加してください。
既知の問題
このセクションでは、Android Gradle プラグイン 7.0.0 に存在する既知の問題について説明します。
1.4.x Kotlin Multiplatform プラグインとの互換性がない
Android Gradle プラグイン 7.0.0 は、Kotlin Multiplatform プラグイン 1.5.0 以降と互換性があります。Kotlin Multiplatform サポートを使用しているプロジェクトを Android Gradle プラグイン 7.0.0 で使用するには、Kotlin 1.5.0 に更新する必要があります。回避策として、Android Gradle プラグインを 4.2.x にダウングレードすることは可能ですが、おすすめはしません。
詳しくは、KT-43944 をご覧ください。
lint 出力がない
lint タスクが UP-TO-DATE の場合に、lint テキストの出力が stdout に出力されません(問題 #191897708)。詳しくは、lint の動作の変更点をご覧ください。この問題は Android Gradle プラグイン 7.1 で修正される予定です。
動的機能のライブラリ依存関係がすべて lint チェックされるわけではない
アプリ モジュールから checkDependencies = true
で lint を実行したとき、アプリ依存関係でもある場合を除き、動的機能のライブラリ依存関係はチェックされません(問題 #191977888)。回避策として、これらのライブラリで lint タスクを実行できます。詳しくは、lint の動作の変更点をご覧ください。
4.2.0(2021 年 3 月)
互換性
最小バージョン | デフォルトのバージョン | 注 | |
---|---|---|---|
Gradle | 6.7.1 | N/A | 詳細については、Gradle のアップデートをご覧ください。 |
SDK Build Tools | 30.0.2 | 30.0.2 | SDK Build Tools をインストールまたは設定します。 |
NDK | N/A | 21.4.7075529 | 別のバージョンの NDK をインストールまたは設定します。 |
新機能
このバージョンの Android Gradle プラグインには、次の新機能が含まれています。
Java 言語バージョン 8(デフォルト)
バージョン 4.2 以降では、AGP はデフォルトで Java 8 言語レベルを使用します。Java 8 では、ラムダ式、メソッド参照、静的インターフェース メソッドなど、多くの新しい言語機能にアクセスできます。サポートされている全機能の一覧については、Java 8 のドキュメントをご覧ください。
以前の動作を維持するには、モジュール レベルの build.gradle.kts
または build.gradle
ファイルで Java 7 を明示的に指定します。
Groovy
// build.gradle android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } // For Kotlin projects, compile to Java 6 instead of 7 kotlinOptions { jvmTarget = "1.6" } }
Kotlin
// build.gradle.kts android { ... compileOptions { sourceCompatibility = JavaVersion.VERSION_1_7 targetCompatibility = JavaVersion.VERSION_1_7 } // For Kotlin projects, compile to Java 6 instead of 7 kotlinOptions { jvmTarget = "1.6" } }
新しい JVM リソース コンパイラ
Android Gradle プラグイン 4.2 ツールの新しい JVM リソース コンパイラは、AAPT2 リソース コンパイラの一部を置き換えるため、特に Windows マシンでのビルド パフォーマンスが改善される可能性があります。新しい JVM リソース コンパイラはデフォルトで有効になります。
v3 と v4 の署名のサポート
Android Gradle プラグイン 4.2 で、APK v3 と APK v4 の署名形式がサポートされるようになりました。ビルドでこれらの形式のいずれかまたは両方を有効にするには、モジュール レベルの build.gradle
または build.gradle.kts
ファイルに次のプロパティを追加します。
Groovy
// build.gradle android { ... signingConfigs { config { ... enableV3Signing true enableV4Signing true } } }
Kotlin
// build.gradle.kts android { ... signingConfigs { config { ... enableV3Signing = true enableV4Signing = true } } }
APK v4 署名を使用すると、Android 11 で ADB の増分 APK インストールを使用して、サイズの大きな APK を迅速にデプロイできます。この新しいフラグでは、デプロイ プロセスで APK 署名の手順が考慮されます。
バリアントごとにアプリ署名を設定する
Android Gradle プラグインでバリアントごとにアプリ署名を有効または無効に設定できるようになりました。
Kotlin または Groovy の onVariants()
メソッドを使用して、バリアントごとにアプリ署名を設定する方法の例を次に示します。
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
新しい Gradle プロパティ: android.native.buildOutput
ビルド出力の煩雑さを軽減するために、AGP 4.2 では CMake と ndk-build
を使用しているネイティブ ビルドからのメッセージがフィルタされ、C / C++ コンパイラ出力のみがデフォルトで表示されます。以前は、ビルドされるファイルごとに出力行が生成されていたため、大量の情報メッセージが出力されていました。
ネイティブ出力全体を表示するには、新しい Gradle プロパティ android.native.buildOutput
を verbose
に設定します。
このプロパティは、gradle.properties
ファイルまたはコマンドラインから設定できます。
gradle.properties
android.native.buildOutput=verbose
コマンドライン
-Pandroid.native.buildOutput=verbose
このプロパティのデフォルト値は quiet
です。
gradle.properties ファイルでの動作の変更
AGP 4.2 以降では、サブプロジェクトから Gradle プロパティをオーバーライドできなくなりました。つまり、ルート プロジェクトではなくサブプロジェクト内の gradle.properties
ファイルでプロパティを宣言すると、無視されます。
たとえば以前のリリースでは、AGP は projectDir/gradle.properties
、projectDir/app/gradle.properties
、projectDir/library/gradle.properties
などから値を読み取っていました。アプリ モジュールでは、同じ Gradle プロパティが projectDir/gradle.properties
と projectDir/app/gradle.properties
の両方に存在する場合、projectDir/app/gradle.properties
からの値が優先されていました。
AGP 4.2 ではこの動作が変更され、AGP はサブプロジェクトの gradle.properties
からは値を読み込みません(例: projectDir/app/gradle.properties
)。この変更は、新しい Gradle の動作を反映しており、構成のキャッシュに対応しています。
gradle.properties
ファイルの値の設定について詳しくは、Gradle のドキュメントをご覧ください。
Gradle の互換性と構成の変更
Android Studio で実行する場合、Gradle ビルドツールは Studio のバンドルされた JDK を使用します。以前のリリースでは、JDK 8 が Studio にバンドルされていました。しかし、4.2 では JDK 11 がバンドルされるようになりました。新しくバンドルされた JDK を使用して Gradle を実行すると、ガベージ コレクタの変更により、一部で非互換性が生じる、または JVM のパフォーマンスに影響を与える場合があります。以下では、これらの問題について説明します。
注: JDK 11 で Gradle を実行することをおすすめしますが、Gradle の実行に使用する JDK は、プロジェクト構造ダイアログで変更できます。この設定を変更しても、Gradle の実行に使用される JDK のみが変更され、Studio 自体の実行に使用される JDK は変更されません。
Android Gradle プラグイン(AGP)との Studio の互換性
Android Studio 4.2 では、AGP 3.1 以降を使用するプロジェクトを開くことができます。ただし、AGP が Gradle 4.8.1 以降を実行している場合に限ります。Gradle の互換性の詳細については、Gradle のアップデートをご覧ください。
Gradle ビルドを JDK 11 用に最適化する
JDK 8 は並列ガベージ コレクタを使用し、JDK 11 は G1 ガベージ コレクタを使用するため、今回の JDK 11 へのアップデートは JVM ガベージ コレクタのデフォルト構成に影響を与えます。
ビルドのパフォーマンスを改善するには、並列ガベージ コレクタを使用して Gradle ビルドをテストすることをおすすめします。gradle.properties
で次のように設定します。
org.gradle.jvmargs=-XX:+UseParallelGC
このフィールドにすでに他のオプションが設定されている場合は、新しいオプションを追加します。
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
さまざまな構成でビルド速度を測定するには、ビルドのプロファイリングを行うをご覧ください。
4.1.0(2020 年 8 月)
互換性
最小バージョン | デフォルトのバージョン | 注 | |
---|---|---|---|
Gradle | 6.5 | N/A | 詳細については、Gradle のアップデートをご覧ください。 |
SDK Build Tools | 29.0.2 | 29.0.2 | SDK Build Tools をインストールまたは設定します。 |
NDK | N/A | 21.1.6352462 | 別のバージョンの NDK をインストールまたは設定します。 |
新機能
このバージョンの Android Gradle プラグインには、次の新機能が含まれています。
Kotlin Script DSL のサポート
Kotlin buildscript での編集を容易にするために、DSL と Android Gradle プラグイン 4.1 の API は、実装クラスとは別の一連の Kotlin インターフェースで定義されるようになりました。つまり、次のようになります。
- null 値許容と変更の可否は、Kotlin 型で明示的に宣言されるようになりました。
- これらのインターフェースから生成されたドキュメントは、Kotlin API リファレンスで公開されています。
- Android Gradle プラグインでは API サーフェスが明確に定義されているため、Android の今後のビルド拡張の安定性が向上します。
DSL で変化することが想定されているコレクション型は、一律に次のように定義されます。
val collection: MutableCollectionType
つまり、以前は Kotlin をサポートしていたコレクションでも、Kotlin スクリプトで次のように記述することができなくなりました。
collection = collectionTypeOf(...)
ただしコレクションの変更は一律にサポートされるため、collection += …
と collection.add(...)
はどこでも使用できます。
Android Gradle プラグイン Kotlin API と DSL を使用するプロジェクトのアップグレードで問題が発生した場合は、バグを報告してください。
AAR から C / C++ の依存関係をエクスポートする
Android Gradle プラグイン 4.0 では、AAR 依存関係に Prefab パッケージをインポートする機能が追加されました。AGP 4.1 では、Android ライブラリ プロジェクト向けに AAR 内の外部ネイティブ ビルドからライブラリをエクスポートできるようになりました。
ネイティブ ライブラリをエクスポートするには、ライブラリ プロジェクトの build.gradle
ファイルの android
ブロックに次の行を追加します。
Groovy
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
この例では、ndk-build または CMake 外部ネイティブ ビルドの mylibrary
ライブラリと myotherlibrary
ライブラリが、ビルドによって生成された AAR にパッケージ化され、それぞれが指定されたディレクトリから依存先にヘッダーをエクスポートします。
Kotlin メタデータの R8 サポート
Kotlin は Java クラスファイルのカスタム メタデータを使用して、Kotlin の言語構造を識別します。R8 では Kotlin メタデータの維持と書き換えが可能になったため、kotlin-reflect
を使用する Kotlin ライブラリと Kotlin アプリケーションの圧縮が完全にサポートされます。
Kotlin メタデータを保持するには、次の keep ルールを追加します。
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
それにより、直接保持されるすべてのクラスについて、R8 が Kotlin メタデータを保持するように指示できます。
詳細については、Medium の R8 で Kotlin リフレクションを使用して Kotlin ライブラリとアプリケーションを圧縮するをご覧ください。
デバッグビルドでのアサーション
Android Gradle プラグイン 4.1.0 以降を使用してアプリのデバッグ バージョンをビルドすると、組み込みコンパイラ(D8)がアプリのコードを書き換えてコンパイル時にアサーションを有効にするため、アサーション チェックは常に有効になります。
動作の変更
Android Gradle プラグインのビルド キャッシュを削除
AGP 4.1 では、AGP ビルド キャッシュが削除されました。Gradle ビルド キャッシュを補完するために以前 AGP 2.3 で導入された AGP ビルド キャッシュは、AGP 4.1 の Gradle ビルド キャッシュに完全に置き換えられました。この変更はビルド時間には影響しません。
cleanBuildCache
タスクと android.enableBuildCache
プロパティおよび android.buildCacheDir
プロパティはサポートが終了し、AGP 7.0 で削除されます。現在、android.enableBuildCache
プロパティは効果を生じさせませんが、android.buildCacheDir
プロパティと cleanBuildCache
タスクは、既存の AGP ビルド キャッシュのコンテンツを削除できるように、AGP 7.0 までは機能します。
コード圧縮を使用するアプリのサイズを大幅に削減
このリリース以降、R クラスのフィールドはデフォルトで保持されなくなりました。これによりコード圧縮に対応しているアプリでは、APK のサイズを大幅に削減できるようになります。リフレクションによって R クラスにアクセスする場合を除き、動作の変更は行われません。アクセスする場合は、これらの R クラスの keep ルールを追加する必要があります。
android.namespacedRClass プロパティの名前を android.nonTransitiveRClass に変更
試験運用版フラグ android.namespacedRClass
の名前が android.nonTransitiveRClass
に変更されました。
gradle.properties
ファイル内でこのフラグを設定すると、各ライブラリの R クラスの名前空間が有効になります。その結果 R クラスにはライブラリ自体で宣言されたリソースのみが含まれ、ライブラリの依存関係からは除外されるようになります。これによりライブラリの R クラスのサイズが削減されます。
Kotlin DSL: coreLibraryDesugaringEnabled の名前を変更
Kotlin DSL コンパイル オプション coreLibraryDesugaringEnabled
が isCoreLibraryDesugaringEnabled
に変更されました。
バージョン プロパティをライブラリ プロジェクトの BuildConfig クラスから削除
ライブラリ プロジェクトの場合のみ、生成される BuildConfig
クラスから BuildConfig.VERSION_NAME
および BuildConfig.VERSION_CODE
プロパティが削除されます。これは、そうした静的な値がアプリケーションのバージョン コードと名前の最終的な値を反映しておらず、誤解を招いていたためです。またそれらの値は、マニフェストをマージする際に破棄されていました。
Android Gradle プラグインの今後のバージョンでは、ライブラリ用の DSL からも versionName
および versionCode
プロパティが削除されます。
現時点では、ライブラリのサブプロジェクトから、アプリのバージョン コードとバージョン名に自動的にアクセスする方法はありません。
アプリケーション モジュールについては変更がないため、DSL で versionCode
や versionName
に値を割り当てることができます。その値はアプリのマニフェストや BuildConfig
フィールドに反映されます。
NDK パスを設定する
モジュールの build.gradle
ファイルの android.ndkPath
プロパティを使用して、ローカルの NDK インストールのパスを設定できます。
Groovy
android { ndkPath "your-custom-ndk-path" }
Kotlin
android { ndkPath = "your-custom-ndk-path" }
このプロパティを android.ndkVersion
プロパティと併用する場合、このパスには android.ndkVersion
に一致する NDK バージョンが含まれている必要があります。
ライブラリ単体テストの動作変更
ライブラリの単体テストをコンパイルして実行する動作を変更しました。ライブラリの単体テストは、ライブラリ自体のコンパイル / ランタイム クラスに対してコンパイルし、実行するようになりました。そのため、単体テストは外部サブプロジェクトと同じ方法でライブラリを消費します。通常はこの構成により、テストの有効性が高まります。
場合によっては、ライブラリの単体テストでデータ バインディングを使用すると、DataBindingComponent
クラスや BR
クラスが欠落することがあります。その場合は、androidTest
プロジェクト内のインストゥルメンテーション テストに移植する必要があります。そうしたクラスに対して単体テストをコンパイルして実行すると、正しい出力が得られない可能性があるためです。
io.fabric Gradle プラグインのサポート終了
io.fabric Gradle プラグインはサポートを終了しており、Android Gradle プラグインのバージョン 4.1 と互換性がありません。サポートが終了した Fabric SDK と、Firebase Crashlytics SDK への移行の詳細については、Firebase Crashlytics SDK へのアップグレードをご覧ください。
4.0.0(2020 年 4 月)
このバージョンの Android プラグインには、次のものが必要です。
Gradle 6.1.1。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
このマイナー アップデートでは、Android 11 でのパッケージの公開設定に関する新しいデフォルト設定と各種機能との互換性が確保されています。
以前のバージョンの Android では、デバイスにインストールされている全アプリのリストが表示されていました。Android 11(API レベル 30)以降、デフォルトでは、アプリはインストール済みパッケージのフィルタされたリストのみにアクセスできます。
システム内のアプリのリストを広範に表示するには、アプリまたはライブラリの Android マニフェストに <queries>
要素を追加する必要があります。
Android Gradle プラグイン 4.1 以降は、新しい <queries>
宣言と互換性があります。旧バージョンには互換性がありません。<queries>
要素を追加した場合、または Android 11 をターゲットとするライブラリや SDK に依存する場合は、アプリをビルドするときにマニフェスト マージエラーが発生する可能性があります。
この問題に対処するために、AGP 3.3 以降用のパッチのセットがリリースされます。旧バージョンの AGP をご使用の場合は、次のいずれかのバージョンにアップグレードしてください。
ご使用中の AGP のバージョン |
アップグレード先のバージョン |
---|---|
4.0.* | 4.0.1 |
3.6.* | 3.6.4 |
3.5.* | 3.5.4 |
3.4.* | 3.4.3 |
3.3.* | 3.3.3 |
この新機能の詳細については、Android 11 でのパッケージの公開設定をご覧ください。
新機能
このバージョンの Android Gradle プラグインには、次の新機能が含まれています。
Android Studio Build Analyzer のサポート
Build Analyzer ウィンドウは、最適化の無効化やタスクの不適切な構成など、ビルドプロセスの問題を理解して診断するうえで有益です。この機能は、Android Studio 4.0 以降と Android Gradle プラグイン 4.0.0
以降を併用している場合に利用できます。Android Studio では、次の手順で [Build Analyzer] ウィンドウを開くことができます。
- まだアプリのビルドを行っていない場合は、メニューバーから [Build] > [Make Project] を選択してアプリをビルドします。
- メニューバーから [View] > [Tool Windows] > [Build] を選択します。
- [Build] ウィンドウで、次のいずれかの方法で [Build Analyzer] ウィンドウを開きます。
- Android Studio でプロジェクトのビルドが完了したら、[Build Analyzer] タブをクリックします。
- Android Studio でプロジェクトのビルドが完了したら、[Build Output] ウィンドウの右側のリンクをクリックします。
[Build Analyzer] ウィンドウの左側のツリーには、起こり得るビルドの問題がまとめられます。各問題をクリックすると、右側のペインで詳細を調べることができます。Android Studio を使ってビルドを分析すると、ビルド時間を決定付けたタスクセットを求め、各タスクの影響を可視化して把握しやすいようにできます。[Warnings] ノードを展開して、警告の詳細を確認することもできます。
詳細については、ビルド速度の低下を特定するをご覧ください。
Java 8 ライブラリの desugaring が含まれる D8 と R8
Android Gradle プラグインでは、アプリの最小 API レベルを必要とせずに、多数の Java 8 言語 API の使用がサポートされています。
desugaring と呼ばれるプロセスにより、Android Studio 3.0 以降の DEX コンパイラ D8 はすでに、Java 8 言語機能(ラムダ式、デフォルトのインターフェース メソッド、リソースの試用など)の実質的なサポートを提供しています。Android Studio 4.0 では desugaring エンジンが拡張され、Java 言語 API を desugar できるようになりました。つまり、最近の Android でしか使用できなかった標準的な言語 API(java.util.streams
など)を古いバージョンの Android アプリでも使用できるようになりました。
このリリースでは次の API がサポートされています。
- 連続ストリーム(
java.util.stream
) java.time
のサブセットjava.util.function
java.util.{Map,Collection,Comparator}
の最新の追加 API- オプション(
java.util.Optional
、java.util.OptionalInt
、java.util.OptionalDouble
)および上記の API で役立つその他の新しいクラス java.util.concurrent.atomic
の追加 API(AtomicInteger
、AtomicLong
、AtomicReference
の新しいメソッド)ConcurrentHashMap
(Android 5.0 のバグを修正)
上記言語 API のサポートのため、D8 は不足している API の実装を含む単独のライブラリ DEX ファイルをコンパイルし、この実装をアプリに追加します。desugar プロセスはアプリのコードを書き換えて、ランタイム時に代わりにこのライブラリを使用するようにします。
このような言語 API のサポートを有効にするには、アプリ モジュールの build.gradle
ファイルに以下を記述します。
Groovy
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled true } compileOptions { // Flag to enable support for the new language APIs coreLibraryDesugaringEnabled true // Sets Java compatibility to Java 8 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4' }
Kotlin
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled = true } compileOptions { // Flag to enable support for the new language APIs isCoreLibraryDesugaringEnabled = true // Sets Java compatibility to Java 8 sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.4") }
また、次の場合は、ライブラリ モジュールの build.gradle
ファイルにも上記のコード スニペットを含める必要があります。
ライブラリ モジュールのインストルメンテーション テストで、このような言語 API を直接使用するか、ライブラリ モジュールまたはその依存関係を通じて使用する場合。これは、インストルメンテーション テスト APK を実行するために不足している API を提供する場合に行います。
ライブラリ モジュールの lint を単独で実行する場合。これは、lint が言語 API が有効に使用されていることを認識し、誤った警告を報告しないようにするために行います。
ビルド機能を有効または無効にする新しいオプション
Android Gradle プラグイン 4.0.0 では、ビュー バインディングやデータ バインディングなど、有効または無効にするビルド機能を新しい方法で制御できます。新しい機能が追加されると、デフォルトで無効になります。その場合は、buildFeatures
ブロックを使用して、必要な機能のみを有効にできます。これにより、プロジェクトのビルド パフォーマンスを最適化できます。各モジュールのオプションは、モジュール レベルの build.gradle
で次のように設定できます。
Groovy
android { // The default value for each feature is shown below. You can change the value to // override the default behavior. buildFeatures { // Determines whether to generate a BuildConfig class. buildConfig = true // Determines whether to support View Binding. // Note that the viewBinding.enabled property is now deprecated. viewBinding = false // Determines whether to support Data Binding. // Note that the dataBinding.enabled property is now deprecated. dataBinding = false // Determines whether to generate binder classes for your AIDL files. aidl = true // Determines whether to support RenderScript. renderScript = true // Determines whether to support injecting custom variables into the module’s R class. resValues = true // Determines whether to support shader AOT compilation. shaders = true } }
Kotlin
android { // The default value for each feature is shown below. You can change the value to // override the default behavior. buildFeatures { // Determines whether to generate a BuildConfig class. buildConfig = true // Determines whether to support View Binding. // Note that the viewBinding.enabled property is now deprecated. viewBinding = false // Determines whether to support Data Binding. // Note that the dataBinding.enabled property is now deprecated. dataBinding = false // Determines whether to generate binder classes for your AIDL files. aidl = true // Determines whether to support RenderScript. renderScript = true // Determines whether to support injecting custom variables into the module’s R class. resValues = true // Determines whether to support shader AOT compilation. shaders = true } }
以下に示すように、プロジェクトのすべてのモジュールでこのような機能のデフォルト設定を指定することもできます。これには、プロジェクトの gradle.properties
ファイルに次のうち 1 つ以上を指定します。ただし、モジュール レベルの build.gradle
ファイルで buildFeatures
ブロックを使用すると、これらのプロジェクト全体のデフォルト設定をオーバーライドできます。
android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=true
android.defaults.buildfeatures.renderscript=true
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=true
Feature-on-Feature 依存関係
以前のバージョンの Android Gradle プラグインでは、すべての機能モジュールがアプリのベース モジュールのみに依存していました。Android Gradle プラグイン 4.0.0 を使用する場合、別の機能モジュールに依存する機能モジュールを含めることができるようになりました。つまり、以下の図に示すとおり、:video
機能は、ベース モジュールに依存する :camera
モジュールに依存することが可能です。
機能モジュール :video
は、ベース :app
モジュールに依存する機能 :camera
に依存します。
つまり、アプリによって機能モジュールのダウンロードがリクエストされると、その機能モジュールが依存する他の機能モジュールもダウンロードされます。アプリの機能モジュールを作成した後、モジュールの build.gradle
ファイルで Feature-on-Feature 依存関係を宣言できます。たとえば、:video
モジュールで :camera
に対する依存関係を宣言する場合、次のようになります。
Groovy
// In the build.gradle file of the ':video' module. dependencies { // All feature modules must declare a dependency // on the base module. implementation project(':app') // Declares that this module also depends on the 'camera' // feature module. implementation project(':camera') ... }
Kotlin
// In the build.gradle file of the ':video' module. dependencies { // All feature modules must declare a dependency // on the base module. implementation(project(":app")) // Declares that this module also depends on the 'camera' // feature module. implementation(project(":camera")) ... }
また、メニューバーから [Help] > [Edit Custom VM Options] をクリックして以下の行を含め、Android Studio の Feature-on-Feature 依存関係機能を有効にする必要があります(たとえば、実行構成の編集時にこの機能をサポートするため)。
-Drundebug.feature.on.feature=true
依存関係のメタデータ
Android Gradle プラグイン 4.0.0 以降を使用してアプリをビルドする場合、アプリにコンパイルされる依存関係を記述するメタデータがプラグインに含まれます。アプリをアップロードすると、Play Console でこのメタデータが検査され、次のようなメリットがあります。
- アプリで使用する SDK と依存関係に関する既知の問題のアラートを取得する
- これらの問題を解決するための実用的なフィードバックを受け取る
データは圧縮され、Google Play の署名鍵で暗号化され、リリースアプリの署名ブロックに保存されます。ただし、ディレクトリ <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt
のローカル中間ビルドファイルでは自分でメタデータを検査できます。
この情報を共有したくない場合は、モジュールの build.gradle
ファイルに次の情報を含めることでオプトアウトできます。
Groovy
android { dependenciesInfo { // Disables dependency metadata when building APKs. includeInApk = false // Disables dependency metadata when building Android App Bundles. includeInBundle = false } }
Kotlin
android { dependenciesInfo { // Disables dependency metadata when building APKs. includeInApk = false // Disables dependency metadata when building Android App Bundles. includeInBundle = false } }
AAR 依存関係からネイティブ ライブラリをインポートする
アプリの AAR 依存関係から C / C++ ライブラリをインポートできるようになりました。以下で説明する構成手順に従うと、Gradle により自動的にこれらのネイティブ ライブラリが CMake などの外部ネイティブ ビルドシステムで使用できるようになります。Gradle はこれらのライブラリをビルドで使用できるようにするだけなので、これらを使用するには、ビルド スクリプトを構成する必要があります。
ライブラリは、Prefab パッケージ形式を使用してエクスポートされます。
依存関係ごとに、1 つ以上のモジュールで構成される Prefab パッケージを最大 1 つ公開できます。Prefab モジュールは単一のライブラリで、共有ライブラリ、静的ライブラリ、ヘッダーのみのライブラリのいずれかになります。
通常、パッケージ名は Maven アーティファクト名と一致し、モジュール名はライブラリ名と一致しますが、常に一致するとは限りません。ライブラリのパッケージとモジュール名を知る必要があるため、依存関係のドキュメントを参照して名前を確認する必要があります。
外部ネイティブ ビルドシステムを構成する
必要な手順を確認するには、使用する予定の外部ネイティブ ビルドシステムをクリックします。
AAR に含まれているネイティブ依存関係は、CMAKE_FIND_ROOT_PATH 変数を介して CMake プロジェクトに公開されます。この値は、CMake が呼び出されたときに Gradle によって自動的に設定されるため、ビルドシステムでこの変数を変更する場合は、割り当てるのではなく追加する必要があります。
各依存関係は、CMake ビルドに config-file パッケージを公開します。これは find_package
コマンドでインポートします。このコマンドで、指定されたパッケージ名とバージョンに一致する config-file パッケージを検索し、ビルドで使用するために定義したターゲットを公開します。たとえば、アプリで libapp.so
を定義し curl を使用する場合は、CMakeLists.txt
ファイルに次のように記述します。
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
app.cpp
で #include "curl/curl.h"
を指定できるようになりました。プロジェクトをビルドすると、外部ネイティブ ビルドシステムによって自動的に、APK または App Bundle の libcurl.so
とパッケージ libcurl.so
に libapp.so
がリンクされます。詳細については、curl prefab のサンプルをご覧ください。
動作の変更
このバージョンのプラグインを使用する場合、以下のように動作が変更されます。
v1 / v2 署名設定の更新
signingConfig
ブロックのアプリ署名設定の動作が次のように変更されました。
v1 署名
v1SigningEnabled
が明示的に有効にされている場合、AGP は v1 アプリ署名を行います。v1SigningEnabled
がユーザーによって明示的に無効にされている場合、v1 アプリ署名は行われません。- ユーザーが v1 署名を明示的に有効にしていない場合、
minSdk
とtargetSdk
に基づいて自動的に無効にできます。
v2 署名
v2SigningEnabled
が明示的に有効にされている場合、AGP は v2 アプリ署名を行います。v2SigningEnabled
がユーザーによって明示的に無効にされている場合、v2 アプリ署名は行われません。- ユーザーが v2 署名を明示的に有効にしていない場合、
targetSdk
に基づいて自動的に無効にできます。
この変更により、AGP は、ユーザーが上記のフラグを明示的に有効にしたかどうかに基づいて署名メカニズムを無効にすることにより、ビルドを最適化できます。これより前のリリースでは、v1Signing
が明示的に有効にされていても無効になる可能性があり、混乱を招くことがありました。
feature
および instantapp
Android Gradle プラグインを削除
Android Gradle プラグイン 3.6.0 では、Feature プラグイン(com.android.feature
)と Instant App プラグイン(com.android.instantapp
)のサポートが終了し、Android App Bundle を使用して Instant App のビルドとパッケージ化を行う Dynamic Feature プラグイン(com.android.dynamic-feature
)が代わりに使用されるようになりました。
Android Gradle プラグイン 4.0.0 以降では、サポート終了済みの上記プラグインは完全に削除されています。このため、最新の Android Gradle プラグインを使用するには、Android App Bundle に対応できるように Instant App を移行する必要があります。 Instant App を移行すると、App Bundle のメリットを生かして、アプリのモジュール設計を簡素化できます。
個別アノテーション処理機能を削除
個別アノテーション処理を専用のタスクに分割する機能は削除されました。このオプションは、Java のみのプロジェクトで非増分アノテーション プロセッサが使用されている場合において、増分 Java コンパイルの維持に使用されていました。有効化には gradle.properties
ファイルで android.enableSeparateAnnotationProcessing
を true
に設定する必要がありましたが、この設定はすでにご利用いただけません。
ビルド パフォーマンスを向上させるには、代わりに増分アノテーション プロセッサを使用するよう移行する必要があります。
includeCompileClasspath のサポート終了
Android Gradle プラグインは、コンパイル クラスパスで宣言したアノテーション プロセッサのチェックや追加を行えなくなり、annotationProcessorOptions.includeCompileClasspath
DSL プロパティは無効になります。アノテーション プロセッサをコンパイル クラスパスに追加すると、次のエラーが発生することがあります。
Error: Annotation processors must be explicitly declared now.
この問題を解決するには、annotationProcessor
依存関係構成を使用して、build.gradle
ファイルにアノテーション プロセッサを含める必要があります。詳細については、アノテーション プロセッサの追加をご覧ください。
CMake が使用するビルド済み依存関係の自動パッケージ化
以前のバージョンの Android Gradle プラグインでは、jniLibs
を使用して、CMake 外部ネイティブ ビルドで使用するビルド済みライブラリを明示的にパッケージ化することが求められました。モジュールの src/main/jniLibs
ディレクトリ、または build.gradle
ファイルに設定されているその他のディレクトリにライブラリが存在する場合もあります。
Groovy
sourceSets { main { // The libs directory contains prebuilt libraries that are used by the // app's library defined in CMakeLists.txt via an IMPORTED target. jniLibs.srcDirs = ['libs'] } }
Kotlin
sourceSets { main { // The libs directory contains prebuilt libraries that are used by the // app's library defined in CMakeLists.txt via an IMPORTED target. jniLibs.setSrcDirs(listOf("libs")) } }
Android Gradle プラグイン 4.0 では上記の設定は不要になったため、ビルドエラーが発生することがあります。
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> More than one file was found with OS independent path 'lib/x86/libprebuilt.so'
外部ネイティブ ビルドではそれらのライブラリが自動的にパッケージ化されるため、jniLibs
を指定してライブラリを明示的にパッケージ化すると、重複が発生します。ビルドエラーを回避するには、ビルド済みライブラリを jniLibs
の外部に移動するか、build.gradle
ファイルから jniLibs
設定を削除します。
既知の問題
このセクションでは、Android Gradle プラグイン 4.0.0 に存在する既知の問題について説明します。
Gradle ワーカー メカニズムでの競合状態
Android Gradle プラグイン 4.0 で変更を行うと、Gradle 6.3 以下のバージョンで --no-daemon
を使用したときに競合状態が発生し、ビルドの完了後にビルドがハングすることがあります。
この問題は Gradle 6.4 で修正される予定です。
3.6.0(2020 年 2 月)
このバージョンの Android プラグインには、次のものが必要です。
Gradle 5.6.4。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
このマイナー アップデートでは、Android 11 でのパッケージの公開設定に関する新しいデフォルト設定と各種機能との互換性が確保されています。
詳細については、4.0.1 リリースノートをご覧ください。
新機能
このバージョンの Android Gradle プラグインには、次の新機能が含まれています。
ビュー バインディング
ビュー バインディングにより、コード内のビューを参照する際にコンパイル時の安全性を実現します。
findViewById()
は、自動生成されたバインディング クラス参照に置き換えることができるようになりました。ビュー バインディングを使用するには、各モジュールの build.gradle
ファイルに次の行を含めます。
Groovy
android { viewBinding.enabled = true }
Kotlin
android { viewBinding.enabled = true }
詳細については、ビュー バインディングのドキュメントをご覧ください。
Maven Publish プラグインのサポート
Android Gradle プラグインには、Maven Publish Gradle プラグインのサポートが含まれています。これにより、ビルド アーティファクトを Apache Maven リポジトリに公開できます。Android Gradle プラグインは、アプリまたはライブラリ モジュール内のビルド バリアント アーティファクトごとにコンポーネントを作成します。これを使用して、Maven リポジトリへのパブリケーションをカスタマイズできます。
詳細については、Maven Publish プラグインを使用する方法についてのページをご覧ください。
新しいデフォルトのパッケージ化ツール
アプリのデバッグ バージョンをビルドする場合、プラグインは zipflinger という新しいパッケージ化ツールを使用して APK をビルドします。この新しいツールを使用すると、ビルド速度が向上します。この新しいパッケージ化ツールが期待どおりに動作しない場合は、バグを報告してください。以前のパッケージ化ツールを使用するには、次の行を gradle.properties
ファイルに含めます。
android.useNewApkCreator=false
ネイティブ ビルド アトリビューション
プロジェクトの各 C / C++ ファイルを Clang でビルドしてリンクするのにかかる時間を測定できるようになりました。Gradle はこれらのコンパイラ イベントのタイムスタンプを含む Chrome トレースを出力できるため、プロジェクトをビルドするのに必要な時間を詳細に把握できます。このビルド アトリビューション ファイルを出力する手順は次のとおりです。
Gradle ビルドを実行するときに、フラグ
-Pandroid.enableProfileJson=true
を追加します。次に例を示します。gradlew assembleDebug -Pandroid.enableProfileJson=true
Chrome ブラウザを開き、検索バーに「
chrome://tracing
」と入力します。[Load] ボタンをクリックし、
project-root/build/android-profile
に移動して、profile-timestamp.json.gz
という名前のファイルを探します。
ネイティブ ビルド アトリビューション データがビューアの上部に表示されます。
動作の変更
このバージョンのプラグインを使用する場合、以下のように動作が変更されます。
非圧縮ネイティブ ライブラリのパッケージ化(デフォルト)
アプリをビルドするときに、プラグインによってデフォルトで extractNativeLibs
が "false"
に設定されるようになりました。つまり、ネイティブ ライブラリのページ アライメントとパッケージ化が圧縮なしで行われます。その結果、アップロード サイズは大きくなりますが、ユーザーには次のようなメリットがあります。
- プラットフォームはインストール済みの APK からネイティブ ライブラリに直接アクセスできるため、アプリのインストール サイズが小さくなります。しかも、ライブラリのコピーを作成する必要がありません。
- APK または Android App Bundle に非圧縮ネイティブ ライブラリを含めると、通常は Play ストアの圧縮効率が向上するため、ダウンロード サイズが小さくなります。
Android Gradle プラグインで圧縮ネイティブ ライブラリをパッケージ化する場合は、アプリのマニフェストに次の行を含めます。
<application
android:extractNativeLibs="true"
... >
</application>
デフォルトの NDK バージョン
複数のバージョンの NDK をダウンロードした場合、Android Gradle プラグインはデフォルトのバージョンを選択するようになりました。ソースコード ファイルのコンパイルでは、このデフォルトのバージョンが使用されます。プラグインは以前は、最近ダウンロードされたバージョンの NDK を選択していました。プラグインが選択したデフォルトのバージョンをオーバーライドするには、モジュールの build.gradle
ファイル内の android.ndkVersion
プロパティを使用します。
R クラス生成の簡素化
Android Gradle プラグインは、プロジェクトのライブラリ モジュールごとに R クラスを 1 つだけ生成し、その R クラスを他のモジュール依存関係と共有することで、コンパイル クラスパスを簡素化します。この最適化によってビルドが高速化されますが、以下の点に留意する必要があります。
- コンパイラは R クラスを上流のモジュール依存関係と共有するため、プロジェクト内の各モジュールで一意のパッケージ名を使用することが重要です。
- 他のプロジェクト依存関係からライブラリの R クラスを参照できるかどうかは、ライブラリを依存関係として含めるために使用するコンフィグレーションによって決まります。たとえば、ライブラリ A に「api」依存関係としてライブラリ B が含まれている場合、ライブラリ A と、ライブラリ A に依存する他のライブラリは、ライブラリ B の R クラスを参照できます。ただし、ライブラリ A が
implementation
依存関係コンフィグレーションを使用している場合、他のライブラリはライブラリ B の R クラスを参照できない可能性があります。詳細については、依存関係コンフィグレーションをご覧ください。
デフォルトの設定にないリソースの削除
ライブラリ モジュールに関して、デフォルトのリソースセットに含まれていない言語のリソースを含める場合(hello_world
が /values-es/strings.xml
に文字列リソースとして含まれているが、そのリソースが /values/strings.xml
で定義されていない場合など)、Android Gradle プラグインはプロジェクトのコンパイル時にそのリソースを含めなくなりました。この動作変更により、Resource Not Found
ランタイム例外の発生が減少し、ビルド速度が向上します。
アノテーションに適用される CLASS 保持ポリシーの考慮(D8)
D8 において、アプリのコンパイル中にアノテーションが CLASS 保持ポリシーを適用するタイミングが考慮されるようになりました。また、これらのアノテーションは、実行時には使用できなくなりました。この動作は、アプリのターゲット SDK を API レベル 23 に設定するときにも行われます。そのため以前は、Android Gradle プラグインと D8 の古いバージョンを使用してアプリをコンパイルする場合、実行時にこれらのアノテーションにアクセスすることができました。
その他の動作の変更
aaptOptions.noCompress
は、すべてのプラットフォーム(APK とバンドルの両方)で大文字と小文字が区別されなくなり、大文字を使用するパスが優先されなくなりました。- データ バインディングがデフォルトでインクリメンタルになりました。詳細については、問題 #110061530 をご覧ください。
- すべての単体テスト(Roboelectric 単体テストを含む)がキャッシュ可能になりました。詳細については、問題 #115873047 をご覧ください。
バグの修正
このバージョンの Android Gradle プラグインには、次のバグ修正が含まれています。
- Robolectric 単体テストが、データ バインディングを使用するライブラリ モジュールでサポートされるようになりました。詳細については、問題 #126775542 をご覧ください。
- Gradle の並列実行モードが有効になっている場合に、複数のモジュールで
connectedAndroidTest
タスクを実行できるようになりました。
既知の問題
このセクションでは、Android Gradle プラグイン 3.6.0 に存在する既知の問題について説明します。
Android Lint タスクのパフォーマンスの低下
Android Lint は、解析インフラストラクチャでの回帰が原因で、一部のプロジェクトにおいて完了までに非常に時間がかかることがあります。そのため、特定のコード構造では、ラムダの推定型の計算速度が低下します。
この問題は IDEA のバグとして報告されており、Android Gradle プラグイン 4.0 で修正される予定です。
マニフェスト クラスがない
アプリのマニフェストでカスタム権限を定義している場合、Android Gradle プラグインは通常、カスタム権限を文字列定数として含む Manifest.java
クラスを生成します。Android Gradle プラグインはこのクラスをアプリにパッケージ化するため、ランタイムにこれらの権限を簡単に参照できます。
Android Gradle プラグイン 3.6.0 では、マニフェスト クラスの生成は行われません。このバージョンのプラグインでアプリをビルドし、そのアプリでマニフェスト クラスを参照すると、ClassNotFoundException
例外が発生することがあります。この問題を解決するには、以下のいずれかを行います。
- カスタム権限を完全修飾名で参照します次に例を示します。
"com.example.myapp.permission.DEADLY_ACTIVITY"
次のように独自の定数を定義します。
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }
3.5.0(2019 年 8 月)
Android Gradle プラグイン 3.5.0 と Android Studio 3.5 が Project Marble の主なリリースとなります。今回のリリースでは Android デベロッパー ツールの 3 つの主な改善点であるシステムの健全性、機能の改良、バグの修正に重点を置いています。特に、プロジェクト ビルド速度の向上がこのアップデートの主な焦点でした。
Project Madble の上記の情報とその他の最新情報については、Android デベロッパー ブログの記事または下記のセクションをご覧ください。
このバージョンの Android プラグインには、次のものが必要です。
Gradle 5.4.1。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
このマイナー アップデートでは、Android 11 でのパッケージの公開設定に関する新しいデフォルト設定と各種機能との互換性が確保されています。
詳細については、4.0.1 リリースノートをご覧ください。
3.5.3(2019 年 12 月)
Android Studio 3.5.3 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。
3.5.2(2019 年 11 月)
Android Studio 3.5.2 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。
3.5.1(2019 年 10 月)
Android Studio 3.5.1 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。
増分アノテーション処理
gradle.properties
ファイルで android.databinding.incremental=true
を設定すると、Data Binding アノテーション プロセッサは増分アノテーション処理をサポートします。この最適化により、増分ビルドのパフォーマンスが向上しています。最適化されたアノテーション プロセッサの完全なリストについては、増分アノテーション プロセッサの表をご覧ください。
また、KAPT 1.3.30 以降でも、増分アノテーション プロセッサがサポートされます。これは、gradle.properties
ファイルに kapt.incremental.apt=true
を追加することで有効にできます。
キャッシュ可能な単体テスト
includeAndroidResources
を true
に設定して単体テストで Android リソース、アセット、マニフェストを使用できるようにすると、Android Gradle プラグインは、絶対パスを含むテスト構成ファイルを生成し、キャッシュの再配置を中断します。相対パスを使用してテスト構成を生成するように指定すると、AndroidUnitTest
タスクは完全にキャッシュ可能になります。そのためには、gradle.properties
ファイルに次の行を追加します。
android.testConfig.useRelativePath = true
既知の問題
Kotlin Gradle プラグイン 1.3.31 以前を使用すると、プロジェクトのビルドや同期の際に次の警告が表示されることがあります。
WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
この問題を解決するには、プラグインをバージョン 1.3.40 以降にアップグレードしてください。
3.4.0(2019 年 4 月)
このバージョンの Android プラグインには、次のものが必要です。
Gradle 5.1.1 以降。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
このマイナー アップデートでは、Android 11 でのパッケージの公開設定に関する新しいデフォルト設定と各種機能との互換性が確保されています。
詳細については、4.0.1 リリースノートをご覧ください。
3.4.2(2019 年 7 月)
Android Studio 3.4.2 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。
3.4.1(2019 年 5 月)
Android Studio 3.4.1 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。
新機能
新しい lint チェック依存関係コンフィグレーション:
lintChecks
の動作が変更され、新しい依存関係コンフィグレーションlintPublish
が導入されました。これにより、Android ライブラリにパッケージ化される lint チェックを細かく制御できるようになりました。lintChecks
: プロジェクトをローカルでビルドするときだけ実行する、lint チェックに使用する既存の構成。以前にlintChecks
依存関係コンフィグレーションを使用して公開 AAR に lint チェックを含めていた場合は、これらの依存関係を移行して、下記の新しいlintPublish
コンフィグレーションを使用する必要があります。lintPublish
: 下記のように、公開 AAR に含める lint チェックに使用する、ライブラリ プロジェクトの新しいコンフィグレーション。つまりライブラリを使用するプロジェクトでも、これらの lint チェックを適用します。
次のコードサンプルでは、ローカルの Android ライブラリ プロジェクトで両方の依存関係コンフィグレーションを使用しています。
Groovy
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks project(':lint') // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish project(':lintpublish') }
Kotlin
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks(project(":lint")) // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish(project(":lintpublish")) }
一般に、パッケージ化と署名のタスクで、全体的なビルド速度が改善されています。これらのタスクに関連してパフォーマンスの低下が見られた場合は、バグを報告してください。
動作の変更
Android Instant Apps Feature プラグイン非推奨の警告: インスタント アプリのビルドに依然として
com.android.feature
プラグインを使用している場合、Android Gradle プラグイン 3.4.0 では、非推奨の警告がスローされます。今後のバージョンのプラグインでもインスタント アプリをビルドできるようにするには、動的機能プラグインを使用するようにインスタント アプリを移行します。またこれにより、インストール済みアプリとインスタント アプリの両方のエクスペリエンスを、単一の Android App Bundle から公開できます。R8 をデフォルトで有効化: R8 は、desugar、圧縮、難読化、最適化、dex 変換をすべて 1 つのステップに統合し、ビルド パフォーマンスを大幅に改善します。R8 は Android Gradle プラグイン 3.3.0 で導入されました。現在は、3.4.0 以上のプラグインを使用するアプリ プロジェクトと Android ライブラリ プロジェクトの両方で、デフォルトで有効になっています。
下記の図は、R8 が導入される前のコンパイル プロセスの概要を示しています。
現在では、下記の図に示すように、desugar、圧縮、難読化、最適化、dex 変換(D8)のすべてが、R8 によって 1 つのステップで完了します。
R8 は既存の ProGuard ルールと連携するように設計されているため、通常は、R8 を利用するうえで必要となる措置はありません。ただし、Android プロジェクト専用に設計された ProGuard とは異なるテクノロジーであるため、圧縮や最適化により、ProGuard では発生しないコードの削除が生じる可能性があります。そのため、ごくまれにこのような状況が生じた場合は、ビルド出力内にそのコードを保持するための追加ルールが必要となることがあります。
R8 を使用していて問題が発生した場合は、R8 の互換性に関するよくある質問を参照して、該当の問題の解決策があるかどうかを確認してください。解決策が記載されていない場合は、バグを報告してください。R8 を無効にするには、次のいずれかの行をプロジェクトの
gradle.properties
ファイルに追加します。# Disables R8 for Android Library modules only. android.enableR8.libraries = false # Disables R8 for all modules. android.enableR8 = false
ndkCompile
は非推奨:ndkBuild
を使用してネイティブ ライブラリをコンパイルしようとすると、ビルドエラーが発生するようになりました。代わりに CMake か ndk-build を使用して、プロジェクトに C / C++ コードを追加する必要があります。
既知の問題
一意のパッケージ名を正しく使用することは現在必須ではありませんが、プラグインの今後のバージョンでは、より厳密になります。Android Gradle プラグインのバージョン 3.4.0 では、次の行を
gradle.properties
ファイルに追加することで、使用可能なパッケージ名をプロジェクトで宣言しているかどうかの確認をオプトインできます。android.uniquePackageNames = true
Android Gradle プラグインを使用してパッケージ名を設定する方法について詳しくは、アプリケーション ID の設定をご覧ください。
3.3.0(2019 年 1 月)
このバージョンの Android プラグインには、次のものが必要です。
Gradle 4.10.1 以降。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
このマイナー アップデートでは、Android 11 でのパッケージの公開設定に関する新しいデフォルト設定と各種機能との互換性が確保されています。
詳細については、4.0.1 リリースノートをご覧ください。
3.3.2(2019 年 3 月)
Android Studio 3.3.2 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。
3.3.1(2019 年 2 月)
Android Studio 3.3.1 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。
新機能
クラスパス同期の改善: ランタイム クラスパスやコンパイル クラスパスの依存関係を解決する際、Android Gradle プラグインは、複数のクラスパスにまたがって現れる依存関係に関し、それ以降の特定のバージョン競合を修正しようとします。
たとえば、ランタイム クラスパスにライブラリ A バージョン 2.0 が含まれ、コンパイル クラスパスにライブラリ A バージョン 1.0 が含まれている場合、プラグインはコンパイル クラスパスへの依存関係を自動的にライブラリ A バージョン 2.0 にアップデートして、エラーを回避します。
ただし、ランタイム クラスパスにライブラリ A バージョン 1.0 が含まれ、コンパイル クラスパスにライブラリ A バージョン 2.0 が含まれている場合、プラグインはコンパイル クラスパスの依存関係をライブラリ A バージョン 1.0 にダウングレードしないため、エラーが発生します。詳細については、クラスパス間の競合の修正をご覧ください。
アノテーション プロセッサ使用時の増分 Java コンパイルの改善: このアップデートにより、アノテーション プロセッサ使用時の増分 Java コンパイルのサポートが改善され、ビルド時間が短縮されます。
- Kapt を使用するプロジェクト(ほとんどの Kotlin のみのプロジェクトと Kotlin-Java ハイブリッド プロジェクト): データ バインディングや retro-lambda プラグインを使用する場合でも、増分 Java コンパイルが有効になります。Kapt タスクによるアノテーション処理は、まだ増分ではありません。
Kapt を使用しないプロジェクト(Java のみのプロジェクト): 使用するすべてのアノテーション プロセッサが増分アノテーション処理をサポートしている場合、増分 Java コンパイルはデフォルトで有効になります。増分アノテーション プロセッサの採用状況を確認するには、Gradle の問題 5277 をご覧ください。
ただし、1 つ以上のアノテーション プロセッサが増分ビルドをサポートしていない場合、増分 Java コンパイルは有効になりません。代わりに、
gradle.properties
ファイルで次のフラグを指定できます。android.enableSeparateAnnotationProcessing=true
このフラグを指定すると、Android Gradle プラグインは別のタスクでアノテーション プロセッサを実行し、Java コンパイル タスクを段階的に実行できます。
古い API を使用する場合のデバッグ情報の改善: プラグインは、サポートされなくなった API の使用を検出したとき、その API が使用されている場所の特定に役立つ、より詳細な情報を提供できるようになりました。 追加情報を表示するには、プロジェクトの
gradle.properties
ファイルに以下を含めます。android.debug.obsoleteApi=true
フラグを有効にするには、
-Pandroid.debug.obsoleteApi=true
をコマンドラインから渡します。コマンドラインから、機能モジュールでのインストゥルメンテーション テストを実行できます。
動作の変更
遅延タスク設定: プラグインは Gradle の新しいタスク作成 API を使用して、現在のビルド(または実行タスクグラフにないタスク)の完了に必要でないタスクの初期化と設定を回避するようになりました。たとえば、「release」や「debug」など複数のビルド バリアントがあり、アプリの「debug」バージョンをビルドしている場合、プラグインはアプリの「release」バージョンのタスクの初期化と設定を回避します。
variant.getJavaCompile()
など、Variants API の特定の古いメソッドを呼び出すと、タスクの設定が必須になることがあります。ビルドを遅延タスク設定用に最適化するには、代わりにvariant.getJavaCompileProvider()
などのTaskProvider
オブジェクトを返す新しいメソッドを呼び出します。カスタムビルド タスクを実行する場合は、Gradle の新しいタスク作成 API に対応する方法をご確認ください。
特定のビルドタイプで
useProguard false
を設定すると、プラグインは ProGuard の代わりに R8 を使用して、アプリのコードとリソースを圧縮し難読化するようになりました。R8 の詳細については、Android デベロッパー ブログのこちらのブログ投稿をご覧ください。ライブラリ プロジェクトの R クラス生成の高速化: 以前、Android Gradle プラグインは、プロジェクトの依存関係ごとに
R.java
ファイルを生成し、アプリの他のクラスと一緒にコンパイルしていました。プラグインは最初に中間のR.java
クラスをビルドせずに、アプリのコンパイル済み R クラスを含む JAR を直接生成するようになりました。この最適化によって、ライブラリ サブプロジェクトや依存関係が多数あるプロジェクトのビルド パフォーマンスが大幅に改善され、Android Studio のインデックス処理速度が改善される可能性があります。Android App Bundle をビルドする際、Android 6.0(API レベル 23)以降を対象とするアプリバンドルから生成された APK には、デフォルトで未圧縮バージョンのネイティブ ライブラリが含まれるようになりました。この最適化によって、デバイスがライブラリのコピーを作成する必要がなくなるため、アプリのディスク上のサイズが小さくなります。この最適化を無効にする場合は、
gradle.properties
ファイルに次の行を追加します。android.bundle.enableUncompressedNativeLibs = false
一部のサードパーティ プラグインの最小バージョンを適用します。
シングル バリアント プロジェクト同期: ビルド設定とプロジェクトを同期することは、プロジェクトの構造を Android Studio に認識させる重要なステップです。大規模なプロジェクトでは、この処理に時間がかかることがあります。プロジェクトで複数のビルド バリアントを使用している場合は、現在選択しているバリアントに限定することで、プロジェクトの同期を最適化できます。
この最適化を有効にするには、Android Studio 3.3 以降と、Android Gradle プラグイン 3.3.0 以降を使用する必要があります。要件を満たすと、プロジェクトの同期時に、この最適化を有効にするか尋ねるプロンプトが表示されます。また、新しいプロジェクトの場合、デフォルトで最適化が有効になっています。
手動でこの最適化を有効にするには、[File] > [Settings] > [Experimental] > [Gradle](Mac の場合は [Android Studio] > [Preferences] > [Experimental] > [Gradle])をクリックして、[Only sync the active variant] チェックボックスをオンにします。
注: この最適化機能は、Java 言語と C++ 言語を使用したプロジェクトを完全にサポートしており、Kotlin にも一部対応しています。Kotlin コンテンツを含むプロジェクトでこの最適化を有効にすると、内部で全バリアントを使用するように、Gradle 同期がフォールバックします。
不足している SDK パッケージの自動ダウンロード: この機能は、NDK をサポートするように拡張されました。詳細については、不足しているパッケージの Gradle での自動ダウンロードをご覧ください。
バグの修正
Android Gradle プラグイン 3.3.0 で修正される問題は、次のとおりです。
- Jetifier が有効になっているにもかかわらず AndroidX バージョンではなく
android.support.v8.renderscript.RenderScript
を呼び出すビルドプロセス - 次を含む
androidx-rs.jar
によるクラッシュ: 静的にバンドルされたannotation.AnyRes
- RenderScript を使用する場合、
build.gradle
ファイルで Build Tools のバージョンを手動設定する必要がなくなりました。
- Jetifier が有効になっているにもかかわらず AndroidX バージョンではなく
3.2.0(2018 年 9 月)
このバージョンの Android プラグインには、次のものが必要です。
- Gradle 4.6 以降。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
- SDK Build Tools 28.0.3 以降。
3.2.1(2018 年 10 月)
このアップデートにより、SDK Build Tools のバージョンを指定する必要がなくなりました。Android Gradle プラグインはデフォルトでバージョン 28.0.3 を使用します。
新機能
Android App Bundle のビルドのサポート: アプリバンドルは新しいアップロード形式で、アプリのコンパイル済みコードとリソースはすべてここに含まれますが、APK の生成と署名は Google Play ストアで行います。デベロッパー側では複数の APK を生成、署名、管理する必要がなくなり、ユーザー側ではサイズが削減されデバイスに合わせて最適化されたダウンロードを行えます。詳細については、Android App Bundle の概要をご覧ください。
アノテーション プロセッサ使用時の増分ビルド速度改善のサポート:
AnnotationProcessorOptions
DSL でCommandLineArgumentProvider
を拡張しました。これによりユーザーやアノテーション プロセッサ作成者は、増分ビルド プロパティ型のアノテーションを使用してプロセッサの引数にアノテーションを付けられます。このようなアノテーションを使用すると、増分ビルドやキャッシュ済みクリーンビルドの正確性とパフォーマンスが改善されます。詳細については、アノテーション プロセッサへの引数の指定をご覧ください。AndroidX 用移行ツール: Android 3.2 以降で Android Gradle プラグイン 3.2.0 を使用している場合、メニューバーから [Refactor] > [Migrate to AndroidX] を選択することで、プロジェクトのローカル依存関係と Maven 依存関係を移行して新しい AndroidX ライブラリを使用できます。この移行ツールを使用すると、
gradle.properties
ファイルで次のフラグもtrue
に設定されます。android.useAndroidX
:true
に設定すると、Android プラグインはサポート ライブラリではなく、該当する AndroidX ライブラリを使用します。このフラグが指定されていない場合、プラグインはデフォルトでfalse
に設定します。android.enableJetifier
:true
に設定すると、Android プラグインは既存のサードパーティ ライブラリのバイナリを書き換えて、AndroidX 依存関係を使用するように自動的に移行します。このフラグが指定されていない場合、プラグインはデフォルトでfalse
に設定します。このフラグをtrue
に設定できるのはandroid.useAndroidX
もtrue
に設定されている場合のみであり、それ以外の場合はビルドエラーが発生します。
詳細については、AndroidX の概要をご覧ください。
新しいコード圧縮ツール R8: R8 はコードの圧縮と難読化用の新しいツールで、ProGuard の後継です。R8 のプレビュー版の使用を開始するには、プロジェクトの
gradle.properties
ファイルに次の行を追加します。Groovy
android.enableR8 = true
Kotlin
android.enableR8 = true
動作の変更
- D8 での desugar がデフォルトで有効になりました。
AAPT2 は Google の Maven リポジトリに移動しました。AAPT2 を使用するには、下記のように、
build.gradle
ファイル内でgoogle()
依存関係を指定する必要があります。Groovy
buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() }
Kotlin
buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() }
ネイティブの Multidex がデフォルトで有効になりました。以前のバージョンの Android Studio では、Android API レベル 21 以上を搭載しているデバイスにアプリのデバッグ バージョンをデプロイしたときに、ネイティブ multidex が有効になっていました。今回のリリースでは、デバイスへのデプロイであるかリリース用 APK の作成であるかにかかわらず、
minSdkVersion=21
以上に設定されているすべてのモジュールに対して、Android Plugin for Gradle がネイティブ multidex を有効にします。プラグインの最小バージョンが protobuf プラグイン(0.8.6)、Kotlin プラグイン(1.2.50)、Crashlytics プラグイン(1.25.4)になりました。
機能モジュール プラグイン
com.android.feature
では、モジュール名の指定時に英数字とアンダースコアのみを使用するようになりました。たとえば機能モジュール名にダッシュが含まれていると、ビルドエラーが発生します。この動作は、動的機能プラグインの動作と同じです。
バグの修正
- JavaCompile は、データ バインディングのあるプロジェクトでキャッシュできるようになりました(問題 #69243050)。
- データ バインディングのあるライブラリ モジュールのコンパイル回避を改善しました(問題 #77539932)。
- オンデマンド設定を、以前のバージョンでは予測不能なビルドエラーのために無効にしていた場合でも、再度有効にできるようになりました(問題 #77910727)。
3.1.0(2018 年 3 月)
このバージョンの Android プラグインには、次のものが必要です。
- Gradle 4.4 以降。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
- Build Tools 27.0.3 以降。
android.buildToolsVersion
プロパティを使用してビルドツールのバージョンを指定する必要がなくなりました。プラグインはデフォルトで必要な最低限のバージョンを使用します。
新しい DEX コンパイラ D8
Android Studio は、D8 という新しい DEX コンパイラをデフォルトで使用するようになりました。DEX コンパイルは、.class
バイトコードを Android ランタイム(古いバージョンの Android では Dalvik)用の .dex
バイトコードに変換する処理です。DX という以前のコンパイラと比較すると、D8 はコンパイルが高速で、出力される DEX ファイルのサイズが小さく、しかもアプリのランタイム パフォーマンスは同等以上です。
D8 によって日々のアプリ開発ワークフローが変わることはありませんが、新しいコンパイラに関連する問題が発生した場合は、バグを報告してください。プロジェクトの gradle.properties
ファイルで次のように指定すると、D8 を一時的に無効にして DX を使用できます。
android.enableD8=false
Java 8 言語機能を使用しているプロジェクトの場合、デフォルトで増分 desugar が有効になってます。無効にするには、プロジェクトの gradle.properties
ファイルで次のように指定します。
android.enableIncrementalDesugaring=false.
プレビュー ユーザー: すでに D8 のプレビュー版を使用している場合、JDK ではなく、SDK ビルドツールに含まれるライブラリに対してコンパイルされるようになりました。そのため、JDK には存在するが SDK ビルドツール ライブラリには存在しない API にアクセスすると、コンパイル エラーが発生します。
動作の変更
それぞれが異なる ABI をターゲットとする複数の APK をビルドする場合、プラグインで、
mips
、mips64
、armeabi
の各 ABI 用の APK がデフォルトで生成されなくなりました。各 ABI をターゲットとする APK をビルドするには、NDK r16b 以前を使用して、下記のように
build.gradle
ファイル内で対象 ABI を指定する必要があります。
Groovy
splits { abi { include 'armeabi', 'mips', 'mips64' ... } }
Kotlin
splits { abi { include("armeabi", "mips", "mips64") ... } }
- Android プラグインのビルド キャッシュが、30 日以上経過したキャッシュ エントリを削除するようになりました。
resConfig
に"auto"
を渡しても、APK にパッケージ化する文字列リソースが自動的に選択されなくなりました。引き続き"auto"
を使用する場合、プラグインはアプリと依存関係で提供されるすべての文字列リソースをパッケージ化します。そのため、プラグインを APK にパッケージ化する各ロケールを指定する必要があります。ローカル モジュールはアプリのテスト APK に依存できないため、
androidTestImplementation
の代わりにandroidTestApi
コンフィグレーションを使用してインストルメント化テストに依存関係を追加すると、Gradle は次の警告を発行します。Groovy
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'
Kotlin
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'
修正
- Android Studio がコンポジット ビルドの依存関係を正しく認識しない問題を修正しました。
- 1 回のビルドで Android プラグインを複数回読み込むと(たとえば buildscript のクラスパスに Android プラグインが含まれているサブプロジェクトが複数存在する場合)、プロジェクト同期エラーが発生する問題を修正しました。
3.0.0(2017 年 10 月)
Android Gradle プラグイン 3.0.0 には、大規模プロジェクトのパフォーマンスの問題に対処することを目的とした、さまざまな変更が含まれています。
たとえば、約 130 個のモジュールと多数の外部依存関係を持つ(ただしコードやリソースはない)サンプル スケルトン プロジェクトでは、次のようなパフォーマンス改善が得られます。
Android プラグイン バージョン + Gradle バージョン | Android プラグイン 2.2.0 + Gradle 2.14.1 | Android プラグイン 2.3.0 + Gradle 3.3 | Android プラグイン 3.0.0 + Gradle 4.1 |
---|---|---|---|
構成(例: ./gradlew --help の実行) |
~2 分 | ~9 秒 | ~2.5 秒 |
Java を 1 行変更(実装変更) | ~2 分 15 秒 | ~29 秒 | ~6.4 秒 |
これらの変更の中には、既存のビルドが失敗するものもあります。そのため、新しいプラグインを使用する前に、プロジェクトを移行する労力を考慮する必要があります。
上記のパフォーマンス改善が見られない場合は、Gradle Profiler を使用したビルドのトレースを含めてバグを報告してください。
このバージョンの Android プラグインには、次のものが必要です。
- Gradle 4.1 以降。 詳細については、Gradle のアップデートに関するセクションをご覧ください。
- Build Tools 26.0.2 以降。
このアップデートにより、ビルドツールのバージョンを指定する必要がなくなりました。プラグインはデフォルトで必要な最低限のバージョンを使用します。
そのため、
android.buildToolsVersion
プロパティを削除できるようになりました。
3.0.1(2017 年 11 月)
Android Studio 3.0.1 をサポートするマイナー アップデートです。全般的なバグの修正とパフォーマンスの改善が含まれています。
最適化
- 詳細なタスクグラフによるマルチモジュール プロジェクトの並列処理の改善。
- 依存関係を変更する際に、その依存関係の API にアクセスしないモジュールを再コンパイルしなくなるため、Gradle ビルドが高速になりました。Gradle の新しい依存関係コンフィグレーション(
implementation
、api
、compileOnly
、runtimeOnly
)を使用して、API を他のモジュールにリークする依存関係を制限する必要があります。 - クラスごとに dex を実行することにより、増分ビルドが高速になりました。各クラスが個別の DEX ファイルにコンパイルされ、変更されたクラスのみが re-dex されるようになりました。また、
minSdkVersion
を 20 以下に設定した以前の multi-dex を使用しているアプリでも、ビルド速度の向上が見込まれます。 - 特定のタスクを最適化してキャッシュ出力を使用することで、ビルド速度を改善しました。 この最適化を活かすには、まず Gradle ビルド キャッシュを有効にする必要があります。
- デフォルトで有効になった AAPT2 を使用する増分リソース処理を改善しました。
AAPT2 の使用中に問題が発生した場合は、バグを報告してください。
gradle.properties
ファイルでandroid.enableAapt2=false
を設定し、コマンドラインから./gradlew --stop
を実行して Gradle デーモンを再起動することにより、AAPT2 を無効にすることもできます。
新機能
- バリアント識別による依存関係の管理。 プラグインは、モジュールの特定のバリアントをビルドする際に、ローカル ライブラリ モジュールの依存関係のバリアントと、ビルドしているモジュールのバリアントを自動的にマッチングするようになりました。
- Android Instant Apps と Android Instant Apps SDK(SDK Manager を使用してダウンロードできます)をサポートする、新しい機能モジュール プラグインが含まれています。新しいプラグインによる機能モジュールの作成の詳細については、複数の機能を備えた Instant App の構造をご覧ください。
- 特定の Java 8 言語機能と Java 8 ライブラリを使用するためのビルトイン サポート。 Jack はサポート終了になり、不要になりました。このため、まず Jack を無効にしてから、デフォルトのツールチェーンにビルトインされている改善された Java 8 サポートを使用する必要があります。詳細については、Java 8 言語機能の使用をご覧ください。
- Android Test Orchestrator でテストを実行するためのサポートを追加しました。これにより、アプリのテストをそれぞれの
Instrumentation
呼び出し内で行うことができます。各テストはそれぞれのInstrumentation
インスタンスで行われるため、テスト間の共有状態はデバイスの CPU やメモリに蓄積されません。また、1 つのテストがクラッシュした場合でも、そのInstrumentation
インスタンスのみが削除されるため、他のテストは引き続き行われます。- デバイス上のテスト オーケストレーションを使用するかどうかを決定する
testOptions.execution
を追加しました。Android Test Orchestrator を使用する場合、次に示すようにANDROID_TEST_ORCHESTRATOR
を指定する必要があります。デフォルトでは、このプロパティはHOST
に設定されます。これはテストを行う標準的な方法であり、デバイス上のオーケストレーションは無効になります。
- デバイス上のテスト オーケストレーションを使用するかどうかを決定する
Groovy
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- 新しい
androidTestUtil
依存関係コンフィグレーションにより、インストルメンテーション テスト(Android Test Orchestrator など)を実行する前に、別のテストヘルパー APK をインストールできるようになりました。
Groovy
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
- Roboelectric などの Android リソースを必要とする単体テストをサポートするために、
testOptions.unitTests.includeAndroidResources
を追加しました。このプロパティをtrue
に設定すると、プラグインは単体テストを実行する前に、リソース、アセット、マニフェストのマージを実施します。 テストでは、次のキーのクラスパスでcom/android/tools/test_config.properties
を検査できます。android_merged_assets
: マージされたアセット ディレクトリへの絶対パス。注: ライブラリ モジュールの場合、マージされたアセットに依存関係のアセットは含まれません(問題 #65550419 参照)。
android_merged_manifest
: マージされたマニフェスト ファイルへの絶対パス。android_merged_resources
: マージされたリソース ディレクトリへの絶対パス。モジュールのすべてのリソースと依存関係が含まれます。android_custom_package
: 最後の R クラスのパッケージ名。アプリケーション ID を動的に変更する場合、このパッケージ名は、アプリのマニフェストのpackage
属性と一致しないことがあります。
- リソースとしてのフォントをサポートしました。これは Android 8.0(API レベル 26)で導入された新機能です。
- Android Instant Apps SDK 1.1 以降での言語固有の APK をサポートしました。
- 次のように、外部のネイティブ ビルド プロジェクトの出力ディレクトリを変更できるようになりました。
Groovy
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
Kotlin
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory = "./outputs/cmake" } } }
- Android Studio からネイティブ プロジェクトをビルドするときに CMake 3.7 以降を使用できるようになりました。
- 新しい
lintChecks
依存関係コンフィグレーションにより、カスタム lint ルールを定義する JAR を作成し、AAR や APK のプロジェクトにパッケージ化できます。カスタム lint ルールは、単一の JAR を出力し、compileOnly
依存関係のみを含む、別のプロジェクトに属している必要があります。他のアプリやライブラリ モジュールは、lintChecks
コンフィグレーションを使用して lint プロジェクトに依存できます。
Groovy
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Kotlin
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks(project(":lint-checks")) }
動作の変更
- Android プラグイン 3.0.0 では特定の API が削除されるため、その API を使用するとビルドが失敗します。たとえば、Variants API を使用して
outputFile()
オブジェクトにアクセスすることや、processManifest.manifestOutputFile()
を使用して各バリアントのマニフェスト ファイルを取得することはできなくなりました。詳細については、API の変更をご覧ください。 - ビルドツールのバージョンを指定する必要がなくなりました(そのため、
android.buildToolsVersion
プロパティを削除できるようになりました)。デフォルトでは、使用しているバージョンの Android プラグインに最小限必要なバージョンのビルドツールが自動的に使用されます。 - 次のように、
buildTypes
ブロックで PNG 自動最適化を有効または無効にできるようになりました。すべてのビルドについて PNG 自動最適化がデフォルトで有効になっていますが、PNG ファイルが多く含まれるプロジェクトではビルド時間が長くなることから、デバッグビルドは除きます。そのため、他のビルドタイプのビルド時間を改善するには、PNG 自動最適化を無効にするか、画像を WebP に変換する必要があります。
Groovy
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
Kotlin
android { buildTypes { release { // Disables PNG crunching for the release build type. isCrunchPngs = false } } }
- Android プラグインは、外部の CMake プロジェクトで設定する実行可能ターゲットを自動的にビルドするようになりました。
annotationProcessor
依存関係コンフィグレーションを使用してプロセッサ クラスパスにアノテーション プロセッサを追加する必要があります。- 非推奨の
ndkCompile
の使用制限が強化されました。代わりに、CMake または ndk-build のいずれかを使用して、APK にパッケージ化するネイティブ コードをコンパイルする方法に移行する必要があります。詳細については、ndkcompile から移行する方法をご覧ください。
2.3.0(2017 年 2 月)
2.3.3(2017 年 6 月)
Android Studio 2.3.3 との互換性を追加するマイナー アップデートです。
2.3.2(2017 年 5 月)
Android Studio 2.3.2 との互換性を追加するマイナー アップデートです。
2.3.1(2017 年 4 月)
Android プラグイン 2.3.0 のマイナー アップデートです。一部の物理 Android デバイスが Instant Run で正常に動作しなかった問題を修正しました(問題 #235879 参照)。
- 依存関係:
-
- Gradle 3.3 以降。
- Build Tools 25.0.0 以降。
- 新規:
-
- パフォーマンスの改善と新機能が含まれる Gradle 3.3 を使用します。詳細については、Gradle リリースノートをご覧ください。
- ビルド キャッシュ: プロジェクトをビルドするときに Android プラグインが生成する特定の出力(非パッケージ化 AAR、事前 DEX 変換済みのリモート依存関係など)を保存します。キャッシュされたファイルは、ビルドシステムが以降のビルドを行う際に再利用できるため、再生成の手間が省け、クリーンビルドの時間が大幅に短縮されます。Android プラグイン 2.3.0 以降を使用しているプロジェクトでは、デフォルトでビルド キャッシュが使用されます。詳細については、ビルド キャッシュによるクリーンビルドの高速化をご覧ください。
- ビルド キャッシュを削除する
cleanBuildCache
タスクが含まれています。 - 試験運用版のビルド キャッシュ(以前のバージョンのプラグインに含まれるもの)を使用している場合、プラグインをアップデートして最新バージョンにする必要があります。
- ビルド キャッシュを削除する
- 変更内容:
-
- Android Studio 2.3 に含まれる Instant Run の変更をサポートします。
- 非常に大規模なプロジェクトで設定に要する時間が大幅に短縮されます。
- Constraint Layout ライブラリの自動ダウンロードに関する問題を修正しました。
- プラグインが ProGuard バージョン 5.3.2 を使用するようになりました。
- 報告されたバグの修正が多数含まれています。問題が発生した場合は、引き続きバグレポートをお寄せください。
2.2.0(2016 年 9 月)
- 依存関係:
-
- Gradle 2.14.1 以降。
- Build Tools 23.0.2 以降。
- 新規:
-
- パフォーマンスの改善と新機能が含まれる Gradle 2.14.1 を使用します。また、Gradle デーモン使用時のローカル権限昇格を可能にするセキュリティ脆弱性を修正しました。詳細については、Gradle リリースノートをご覧ください。
externalNativeBuild {}
DSL を使用することで、Gradle でネイティブ ソースにリンクし、CMake や ndk-build を使用してネイティブ ライブラリをコンパイルできるようになりました。Gradle は、ネイティブ ライブラリを作成した後、APK にパッケージ化します。CMake と ndk-build を Gradle で使用する方法については、プロジェクトへの C / C++ コードの追加をご覧ください。- コマンドラインからビルド実行すると、Gradle は不足している SDK コンポーネントやプロジェクトが依存しているアップデートの自動ダウンロードを試みます。 詳細については、不足しているパッケージの Gradle での自動ダウンロードをご覧ください。
- 新しい試験運用版のキャッシュ機能により、Gradle では、事前 DEX 変換済みバージョンのライブラリを pre-dex し、保存し、再利用することで、ビルド時間を短縮できます。この試験運用版機能の使用方法について詳しくは、ビルド キャッシュのガイドをご覧ください。
- 圧縮、署名、zipalign を 1 つのタスクで処理する新しいデフォルトのパッケージ化パイプラインを採用することで、ビルドのパフォーマンスを改善しました。
gradle.properties
ファイルにandroid.useOldPackaging=true
を追加すると、以前のパッケージ化ツールを使用するように戻せます。新しいパッケージ化ツールの使用中、zipalignDebug
タスクは使用できません。ただし、createZipAlignTask(String taskName, File inputFile, File outputFile)
メソッドを呼び出すことで、独自に作成できます。 - APK 署名では、従来の JAR 署名に加えて APK 署名スキーム v2 が使用されるようになりました。生成される APK は、すべての Android プラットフォームで受け入れられます。署名後にこれらの APK を変更すると、v2 署名が無効になり、デバイスへのインストールができなくなります。この機能を無効にするには、モジュール レベルの
build.gradle
ファイルに次のコードを追加します。Groovy
android { ... signingConfigs { config { ... v2SigningEnabled false } } }
Kotlin
android { ... signingConfigs { create("config") { ... v2SigningEnabled = false } } }
- Multidex ビルドでは、ProGuard ルールを使用して、Gradle でアプリのメインの DEX ファイルにコンパイルする必要があるクラスを決定できるようになりました。Android システムはアプリの起動時にメインの DEX ファイルを最初に読み込むため、特定のクラスをメインの DEX ファイルにコンパイルすることで、起動時に優先順位を付けられます。メインの DEX ファイル専用の ProGuard 設定ファイルを作成してから、
buildTypes.multiDexKeepProguard
を使用して、設定ファイルのパスを Gradle に渡します。この DSL の使用は、アプリの一般的な ProGuard ルールを提供しメイン DEX ファイルのクラスを指定しないbuildTypes.proguardFiles
の使用とは異なります。 - デバイスにインストールするときにアプリのサイズを小さくできる
android:extractNativeLibs
フラグのサポートを追加しました。アプリのマニフェストの<application>
要素でこのフラグをfalse
に設定すると、Gradle は圧縮されていないバージョンと調整されたバージョンのネイティブ ライブラリを APK にパッケージ化します。PackageManager
がインストール時に APK からデバイスのファイル システムにネイティブ ライブラリをコピーできなくなり、アプリの差分アップデートを小さくできるというメリットもあります。 - プロダクト フレーバーに
versionNameSuffix
とapplicationIdSuffix
を指定できるようになりました(問題 59614)。
- 変更内容:
-
-
getDefaultProguardFile
は、Android Plugin for Gradle が提供するデフォルトの ProGuard ファイルを返すようになり、Android SDK のファイルを使用しなくなりました。 - Jack コンパイラのパフォーマンスと機能を改善しました。
testCoverageEnabled
をtrue
に設定すると、Jack で Jacoco テスト カバレッジがサポートされるようになりました。- アノテーション プロセッサのサポートを改善しました。
compile
依存関係など、クラスパス上のアノテーション プロセッサは、ビルドに自動的に適用されます。ビルドでアノテーション プロセッサを指定し、モジュール レベルのbuild.gradle
ファイルでjavaCompileOptions.annotationProcessorOptions {}
DSL を使用して引数を渡すこともできます。Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className 'com.example.MyProcessor' // Arguments are optional. arguments = [ foo : 'bar' ] } } } }
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className = "com.example.MyProcessor" // Arguments are optional. arguments(mapOf(foo to "bar")) } } } }
コンパイル時にアノテーション プロセッサを適用するが APK に含めないという場合は、
annotationProcessor
依存関係スコープを使用します。Groovy
dependencies { compile 'com.google.dagger:dagger:2.0' annotationProcessor 'com.google.dagger:dagger-compiler:2.0' // or use buildVariantAnnotationProcessor to target a specific build variant }
Kotlin
dependencies { implementation("com.google.dagger:dagger:2.0") annotationProcessor("com.google.dagger:dagger-compiler:2.0") // or use buildVariantAnnotationProcessor to target a specific build variant }
設定可能なパラメータのリストを表示するには、コマンドラインから次のコマンドを実行します。
java -jar /build-tools/jack.jar --help-properties
- Gradle デーモンのヒープサイズが 1.5 GB 以上の場合、Jack はデフォルトで Gradle と同じプロセスで実行されるようになりました。デーモンのヒープサイズを調整するには、
gradle.properties
ファイルに次の行を追加します。# This sets the daemon heap size to 1.5GB. org.gradle.jvmargs=-Xmx1536M
-
2.1.0(2016 年 4 月)
2.1.3(2016 年 8 月)
このアップデートには、Gradle 2.14.1 以降が必要です。Gradle 2.14.1 には、パフォーマンスの改善、新機能、重要なセキュリティ修正が含まれています。詳細については、Gradle リリースノートをご覧ください。
- 依存関係:
-
- Gradle 2.10 以降。
- Build Tools 23.0.2 以降。
- 新規:
-
- N Developer Preview、JDK 8、Jack ツールチェーンを使用した Java 8 言語機能のサポートを追加しました。詳細については、N Preview のガイドをご覧ください。
注: Instant Run は、現段階では Jack と併用できません。そのため、新しいツールチェーンの使用中は無効になります。N Preview 向けに開発していて、サポートされている Java 8 言語機能を使用する場合に限り、Jack を使用する必要があります。
- 開発中のコンパイル時間を短縮するために、増分 Java コンパイルのデフォルト サポートが追加されました。これは、ソースのうち変更された部分や再コンパイルが必要な部分だけを再コンパイルすることで行われます。この機能を無効にするには、モジュール レベルの
build.gradle
ファイルに次のコードを追加します。Groovy
android { ... compileOptions { incremental false } }
Kotlin
android { ... compileOptions { incremental = false } }
-
個々の外部 VM プロセスではなくビルドプロセス内で dex 変換を行う、プロセス内 dex 変換のサポートを追加しました。これにより、増分ビルドが高速化されるだけでなく、フルビルドも高速化されます。Gradle デーモンの最大ヒープサイズが 2,048 MB 以上に設定されたプロジェクトでは、この機能がデフォルトで有効になります。そのためには、プロジェクトの
```none org.gradle.jvmargs = -Xmx2048m ```gradle.properties
ファイルに次の行を追加します。モジュール レベルの
```none org.gradle.jvmargs = -Xmx3072m ```build.gradle
ファイルでjavaMaxHeapSize
の値を定義した場合、org.gradle.jvmargs
をjavaMaxHeapSize
+ 1,024 MB の値に設定する必要があります。たとえば、javaMaxHeapSize
を「2048m」に設定した場合、プロジェクトのgradle.properties
ファイルに次の行を追加する必要があります。プロセス内 dex 変換を無効にするには、モジュール レベルの
build.gradle
ファイルに次のコードを追加します。Groovy
android { ... dexOptions { dexInProcess false } }
Kotlin
android { ... dexOptions { dexInProcess = false } }
- N Developer Preview、JDK 8、Jack ツールチェーンを使用した Java 8 言語機能のサポートを追加しました。詳細については、N Preview のガイドをご覧ください。
2.0.0(2016 年 4 月)
- 依存関係:
-
- Gradle 2.10 以降。
- Build Tools 21.1.1 以降。
- 新規:
-
- バイトコード インジェクションをサポートし、エミュレータや実機で実行中のアプリにコードとリソースのアップデートをプッシュすることで、Instant Run を有効にします。
- アプリが実行されていない場合についても、増分ビルドのサポートを追加しました。 接続されているデバイスに Android Debug Bridge を介して増分変更をプッシュすることで、フルビルドの時間が改善されます。
- 同時に生成できるスレーブ dex プロセスの数を制御する
maxProcessCount
を追加しました。次のコード(モジュール レベルのbuild.gradle
ファイル内)では、同時プロセスの最大数を 4 に設定しています。Groovy
android { ... dexOptions { maxProcessCount = 4 // this is the default value } }
Kotlin
android { ... dexOptions { maxProcessCount = 4 // this is the default value } }
- pre-dex をサポートし依存関係の re-dex を減らす、試験運用版のコード圧縮ツールを追加しました。このような機能は ProGuard ではサポートされていません。これにより、デバッグビルド バリアントのビルド速度が改善されます。試験運用版圧縮ツールは最適化と難読化をサポートしていないため、リリースビルドでは Proguard を有効にする必要があります。デバッグビルドで試験運用版圧縮ツールを有効にするには、モジュール レベルの
build.gradle
ファイルに次のコードを追加します。Groovy
android { ... buildTypes { debug { minifyEnabled true useProguard false } release { minifyEnabled true useProguard true // this is a default setting } } }
Kotlin
android { ... buildTypes { getByName("debug") { minifyEnabled = true useProguard = false } getByName("release") { minifyEnabled = true useProguard = true // this is a default setting } } }
- ロギングのサポートを追加し、リソース圧縮ツールのパフォーマンスを改善しました。
リソース圧縮ツールは、すべての動作を Proguard ログファイルと同じフォルダにある
resources.txt
ファイルに記録するようになりました。
- 変更された動作:
-
minSdkVersion
が 18 以上に設定されている場合、APK 署名は SHA256 を使用します。- DSA キーと ECDSA キーで、APK パッケージに署名できるようになりました。
注: Android キーストア プロバイダは、Android 6.0(API レベル 23)以降の DSA キーをサポートしなくなりました。
- 修正された問題:
-
- テスト設定とメインのビルド設定の両方で AAR 依存関係が重複する問題を修正しました。