Android Gradle プラグイン 4.2.0(2021 年 3 月)

互換性

最小バージョン デフォルトのバージョン 備考
Gradle 6.7.1 なし 詳細については、Gradle のアップデートをご覧ください。
SDK Build Tools 30.0.2 30.0.2 SDK Build Tools をインストールまたは設定します。
NDK なし 21.4.7075529 別のバージョンの NDK をインストールまたは設定します。

新機能

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

Java 言語バージョン 8(デフォルト)

バージョン 4.2 以降、AGP はデフォルトで Java 8 言語レベルを使用します。 Java 8 では、ラムダ式、メソッド参照、静的インターフェース メソッドなど、多くの新しい言語機能にアクセスできます。サポートされている機能の一覧については、Java 8 のドキュメントをご覧ください。

以前の動作を維持するには、モジュール レベルの build.gradle.kts ファイルまたは build.gradle ファイルで Java 7 を明示的に指定します。

// 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"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

新しい JVM リソース コンパイラ

Android Gradle プラグイン 4.2 ツールの新しい JVM リソース コンパイラは、AAPT2 リソース コンパイラの一部を置き換えるもので、特に Windows マシンでビルド パフォーマンスを向上させる可能性があります。新しい JVM リソース コンパイラはデフォルトで有効になっています。

v3 と v4 の署名のサポート

Android Gradle プラグイン 4.2 で、APK v3 と APK v4 の署名形式がサポートされるようになりました。ビルドでこれらの形式の一方または両方を有効にするには、モジュール レベルの build.gradle ファイルまたは build.gradle.kts ファイルに次のプロパティを追加します。

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// 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 false
            enableV2Signing true
        }
    }
}

新しい Gradle プロパティ: android.native.buildOutput

ビルド出力の煩雑さを軽減するため、AGP 4.2 では、CMake と ndk-build を使用する C/C++ ビルドからのメッセージがフィルタされ、デフォルトでは C/C++ コンパイラの出力のみが表示されます。以前は、ビルドされたファイルごとに 1 行の出力が生成され、大量の情報メッセージが生成されていました。

C/C++ 出力の全体を表示する場合は、新しい Gradle プロパティ android.native.buildOutput を verbose に設定します。

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

gradle.properties
android.native.buildOutput=verbose

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

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

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

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

たとえば、以前のリリースでは、AGP は <var>projectDir</var>/gradle.properties、<var>projectDir</var>/app/gradle.properties、<var>projectDir</var>/library/gradle.properties などから値を読み取っていました。アプリ モジュールの場合、同じ Gradle プロパティが <var>projectDir</var>/gradle.properties と <var>projectDir</var>/app/gradle.properties の両方に存在すると、<var>projectDir</var>/app/gradle.properties の値が優先されていました。

AGP 4.2 では、この動作が変更され、AGP はサブプロジェクト(<var>projectDir</var>/app/gradle.properties など)の 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 は、[Project Structure] ダイアログで変更できます。この設定を変更すると、Gradle の実行に使用される JDK のみが変更され、Studio 自体の実行に使用される JDK は変更されません。

Studio と Android Gradle プラグイン(AGP)の互換性

Android Studio 4.2 では、AGP 3.1 以降を使用するプロジェクトを開くことができます。ただし、AGP が Gradle 4.8.1 以降を実行している必要があります。Gradle の互換性について詳しくは、Gradle を更新するをご覧ください。

Gradle ビルドを JDK 11 用に最適化する

JDK 11 へのこのアップデートは、JVM ガベージ コレクタのデフォルト構成に影響します。JDK 8 では並列ガベージ コレクタが使用されますが、JDK 11 では G1 ガベージ コレクタが使用されるためです。

ビルドのパフォーマンスを改善するには、並列ガベージ コレクタを使用して Gradle ビルドをテストすることをおすすめします。gradle.properties で次のように設定します。

org.gradle.jvmargs=-XX:+UseParallelGC

このフィールドにすでに他のオプションが設定されている場合は、新しいオプションを追加します。

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

さまざまな構成でビルド速度を測定するには、ビルドのプロファイリングを行うをご覧ください。

minSdk が 28 以上の場合、APK 内の DEX ファイルは圧縮されません。

minSdk が 28 以上の場合、AGP はデフォルトで DEX ファイルを圧縮せずに APK にパッケージ化するようになりました。これにより、APK のサイズは増加しますが、デバイス上のインストール サイズは小さくなり、ダウンロード サイズはほぼ同じになります。

AGP で圧縮された DEX ファイルをパッケージ化するには、build.gradle ファイルに次の行を追加します。

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

DSL を使用して圧縮 C/C++ ライブラリをパッケージ化する

C/C++ ライブラリは、圧縮せずにパッケージ化することをおすすめします。これにより、アプリのインストール サイズとダウンロード サイズが小さくなり、ユーザーのアプリ読み込み時間が短縮されます。ただし、アプリのビルド時に Android Gradle プラグインで圧縮 C/C++ ライブラリをパッケージ化する場合は、アプリの build.gradle ファイルで useLegacyPackaging を true に設定します。

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

フラグ useLegacyPackaging は、マニフェスト属性 extractNativeLibs に代わるものです。詳細については、リリースノートの非圧縮ネイティブ ライブラリのパッケージ化(デフォルト)をご覧ください。