Android Gradle プラグイン 8.2.0(2023 年 11 月)

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

互換性

Android Gradle プラグイン 8.2 でサポートされている最大 API レベルは API レベル 34 です。その他の互換性情報は次のとおりです。

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

JDK パスを指定する新しいマクロ

#GRADLE_LOCAL_JAVA_HOME は、JDK パスの指定に使用できる新しいマクロです。これにより、プロジェクトの Gradle デーモン(バックグラウンド プロセス)の実行に使用する Java ホームパスをより安全かつ簡単に指定できます。パスの選択は、.gradle/config.properties ファイルの java.home フィールドに格納されます。このフィールドは、Android Studio の Gradle JDK 設定([File](macOS では [Android Studio]> [Settings] > [Build, Execution, Deployment] > [Build Tools] > [Gradle])で設定します。

新しいプロジェクトはデフォルトで #GRADLE_LOCAL_JAVA_HOME を使用します。#JAVA_HOME などのマクロをすでに使用している場合を除き、同期が正常に完了すると、既存のプロジェクトは自動的に新しいマクロに移行されます。

新しいマクロの主なメリットは次のとおりです。

  • 最初にプロジェクトを開かなくても、JDK パスを手動で変更して、同期をトリガーできます。
  • Gradle JDK の選択に関する信頼できる唯一の情報源があるため、互換性のない Gradle およびプロジェクト JDK バージョンに関連するエラーが少なくなります。

修正された問題

Android Gradle プラグイン 8.2.0

修正された問題
Android Gradle プラグイン
カスタム ソースタイプでマルチフレーバーのソースセットを作成する必要がある
SDK バージョン チェックが SDK 拡張機能のユーザーに対応しない
DependenciesInfoBuilder には API の更新とドキュメントが必要
ネストのメンバーがないことが原因で Java 11 ターゲットでの DexingNoClasspathTransform (minSdk >= 24) が失敗する
Groovy に記載されているとおりに DslExtension.Builder.extendProjectWith() が機能しない
kotlin.Pair を使用しない VariantSelector.withFlavor API を追加
「proguard.txt」が変更されたため、AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) にキャッシュミスがある
アプリのマージ マニフェストに依存関係の extractNativeLibs 属性と useEmbeddedDex 属性が含まれている
build-tools 33.0.0 で AIDL が失敗する
AGP: AIDL ツールとフレームワークの AIDL ファイルへのパスを公開 API として公開している
リクエスト: IDE が「PermittedSubclasses が ASM9 を要求する」問題の修正を提供できるようにする
AGP のコンパイル時にバイトコード 17 をターゲットにする
VariantManager.getModifiedName を削除
AndroidTest.packaging.jniLibs.keepDebugSymbols が androidTest のパッケージ化に影響しない
GMD インストルメンテーション テストのタスクがハングし、再試行しても失敗する
agp 8.1.0 の generateLocaleConfig は非決定的な順序を使用するため、再現可能なビルドができない
ProcessApplicationManifest.navigationJsons に絶対パスのファイルがある
AnalyticsService の作成後に AnalyticsConfiguratorService を介して GradleBuildProject.Builder にアクセスできない
AndroidTest.packaging.jniLibs.keepDebugSymbols が androidTest のパッケージ化に影響しない
カラー値が不正な場合でもコンパイルが可能
VariantBuilder の「ReplaceWith」が正しくない
.gradle/.android/analytics.settings が原因で Gradle 8.1 で構成キャッシュが壊れる
非推奨のメッセージで「ReplaceWith」が使用されない
デフォルトの NDK バージョンを取得する方法を公開
Android Gradle プラグインを実行するには Java 17 が必要です。
ASM 変換と toAppend() に互換性がない
KMP プロジェクトで Gradle を介して K2 UAST で lint を実行したときの LintErrors を修正
バリアント レベルの missingDimensionStrategy をサポート、場合によってはビルドタイプ / フレーバーの matchingFallback をサポート
Android Studio Giraffe で「android.injected.studio.version」を削除
AndroidXDependencyCheck を無効にする機能を追加
agp 8.1.0 の generateLocaleConfig は非決定的な順序を使用するため、再現可能なビルドができない
R8 / D8 バージョンの要件を AAR メタデータでアドバタイズする(例: 要件を満たしていない coreLibraryDesugaring や新しい API の場合など)
同期警告: 「AnalyticsService の作成後は AnalyticsConfiguratorService 経由で GradleBuildProject.Builder にアクセスできないようにする必要があります」
Gradle 8.2 マイルストーンまたは RC への更新
「java.lang.Comparable」にアクセスできない
Android ライブラリ モジュールで androidResources を利用できない
AGP 8.0.2 から 8.1.0 への更新後にタスク ':app:mergeReleaseClasses' の実行が失敗する
.gradle/.android/analytics.settings が原因で Gradle 8.1 で構成キャッシュが壊れる
[AGP 8.1.0] splits.abi.isEnable と testOptions.unitTests.isIncludeAndroidResources の両方が true の場合、「Unable to find manifest output」というエラーで ./gradlew テストが失敗する
Android Studio Giraffe が AGP 8.1 で versionCodeOverride を遵守しない
インストルメンテーション テストの実行後に AGP 8.1.0 がアプリをアンインストールする(7.4.2 はアンインストールしない)
APK を変換すると ListingFileRedirectTask でエラーが発生する
Hedgehog 回帰: 実行ボタンが数秒ほど遅延する(仕様の作成中)
Dexer(D8)
min-api 34 以降での dex 変換時にネイティブ レコードとシール クラスを有効にする
lint
インスタンス化された lint チェックで AppComponentFactory が正しく処理されない
lint 8.2.0 アルファ版では引き続き、Kotlin でのトップレベルの関数のインポートがサポートされない
lint ベースラインに行番号と列番号を表示しないオプションを追加
lint ベースラインに行番号と列番号を表示しないオプションを追加
lint テストは Java 17 言語機能をサポートしない
Bumblebee 2021.1.1 パッチ 1 で、commons-io の古いバージョン(20030203.000550)が 2.11.0 より新しいとみなされる
lint 8.2.0 アルファ版では引き続き、Kotlin でのトップレベルの関数のインポートがサポートされない
Bumblebee 2021.1.1 パッチ 1 で、commons-io の古いバージョン(20030203.000550)が 2.11.0 より新しいとみなされる
Android Studio で、指定されたバージョンが古いものとして誤ってマークされる
K2 UAST を使用する場合、lint で UseValueOf の問題が無視される
Android lint によって報告された別のプロジェクトからの予期しない問題
Android lint が KMP ライブラリで「property 'variantInputs.name' doesn't have a specified value」というエラーが表示されて失敗する
lint の統合
testImplementation 依存関係からの DuplicatePlatformClasses lint エラー
圧縮ツール(R8)
java.lang.VerifyError: 検証ツールがクラスを拒否
Apache POI ライブラリを使用している場合にビルドが :minifyReleaseWithR8 で先に進まなくなる
null チェックが削除された場合、Kotlin 1.9 で Kotlin ラムダが R8 によって破棄される

Android Gradle プラグイン 8.2.1

修正された問題
Android Gradle プラグイン
アーティファクト変換によってすでに dex 変換されているサブプロジェクトのクラスに対して dex 変換タスクを実行しない
Android Gradle プラグインが JavaVersion.VERSION_11 と OpenJDK 21 ea で失敗する
Dexer(D8)
Android U の desugar レコード
圧縮ツール(R8)
R8 が破損した dex を生成し、実行時にクラスキャスト例外が発生する
R8 によりインターフェースが変更されてアクセス不能なインターフェースになる
AGP 8.2.0 で R8 Flurry SDK がクラッシュする
Android - R8 が原因で LinearLayoutManager のサブクラスがクラッシュする
再パッケージ化がオンになっており、圧縮、難読化、最適化がオフになっている場合に、R8 で ClassCastException が発生する
R8 が BridgeAnalyzer.analyzeMethod から先に進まない
R8 v8.2.33、アップグレード後に「java.lang.VerifyError: Bad type on operand stack」ランタイム クラッシュが発生する

Android Gradle プラグイン 8.2.2

修正された問題
Android Gradle プラグイン
AGP 8.2.0 で JaCoCo バージョンを設定できない
Dexer(D8)
[脱糖ライブラリ] 脱糖ライブラリ バージョン 2.1 が R8 の以前のバージョンと互換性がない
D8 のみでも最適化が実行されるか?
圧縮ツール(R8)
[R8 8.3.21] R8 8.3.21 は R8 8.1.56 より 1.57 MB 大きい
class.getInterfaces() が空を返す