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

JCenter リポジトリは、2021 年 3 月 31 日に読み取り専用になりました。詳細については、JCenter サービスの更新をご覧ください。

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.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 - 3.5
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 以降
4.2.0 以降6.7.1 以降
7.07.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 プロジェクトの場合、次のように checkDependenciestrue に設定し、./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 つあります。

  1. JVM と欠落しているクラスをターゲットとするライブラリが、上の例のように JVM ライブラリ タイプである。

  2. いずれかの依存関係にコンパイル時のみの 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.propertiesandroid.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 v3APK 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 では CMakendk-build を使用しているネイティブ ビルドからのメッセージがフィルタされ、C / C++ コンパイラ出力のみがデフォルトで表示されます。以前は、ビルドされるファイルごとに出力行が生成されていたため、大量の情報メッセージが出力されていました。

ネイティブ出力全体を表示するには、新しい Gradle プロパティ android.native.buildOutputverbose に設定します。

このプロパティは、gradle.properties ファイルまたはコマンドラインから設定できます。

gradle.properties
android.native.buildOutput=verbose

コマンドライン
-Pandroid.native.buildOutput=verbose

このプロパティのデフォルト値は quiet です。

gradle.properties ファイルでの動作の変更

AGP 4.2 以降では、サブプロジェクトから Gradle プロパティをオーバーライドできなくなりました。つまり、ルート プロジェクトではなくサブプロジェクト内の gradle.properties ファイルでプロパティを宣言すると、無視されます。

たとえば以前のリリースでは、AGP は projectDir/gradle.propertiesprojectDir/app/gradle.propertiesprojectDir/library/gradle.properties などから値を読み取っていました。アプリ モジュールでは、同じ Gradle プロパティが projectDir/gradle.propertiesprojectDir/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 コンパイル オプション coreLibraryDesugaringEnabledisCoreLibraryDesugaringEnabled に変更されました。

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

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

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

アプリケーション モジュールについては変更がないため、DSL で versionCodeversionName に値を割り当てることができます。その値はアプリのマニフェストや 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 プラグインには、次のものが必要です。

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 ファイルに以下を記述します。

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

Feature on Feature 依存関係

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

動作の変更

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

v1 / v2 署名設定の更新

signingConfig ブロックのアプリ署名設定の動作が次のように変更されました。

v1 署名
  • v1SigningEnabled が明示的に有効にされている場合、AGP は v1 アプリ署名を行います。
  • v1SigningEnabled がユーザーによって明示的に無効にされている場合、v1 アプリ署名は行われません。
  • ユーザーが v1 署名を明示的に有効にしていない場合、minSdktargetSdk に基づいて自動的に無効にできます。
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.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 ファイルに設定されているその他のディレクトリにライブラリが存在する場合もあります。

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

3.6.4(2020 年 7 月)

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

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

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

    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 の概要をご覧ください。

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

    詳細については、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 をビルドする場合、プラグインで、mipsmips64armeabi の各 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 の新しい依存関係コンフィグレーション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 に設定されます。これはテストを行う標準的な方法であり、デバイス上のオーケストレーションは無効になります。

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 を使用します。詳細については、Gradle リリースノートをご覧ください。
  • ビルド キャッシュ: プロジェクトをビルドするときに Android プラグインが生成する特定の出力(非パッケージ化 AAR、事前 DEX 変換済みのリモート依存関係など)を保存します。キャッシュされたファイルは、ビルドシステムが以降のビルドを行う際に再利用できるため、再生成の手間が省け、クリーンビルドの時間が大幅に短縮されます。Android プラグイン 2.3.0 以降を使用しているプロジェクトでは、デフォルトでビルド キャッシュが使用されます。詳細については、ビルド キャッシュによるクリーンビルドの高速化をご覧ください。
変更内容:

2.2.0(2016 年 9 月)

依存関係:
新規:
  • パフォーマンスの改善と新機能が含まれる 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 からデバイスのファイル システムにネイティブ ライブラリをコピーできなくなり、アプリの差分アップデートを小さくできるというメリットもあります。
  • プロダクト フレーバーに versionNameSuffixapplicationIdSuffix を指定できるようになりました(問題 59614)。
変更内容:
  • getDefaultProguardFile は、Android Plugin for Gradle が提供するデフォルトの ProGuard ファイルを返すようになり、Android SDK のファイルを使用しなくなりました。
  • Jack コンパイラのパフォーマンスと機能を改善しました。
    • testCoverageEnabledtrue に設定すると、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 リリースノートをご覧ください。

依存関係:
新規:
  • 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 以上に設定されたプロジェクトでは、この機能がデフォルトで有効になります。そのためには、プロジェクトの gradle.properties ファイルに次の行を追加します。

    ```none org.gradle.jvmargs = -Xmx2048m ```

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

    ```none org.gradle.jvmargs = -Xmx3072m ```

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

    Groovy

    android {
      ...
      dexOptions {
          dexInProcess false
      }
    }
    

    Kotlin

    android {
      ...
      dexOptions {
          dexInProcess = false
      }
    }
    

2.0.0(2016 年 4 月)

依存関係:
新規:
  • バイトコード インジェクションをサポートし、エミュレータや実機で実行中のアプリにコードとリソースのアップデートをプッシュすることで、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 ファイルに記録するようになりました。
変更された動作:
修正された問題:
  • テスト設定とメインのビルド設定の両方で AAR 依存関係が重複する問題を修正しました。

過去のリリース