Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Android Gradle プラグインのリリースノート

Android Studio ビルドシステムは Gradle をベースにしており、Android Gradle プラグインは Android アプリのビルドに固有の機能を追加します。Android プラグインは通常、Android Studio によりロックステップでアップデートされますが、プラグイン(および他の Gradle システム)は Android Studio から独立して実行でき、個別にアップデートできます。

このページでは、Gradle ツールを最新の状態に保つ方法と、最近のアップデート内容について説明します。

Gradle で Android ビルドを設定する方法の詳細については、下記のページをご覧ください。

Gradle ビルドシステムの詳細については、Gradle のユーザーガイドをご覧ください。

Android Gradle プラグインのアップデート

Android Studio をアップデートすると、Android Gradle プラグインを利用可能な最新バージョンに自動的にアップデートするように促すメッセージが表示されることがあります。アップデートに同意するか、プロジェクトのビルド要件に基づいて手動でバージョンを指定するかを選択できます。

プラグインのバージョンは、Android Studio の [File] > [Project Structure] > [Project] メニュー、または最上位の build.gradle ファイルで指定できます。プラグインのバージョンは、その Android Studio プロジェクトでビルドされたすべてのモジュールに適用されます。次の例では、build.gradle ファイルからプラグインをバージョン 4.0.0 に設定しています。

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.0.0'
    }
}

注意: バージョン番号には、'com.android.tools.build:gradle:2.+' などの動的な依存関係を使用しないでください。この機能を使用すると、予期しないバージョンのアップデートが起こり、バージョンの相違を解決するのが難しくなる可能性があります。

指定したプラグイン バージョンがダウンロードされていない場合、次回のプロジェクトのビルド時に Gradle によってダウンロードされます。または、Android Studio のメニューバーから [Tools] > [Android] > [Sync Project with Gradle Files] をクリックします。

Gradle のアップデート

Android Studio をアップデートすると、Gradle を利用可能な最新バージョンにアップデートするように促すメッセージが表示されることもあります。アップデートに同意するか、プロジェクトのビルド要件に基づいて手動でバージョンを指定するかを選択できます。

次の表に、Android Gradle プラグインの各バージョンに必要な Gradle のバージョンを示します。最高のパフォーマンスを得るには、Gradle とプラグインの両方について、最新バージョンを使用する必要があります。

プラグインのバージョン必要な Gradle のバージョン
1.0.0 - 1.1.32.2.1 - 2.3
1.2.0 - 1.3.12.2.1 - 2.9
1.5.02.2.1 - 2.13
2.0.0 - 2.1.22.10 - 2.13
2.1.3 - 2.2.32.14.1 以降
2.3.0 以降3.3 以降
3.0.0 以降4.1 以降
3.1.0 以降4.4 以降
3.2.0 - 3.2.14.6 以降
3.3.0 - 3.3.34.10.1 以降
3.4.0 - 3.4.35.1.1 以降
3.5.0 - 3.5.45.4.1 以降
3.6.0 - 3.6.45.6.4 以降
4.0.0 以降6.1.1 以降
4.1.0 以降6.5 以降

Gradle のバージョンは、Android Studio の [File] > [Project Structure] > [Project] メニューで、または gradle/wrapper/gradle-wrapper.properties ファイルの Gradle 配布リファレンスを編集することで指定できます。次の例では、gradle-wrapper.properties ファイルで Gradle のバージョンを 6.1.1 に設定しています。

...
distributionUrl = https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
...

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 ブロックに次の行を追加します。

buildFeatures {
    prefabPublishing true
}

prefab {
    mylibrary {
      headers "src/main/cpp/mylibrary/include"
    }

    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 ライブラリとアプリケーションを圧縮するをご覧ください。

動作の変更

ライブラリ プロジェクトの BuildConfig クラスからバージョン プロパティが削除された

ライブラリ プロジェクトの場合のみ、生成される BuildConfig クラスから BuildConfig.VERSION_NAME および BuildConfig.VERSION_CODE プロパティが削除されます。これは、そうした静的な値がアプリケーションのバージョン コードと名前の最終的な値を反映しておらず、誤解を招いていたためです。またそれらの値は、マニフェストをマージする際に破棄されていました。

Android Gradle プラグインの今後のバージョンでは、ライブラリ用の DSL からも versionName および versionCode プロパティが削除されます。 現時点では、ライブラリのサブプロジェクトから、アプリのバージョン コードとバージョン名に自動的にアクセスする方法はありません。

アプリケーション モジュールについては変更がないため、DSL で versionCodeversionName に値を割り当てることができます。その値はアプリのマニフェストや BuildConfig フィールドに反映されます。

NDK パスを設定する

モジュールの build.gradle ファイルの android.ndkPath プロパティを使用して、ローカルの NDK インストールのパスを設定できます。

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 プラグインには、次のものが必要です。

4.0.1(2020 年 7 月)

このマイナー アップデートでは、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] ウィンドウを開くことができます。

  1. まだアプリのビルドを行っていない場合は、メニューバーから [Build] > [Make Project] を選択してアプリをビルドします。
  2. メニューバーから [View] > [Tool Windows] > [Build] を選択します。
  3. [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.Optionaljava.util.OptionalIntjava.util.OptionalDouble)および上記の API で役立つその他の新しいクラス
  • java.util.concurrent.atomic の追加 API(AtomicIntegerAtomicLongAtomicReference の新しいメソッド)
  • ConcurrentHashMap(Android 5.0 のバグを修正)

上記言語 API のサポートのため、D8 は不足している API の実装を含む単独のライブラリ DEX ファイルをコンパイルし、この実装をアプリに追加します。desugar プロセスはアプリのコードを書き換えて、ランタイム時に代わりにこのライブラリを使用するようにします。

このような言語 API のサポートを有効にするには、モジュールの build.gradle ファイルに以下を記述します。

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'
}

ビルド機能を有効または無効にする新しいオプション

Android Gradle プラグイン 4.0.0 では、ビュー バインディングやデータ バインディングなど、有効または無効にするビルド機能を新しい方法で制御できます。新しい機能が追加されると、デフォルトで無効になります。その場合は、buildFeatures ブロックを使用して、必要な機能のみを有効にできます。これにより、プロジェクトのビルド パフォーマンスを最適化できます。各モジュールのオプションは、モジュール レベルの build.gradle で次のように設定できます。

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 モジュールに依存することが可能です。

Feature on Feature 依存関係

機能モジュール :video は、ベース :app モジュールに依存する機能 :camera に依存します。

つまり、アプリによって機能モジュールのダウンロードがリクエストされると、その機能モジュールに依存する他の機能モジュールもダウンロードされます。アプリの機能モジュールを作成した後、モジュールの build.gradle ファイルで Feature-on-Feature 依存関係を宣言できます。たとえば、:video モジュールで :camera に対する依存関係を宣言する場合、次のようになります。

// 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 ファイルに次の情報を含めることでオプトアウトできます。

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.solibapp.so がリンクされます。詳細については、curl prefab のサンプルをご覧ください。

動作の変更

このバージョンのプラグインを使用する場合、以下のように動作が変更されます。

Android Gradle プラグインから「feature」と「instantapp」を削除

Android Gradle プラグイン 3.6.0 から、Android App Bundle による Instant App のビルドとパッケージ化を行う Dynamic Feature プラグイン(com.android.dynamic-feature)の使用を優先し、Feature プラグイン(com.android.feature)と Instant App プラグイン(com.android.instantapp)のサポートを終了しました。

Android Gradle プラグイン 4.0.0 以降では、サポート終了済みの上記プラグインは完全に削除されています。このため、最新の Android Gradle プラグインを使用するには、Android App Bundle に対応できるように Instant App を移行する必要があります。 Instant App を移行すると、App Bundle のメリットを生かして、アプリのモジュール設計を簡素化できます。

個別アノテーション処理機能を削除

個別アノテーション処理を専用のタスクに分割する機能は削除されました。このオプションは、Java のみのプロジェクトで非増分アノテーション プロセッサが使用されている場合において、増分 Java コンパイルの維持に使用されていました。有効化には gradle.properties ファイルで android.enableSeparateAnnotationProcessingtrue に設定する必要がありましたが、この設定はすでにご利用いただけません。

ビルド パフォーマンスを向上させるには、代わりに増分アノテーション プロセッサを使用するよう移行する必要があります。

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 ファイルに設定されているその他のディレクトリにライブラリが存在する場合もあります。

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']
    }
}

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 プラグインには、次のものが必要です。

3.6.4(2020 年 7 月)

このマイナー アップデートでは、Android 11 でのパッケージの公開設定に関する新しいデフォルト設定と各種機能との互換性が確保されています。

詳細については、4.0.1 リリースノートをご覧ください。

新機能

このバージョンの Android Gradle プラグインには、次の新機能が含まれています。

ビュー バインディング

ビュー バインディングにより、コード内のビューを参照する際にコンパイル時の安全性を実現します。 findViewById() は、自動生成されたバインディング クラス参照に置き換えることができるようになりました。ビュー バインディングを使用するには、各モジュールの build.gradle ファイルに次の行を含めます。

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 トレースを出力できるため、プロジェクトをビルドするのに必要な時間を詳細に把握できます。このビルド アトリビューション ファイルを出力する手順は次のとおりです。

  1. Gradle ビルドを実行するときに、フラグ -Pandroid.enableProfileJson=true を追加します。次に例を示します。

    gradlew assembleDebug -Pandroid.enableProfileJson=true

  2. Chrome ブラウザを開き、検索バーに「chrome://tracing」と入力します。

  3. [Load] ボタンをクリックし、project-root/build/android-profile に移動して、profile-timestamp.json.gz という名前のファイルを探します。

ネイティブ ビルド アトリビューション データがビューアの上部に表示されます。

Chrome のネイティブ ビルド アトリビューション トレース

動作の変更

このバージョンのプラグインを使用する場合、以下のように動作が変更されます。

非圧縮ネイティブ ライブラリのパッケージ化(デフォルト)

アプリをビルドするときに、プラグインによってデフォルトで 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 プラグインには、次のものが必要です。

3.5.4(2020 年 7 月)

このマイナー アップデートでは、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 を追加することで有効にできます。

キャッシュ可能な単体テスト

includeAndroidResourcestrue に設定して単体テストで 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 プラグインには、次のものが必要です。

3.4.3(2020 年 7 月)

このマイナー アップデートでは、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 ライブラリ プロジェクトで両方の依存関係コンフィグレーションを使用しています。

    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 が導入される前のコンパイル プロセスの概要を示しています。

    R8 の導入前、ProGuard は dex 変換および desugar とは別のコンパイル ステップでした。

    現在では、下記の図に示すように、desugar、圧縮、難読化、最適化、dex 変換(D8)のすべてが、R8 によって 1 つのステップで完了します。

    R8 では、desugar、圧縮、難読化、最適化、dex 変換がすべて単一のコンパイル ステップで行われます。

    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 プラグインには、次のものが必要です。

3.3.3(2020 年 7 月)

このマイナー アップデートでは、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 のバージョンを手動設定する必要がなくなりました。

3.2.0(2018 年 9 月)

このバージョンの Android プラグインには、次のものが必要です。

3.2.1(2018 年 10 月)

このアップデートにより、SDK Build Tools のバージョンを指定する必要がなくなりました。Android Gradle プラグインはデフォルトでバージョン 28.0.3 を使用します。

新機能

  • Android App Bundle のビルドのサポート: アプリバンドルは新しいアップロード形式で、アプリのコンパイル済みコードとリソースはすべてここに含まれますが、APK の生成と署名は Google Play ストアで行います。デベロッパー側では複数の APK を生成、署名、管理する必要がなくなり、ユーザー側ではサイズが削減されデバイスに合わせて最適化されたダウンロードを行えます。詳細については、Android App Bundle の概要をご覧ください。

  • アノテーション プロセッサ使用時の増分ビルド速度改善のサポート: AnnotationProcessorOptionsDSL で 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.useAndroidXtrue に設定されている場合のみであり、それ以外の場合はビルドエラーが発生します。

    詳細については、AndroidX の概要をご覧ください。

  • 新しいコード圧縮ツール R8: R8 はコードの圧縮と難読化用の新しいツールで、ProGuard の後継です。R8 のプレビュー版の使用を開始するには、プロジェクトの gradle.properties ファイルに次の行を追加します。

    android.enableR8 = true
    

動作の変更

  • D8 での desugar がデフォルトで有効になりました。
  • AAPT2 は Google の Maven リポジトリに移動しました。AAPT2 を使用するには、下記のように、build.gradle ファイル内で google() 依存関係を指定する必要があります。

    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 を作成する場合、プラグインで、mipsmips64armeabi の各 ABI 用の APK がデフォルトで生成されなくなりました。

    各 ABI をターゲットとする APK を作成するには、NDK r16b 以前を使用して、下記のように build.gradle ファイル内で対象 ABI を指定する必要があります。

    splits {
      abi {
          include 'armeabi', 'mips', 'mips64'
          ...
      }
    }
    
  • Android Instant App 用に設定 APK を作成するとき、デフォルトで言語設定の分割がルートの言語によってグループ化されるようになりました。たとえば、アプリに zh-TW ロケールや zh-CN ロケールのリソースが含まれている場合、Gradle はそれらのリソースを zh 言語設定分割にパッケージ化します。この動作は、次のように include プロパティを使用して独自のグループを定義することで、オーバーライドできます。

    splits {
        language {
            enable true
            // Each string defines a group of locales that
            // Gradle should package together.
            include "in,id",
                    "iw,he",
                    "fil,tl,tgl",
                    "yue,zh,zh-TW,zh-CN"
        }
    }
    
  • Android プラグインのビルド キャッシュが、30 日以上経過したキャッシュ エントリを削除するようになりました。

  • resConfig"auto" を渡しても、APK にパッケージ化する文字列リソースが自動的に選択されなくなりました。引き続き "auto" を使用する場合、プラグインはアプリと依存関係で提供されるすべての文字列リソースをパッケージ化します。そのため、プラグインを APK にパッケージ化する各ロケールを指定する必要があります。

  • ローカル モジュールはアプリのテスト APK に依存できないため、androidTestImplementation の代わりに androidTestApi コンフィグレーションを使用してインストゥルメント化テストに依存関係を追加すると、Gradle は次の警告を発行します。

      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 の新しい依存関係コンフィグレーションimplementationapicompileOnlyruntimeOnly)を使用して、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 に設定されます。これはテストを行う標準的な方法であり、デバイス上のオーケストレーションは無効になります。
android {
  testOptions {
    execution 'ANDROID_TEST_ORCHESTRATOR'
  }
}
  • 新しい androidTestUtil 依存関係コンフィグレーションにより、インストゥルメンテーション テスト(Android Test Orchestrator など)を実行する前に、別のテストヘルパー APK をインストールできるようになりました。
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 をサポートしました。詳細については、単純分割用のビルドの設定をご覧ください。
  • 次のように、外部のネイティブ ビルド プロジェクトの出力ディレクトリを変更できるようになりました。
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 プロジェクトに依存できます。
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 に変換する必要があります。
android {
  buildTypes {
    release {
      // Disables PNG crunching for the release build type.
      crunchPngs 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 を使用します。詳細については、Gradle のリリースノートをご覧ください。
  • ビルド キャッシュ: プロジェクトをビルドするときに Android プラグインが生成する特定の出力(非パッケージ化 AAR、事前 DEX 変換済みのリモート依存関係など)を保存します。キャッシュされたファイルは、ビルドシステムが以降のビルドを行う際に再利用できるため、再生成の手間が省け、クリーンビルドの時間が大幅に短縮されます。Android プラグイン 2.3.0 以降を使用しているプロジェクトでは、デフォルトでビルド キャッシュが使用されます。詳細については、ビルド キャッシュによるクリーンビルドの高速化をご覧ください。
変更内容:

2.2.0(2016 年 9 月)

依存関係:
新規:
  • パフォーマンスの改善と新機能が含まれる Gradle 2.14.1 を使用します。また、Gradle 使用時のローカル権限昇格を可能にするセキュリティ脆弱性を修正しました。詳細については、Gradle リリースノートをご覧ください。
  • Gradle では、externalNativeBuild {} DSL を使用することで、ネイティブ ソースにリンクし、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 ファイルに次のコードを追加します。
    android {
      ...
      signingConfigs {
        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 からデバイスのファイル システムにネイティブ ライブラリをコピーできなくなり、アプリの差分アップデートを小さくできるというメリットもあります。
  • プロダクト フレーバーに versionNameSuffixapplicationIdSuffix を指定できるようになりました(問題 59614)。
変更内容:
  • getDefaultProguardFile は、Android Plugin for Gradle が提供するデフォルトの ProGuard ファイルを返すようになり、Android SDK のファイルを使用しなくなりました。
  • Jack コンパイラのパフォーマンスと機能を改善しました。
    • testCoverageEnabledtrue に設定すると、Jack で Jacoco テスト カバレッジがサポートされるようになりました。
    • アノテーション プロセッサのサポートを改善しました。compile 依存関係など、クラスパス上のアノテーション プロセッサは、ビルドに自動的に適用されます。ビルドでアノテーション プロセッサを指定し、モジュール レベルの build.gradle ファイルで javaCompileOptions.annotationProcessorOptions {} DSL を使用して引数を渡すこともできます。
      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className 'com.example.MyProcessor'
              // Arguments are optional.
              arguments = [ foo : 'bar' ]
            }
          }
        }
      }
      

      コンパイル時にアノテーション プロセッサを適用するが APK に含めないという場合は、annotationProcessor 依存関係スコープを使用します。

      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
      }
      
    • jackOptions.additionalParameters() を使用して Jack に追加のフラグを設定できます。次のコード スニペットでは、jack.incremental パラメータを true に設定しています。
      android {
        defaultConfig {
          ...
          jackOptions {
            enabled true
            additionalParameters("jack.incremental" : true)
          }
        }
      }
      

      設定可能なパラメータのリストについては、コマンドラインから次のコマンドを実行します。

      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 リリースノートをご覧ください。

依存関係:
新規:
  • N Developer Preview、JDK 8、Jack ツールチェーンを使用した Java 8 言語機能のサポートを追加しました。詳細については、N Preview のガイドをご覧ください。

    注: Instant Run は、現段階では Jack と併用できません。そのため、新しいツールチェーンの使用中は無効になります。N Preview 向けに開発していて、サポートされている Java 8 言語機能を使用する場合に限り、Jack を使用する必要があります。

  • 開発中のコンパイル時間を短縮するために、増分 Java コンパイルのデフォルト サポートが追加されました。これは、ソースのうち変更された部分や再コンパイルが必要な部分だけを再コンパイルすることで行われます。この機能を無効にするには、モジュール レベルの build.gradle ファイルに次のコードを追加します。
    android {
      ...
      compileOptions {
        incremental false
      }
    }
    
  • 個々の外部 VM プロセスではなくビルドプロセス内で dex を行う、プロセス内 dex のサポートを追加しました。これにより、増分ビルドが高速化されるだけでなく、フルビルドも高速化されます。Gradle デーモンの最大ヒープサイズが 2,048 MB 以上に設定されたプロジェクトでは、この機能がデフォルトで有効になります。そのためには、プロジェクトの gradle.properties ファイルに次の行を追加します。

    org.gradle.jvmargs = -Xmx2048m
    

    モジュール レベルの build.gradle ファイルで javaMaxHeapSize の値を定義した場合、org.gradle.jvmargsjavaMaxHeapSize + 1,024 MB の値に設定する必要があります。たとえば、javaMaxHeapSize を「2048m」に設定した場合、プロジェクトの gradle.properties ファイルに次の行を追加する必要があります。

    org.gradle.jvmargs = -Xmx3072m
    

    プロセス内 dex を無効にするには、モジュール レベルの build.gradle ファイルに次のコードを追加します。

    android {
      ...
      dexOptions {
          dexInProcess false
      }
    }
    

2.0.0(2016 年 4 月)

依存関係:
新規:
  • バイトコード インジェクションをサポートし、エミュレータや実機で実行中のアプリにコードとリソースのアップデートをプッシュすることで、Instant Run を有効にします。
  • アプリが実行されていない場合についても、増分ビルドのサポートを追加しました。 接続されているデバイスに Android Debug Bridge を介して増分変更をプッシュすることで、フルビルドの時間が改善されます。
  • 同時に生成できるスレーブ dex プロセスの数を制御する maxProcessCount を追加しました。次のコード(モジュール レベルの build.gradle ファイル内)では、同時プロセスの最大数を 4 に設定しています。
    android {
      ...
      dexOptions {
        maxProcessCount = 4 // this is the default value
      }
    }
    
  • pre-dex をサポートし依存関係の re-dex を減らす、試験運用版のコード圧縮ツールを追加しました。このような機能は Proguard ではサポートされていません。これにより、デバッグビルド バリアントのビルド速度が改善されます。試験運用版圧縮ツールは最適化と難読化をサポートしていないため、リリースビルドでは Proguard を有効にする必要があります。デバッグビルドで試験運用版圧縮ツールを有効にするには、モジュール レベルの build.gradle ファイルに次のコードを追加します。
    android {
      ...
      buildTypes {
        debug {
          minifyEnabled true
          useProguard false
        }
        release {
          minifyEnabled true
          useProguard true // this is a default setting
        }
      }
    }
    
  • ロギングのサポートを追加し、リソース圧縮ツールのパフォーマンスを改善しました。 リソース圧縮ツールは、すべての動作を Proguard ログファイルと同じフォルダにある resources.txt ファイルに記録するようになりました。
変更された動作:
修正された問題:
  • テスト設定とメインのビルド設定の両方で AAR 依存関係が重複する問題を修正しました。

過去のリリース