Android Gradle プラグイン 7.1.0(2022 年 1 月)

Android Gradle プラグイン 7.1.0 はメジャー リリースで、さまざまな新機能や改善措置が組み込まれています。

7.1.3(2022 年 4 月)

このマイナー アップデートには、次のバグ修正が含まれています。

  • R8 によって重複クラスの問題が報告された

このリリースに含まれるバグ修正の一覧については、 Android Studio Bumblebee パッチ 3 のブログ投稿をご覧ください。

7.1.2(2022 年 2 月)

このマイナー アップデートには、次のバグ修正が含まれています。

  • Android Gradle プラグイン 7.1.0-rc01 が単体テスト中に ASM バイトコード変換を実行できない
  • Gradle の同期が「Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'」というエラーで失敗する
  • Android Gradle プラグイン 7.0.0 の Groovy DSL から一部の新しい DSL ブロックを使用できない
  • AGP 7.1 の新しい Publishing API: 作成された javadoc jar が署名されない
  • ClassesDataSourceCache で最新の Asm バージョンを使用
  • Android Studio BumbleBee で最新の変更がデプロイされないことがある

このリリースに含まれるバグ修正の一覧については、 Android Studio Bumblebee パッチ 2 のブログ投稿をご覧ください。

7.1.1(2022 年 2 月)

このマイナー アップデートは、Android Studio Bumblebee パッチ 1 のリリースに対応しています。

このリリースに含まれるバグ修正の一覧については、 Android Studio Bumblebee パッチ 1 のブログ投稿をご覧ください。

互換性

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

lint 分析タスクがキャッシュ可能になりました

AndroidLintAnalysisTaskGradle ビルド キャッシュと互換性を持つようになりました。gradle.properties ファイルで org.gradle.caching=true を設定してビルド キャッシュを有効にすると、lint 分析タスクは可能であればビルド キャッシュから出力を取得します。

Android Gradle プラグインで lint を実行すると、lint 分析タスクが最大のボトルネックになることがよくあります。したがって、ビルド キャッシュを有効にすると、多くの状況で lint の実行時のビルド速度が改善されます。たとえば、マルチモジュール プロジェクトを使用している場合、ビルド ディレクトリをクリーンアップしてから CI サーバーで lint を実行すると、パフォーマンスが大幅に向上します。

C/C++ モジュールが同じプロジェクト内の他の C/C++ モジュールを参照できるようになりました

C/C++ コードを含む Gradle Android モジュールを、別の Gradle モジュールのヘッダー ファイルとライブラリ コードを参照するようにセットアップできるようになりました。Prefab プロトコルを使用して、Gradle モジュール間でヘッダーとライブラリをやり取りできます。

要件

  • 消費モジュールは、ndk-build ではなく CMake であることが必要です。ndk-build をサポートするには、将来の NDK の更新が必要です。公開モジュールは、CMake でも ndk-build でも構いません。

  • 消費モジュールは、build.gradle ファイルで prefab を有効にする必要があります。

android {
  buildFeatures {
    prefab true
  }
}
  • 公開モジュールは、build.gradle ファイルで prefabPublishing を有効にする必要があります。
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • 消費モジュールは、build.gradle ファイルの dependencies ブロックに行を 1 つ追加して、公開モジュールを参照する必要があります。例:
dependencies {
  implementation project(':mylibrary')
}
  • 公開モジュールは、prefab セクションを使用してパッケージを公開する必要があります。例:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • 消費モジュールの CMakeLists.txt ファイルでは、find_package() を使用して、生成モジュールが公開するパッケージを見つけることができます。例:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
  • 1 つのアプリに 1 つの STL が存在することが必要です。たとえば、消費モジュールと公開モジュールの両方で C++ 共有 STL を使用できます。
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

AGP でネイティブ AAR コンシューマおよびプロデューサを構成する方法の詳細については、Android Gradle プラグインのネイティブ依存関係をご覧ください。

settings.gradle ファイルのリポジトリ設定

Android Studio Bumblebee で新しいプロジェクトを作成すると、トップレベルの build.gradle ファイルに plugins ブロックが追加され、その後にビルド ディレクトリをクリーンアップするコードが追加されます。

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

以前トップレベルの build.gradle ファイルに含まれていたリポジトリ設定は、settings.gradle ファイルに含まれるようになりました。

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

モジュール レベルの build.gradle ファイルは変更されていません。そのため、トップレベルの build.gradle ファイルと settings.gradle ファイルを使用して、プロジェクト内のすべてのモジュールに適用されるビルド構成、または Gradle 自体に適用されるリポジトリと依存関係を定義します。モジュール レベルの build.gradle ファイルを使用して、プロジェクト内の特定のモジュールに固有のビルド構成を定義します。

リソース圧縮ツールの改善

Android Studio Bumblebee では、アプリのサイズを削減するのに役立つリソース圧縮ツールが改善されました。

動的機能を持つアプリのサポート

Android Gradle プラグイン 7.1.0-alpha09 では、Android リソース圧縮ツールのデフォルト実装が更新されました。新しい実装は、動的機能を持つアプリの圧縮をサポートします。

アプリのサイズをさらに削減(試験運用版)

新しいリソース圧縮ツールを実装すると、リソース テーブルを変更して、使用されていない値のリソースと、使用されていないファイル リソースへの参照を削除することにより、圧縮されたアプリのサイズをさらに削減できます。新しいリソース圧縮ツールは、使用されていないファイル リソースを完全に削除し、アプリのサイズをさらに小さくすることができます。この動作はまだデフォルトでは有効になっていませんが、試験運用版のオプション android.experimental.enableNewResourceShrinker.preciseShrinking=true をプロジェクトの gradle.properties ファイルに追加することにより、オプトインして試すことができます。

新しいリソース圧縮ツールまたは試験運用版のフラグに問題が見つかったときは、報告をお願いいたします。問題を診断するため、または一時的に回避するために以前の実装に戻すには、android.enableNewResourceShrinker=false をプロジェクトの gradle.properties に追加します。新しい圧縮ツールは、使用されていないファイルベースのリソースを、以前のリソース圧縮ツールとは若干異なる最小限のファイルに置き換えますが、このことが実行時に影響を与えるとは考えられていません。

古い実装は、Android Gradle プラグイン 8.0.0 で削除される予定です。

ビルド バリアントの公開

Android Gradle プラグイン 7.1.0 以降では、どのビルド バリアントを Apache Maven リポジトリに公開するかを構成できます。AGP は、新しい公開 DSL に基づいて、単一または複数のビルド バリアントを持つコンポーネントを作成します。このコンポーネントを使用して、Maven リポジトリへの公開をカスタマイズできます。また、以前のバージョンと異なり、デフォルトではコンポーネントが作成されないため、不要な作業が回避されます。詳細については、publishing のコードサンプルをご覧ください。

Javadoc JAR の公開

AGP 7.1.0 以降では、ライブラリ プロジェクト用の AAR に加え、Java および Kotlin ソースから Javadoc を生成して、Javadoc JAR ファイルを公開できます。Javadoc は、POM ファイルと Gradle Module Metadata{:.external} ファイルに追加されます。この機能を有効にするには、singleVariant または multipleVariants の publishing ブロックに withJavadocJar() を追加します。詳細については、PublishingOptions のコードサンプルをご覧ください。

ソース JAR の公開

AGP 7.1.0 以降では、ライブラリ プロジェクト用の AAR に加え、Java および Kotlin ソースの JAR ファイルを公開できます。ソースは、POM ファイルと Gradle Module Metadata{:.external} ファイルに追加されます。この機能を有効にするには、singleVariant または multipleVariants の publishing ブロックに withSourcesJar() を追加します。詳細については、PublishingOptions のコードサンプルをご覧ください。

lint ブロックのセマンティックの変更

問題の特定の重大度(enabledisable/ignoreinformationalwarningerrorfatal)をオーバーライドする lint メソッドは、すべて構成の順序を尊重するようになりました。たとえば、finalizeDsl() で問題を fatal に設定した場合、メイン DSL での問題の無効化よりも優先されます。詳細については、lint{} ブロックのリファレンス ドキュメントと、Android ビルドフローと拡張ポイントをご覧ください。

Navigation Safe Args Gradle プラグインが依存している AGP API が削除されました。AGP 7.1 は、Navigation Safe Args バージョン 2.4.0-rc1 または 2.4.0 では機能しませんが、バージョン 2.5.0-alpha01 および 2.4.1 では機能します。当面の回避策として、Navigation Safe Args のスナップショット ビルドである Navigation 2.5.0-SNAPSHOT で AGP 7.1 を使用できます。このスナップショット ビルドを使用するには、ビルド ID #8054565 のスナップショット使用手順を参照してください。

また、Navigation Safe Args バージョン 2.4.1 および 2.5.0 は、AGP 4.2 では機能しなくなります。これらのバージョンの Safe Args を使用するには、AGP 7.0 以降を使用する必要があります。

自動コンポーネント作成が無効になる

AGP 8.0 以降、デフォルトで自動コンポーネント作成が無効になります。現在 AGP 7.1 は、個々のビルド バリアントと同じ名前を持つコンポーネントと、すべてのビルド バリアントを含む all コンポーネントを自動的に作成します。この自動コンポーネント作成は無効になる予定です。新しい動作に移行するには、android.disableAutomaticComponentCreation true. に設定して、自動コンポーネント作成を手動で無効にする必要があります。詳細については、Maven Publish プラグインを使用するをご覧ください。

Firebase Performance Monitoring の互換性

AGP 7.1 は、Firebase Performance Monitoring Gradle プラグイン バージョン 1.4.0 以下と互換性がありません。AGP Upgrade Assistant は、プラグインを自動的にバージョン 1.4.1 に更新しません。したがって、firebase-perf を使用している場合、AGP を 7.1 にアップグレードするには、このアップグレードを手動で行う必要があります。

既知の問題

このセクションでは、Android Gradle プラグイン 7.1.0 に存在する既知の問題について説明します。

Hilt プラグインを使用するアプリ プロジェクトの単体テストに関する問題

単体テストのクラスパスに、インストルメント化されていないアプリクラスが含まれています。したがって、Hilt は、単体テストの実行時に依存関係インジェクションを処理するアプリクラスをインストルメント化しません。

この問題は 7.1.1 リリースで修正される予定です。問題 #213534628 をご覧ください。