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
SDK Build Tools 30.0.3 30.0.3
NDK なし 21.4.7075529
JDK 11 11

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 ブロックに行を追加して、公開モジュールを参照する必要があります。次に例を示します。
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 つの STL が必要です。したがって、消費モジュールと公開モジュールの両方で C++ 共有 STL を使用できます。
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

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

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 ファイルは変更されていません。プロジェクト内のすべてのモジュールに適用されるビルド構成、または Gradle 自体に適用されるリポジトリと依存関係を定義するには、トップレベルの build.gradle ファイルと settings.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 リポジトリへのパブリケーションをカスタマイズできます。また、以前のバージョンと異なり、デフォルトではコンポーネントが作成されないため、不要な作業が回避されます。詳細については、公開コードサンプルをご覧ください。

Javadoc JAR の公開

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

ソース JAR の公開

AGP 7.1.0 以降では、ライブラリ プロジェクト用の AAR に加え、Java および Kotlin ソースの JAR ファイルを公開できます。ソースは、POM ファイルと Gradle Module Metadata{:.external} ファイルに追加されます。この機能を有効にするには、singleVariant または multipleVariants の publish ブロックに 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 をご覧ください。