Android Gradle プラグイン 8.3.0(2024 年 2 月)

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

互換性

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

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

Android Gradle プラグイン 8.3 の新機能は次のとおりです。

パッチリリース

Android Studio Iguana と Android Gradle プラグイン 8.3 のパッチリリースを以下に示します。

Android Studio Iguana | 2023.2.1 パッチ 2、AGP 8.3.2(2024 年 4 月)

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

Android Studio Iguana | 2023.2.1 パッチ 1、AGP 8.3.1(2024 年 3 月)

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

Gradle バージョン カタログのサポート

Android Studio は、TOML ベースの Gradle バージョン カタログをサポートしています。この機能を使用すると、1 か所で依存関係を管理し、モジュールやプロジェクト間で依存関係を共有できます。Android Studio で、エディタの候補と [Project Structure] ダイアログとの統合により、バージョン カタログを簡単に構成できるようになりました。Gradle バージョン カタログを設定して構成する方法や、ビルドをバージョン カタログに移行する方法を学習する。

コード補完とナビゲーション

TOML ファイル形式のバージョン カタログを編集する場合や、バージョン カタログからビルドファイルに依存関係を追加する場合、Android Studio ではコード補完機能を使用できます。コード補完を使用するには、Ctrl+Space(macOS では Command+Space)キーを押します。また、Ctrl+b(macOS の場合は Command+b)を押すと、アプリの build.gradle ファイル内の依存関係参照から、バージョン カタログで宣言されている場所にすばやく移動できます。

依存関係を追加する際のコード補完

[Project Structure] ダイアログとの統合

プロジェクトで TOML ファイル形式で定義されたバージョン カタログを使用している場合は、Android Studio の [Project Structure] ダイアログの [Variables] ビュー([File] > [Project Structure] > [Variables])で、そこで定義した変数を編集できます。各バージョン カタログには、そのカタログの変数を一覧表示するプルダウンがあります。変数を編集するには、値をクリックして上書きします。これらの変更を保存すると、TOML ファイルがそれに応じて更新されます。

[Project Structure] ダイアログのバージョン カタログの変数

[Project Structure] ダイアログの [Dependencies] ビュー([File] > [Project Structure] > [Dependencies])で依存関係を更新することもできます。[Project Structure] ダイアログを使用してバージョンを更新するには、編集するモジュールと依存関係に移動し、[Requested Version] フィールドを更新します。これらの変更を保存すると、TOML ファイルが適切に更新されます。依存関係のバージョンが変数を使用して定義されている場合、この方法でバージョンを直接更新すると、変数はハードコードされた値に置き換えられます。また、[Project Structure] ダイアログを使用していても、ビルドファイルから依存関係を削除しても、バージョン カタログから依存関係が削除されることはありません。

[Project Structure] ダイアログのバージョン カタログからの依存関係

既知の問題と制限事項

Android Studio での Gradle バージョン カタログのサポートに関する既知の問題や制限事項は次のとおりです。

  • Kotlin スクリプト ファイルでのプラグイン エイリアス宣言のハイライト表示でエラーが発生する: alias(libs.plugins.example) という形式のプラグイン宣言を追加すると、エディタで libs 部分の下に赤の下線が追加されます。これは Gradle バージョン 8.0 以前の既知の問題であり、Gradle の今後のリリースで解決される予定です。

  • Android Studio は、TOML 形式のバージョン カタログのみをサポートしています。現在、Android Studio のコード補完、ナビゲーション、プロジェクト構造ダイアログのサポートは、TOML ファイル形式で定義されたバージョン カタログでのみ使用できます。ただし、バージョン カタログを settings.gradle ファイルに直接追加し、プロジェクトでその依存関係を使用できます。

  • KTS ビルドファイルのナビゲーションがサポートされていない: Kotlin スクリプトを使用して記述されたビルドファイルでは、Ctrl+クリック(macOS では Command+クリック)を使用してバージョン カタログ内の依存関係定義に移動することはまだサポートされていません。

  • Firebase Assistant は依存関係をビルド スクリプトに直接追加します。Firebase Assistant は、バージョン カタログを介さずに、依存関係をビルド スクリプトに直接追加します。

  • 「使用箇所の検索」機能がサポートされていない: ビルドファイルが KTS か Groovy かにかかわらず、他のビルドファイルでバージョン カタログ変数の使用箇所を検索することはまだサポートされていません。つまり、バージョン カタログ内の変数定義で Ctrl キーを押しながらクリック(macOS では Command キーを押しながらクリック)しても、その変数が使用されるビルドファイルに到達しません。

  • Android Studio の [プロジェクト構造] ダイアログには、ルート gradle フォルダにある複数のカタログ ファイルが表示されますが、コンポジット ビルドのカタログは表示されません。たとえば、2 つのカタログ ファイル(アプリ用と複合ビルド用)がある場合、[Project Structure] ダイアログにはアプリカタログ ファイルのみが表示されます。コンポジット ビルドを使用できますが、その TOML ファイルを直接編集する必要があります。

その他の SDK 分析情報: ポリシーに関する問題

Android Studio では、Google Play SDK Index で Play ポリシー違反が報告されている公開 SDK について、build.gradle.kts ファイルと build.gradle ファイル、[Project Structure] ダイアログで lint 警告が表示されます。Play ポリシーに違反している依存関係は更新する必要があります。違反があると、今後 Google Play Console に公開できなくなる可能性があります。ポリシー違反の警告は、Android Studio によって表示される古いバージョンの警告を補足するものです。

Android Studio の compileSdk バージョンのサポート

プロジェクトで現在のバージョンの Android Studio でサポートされていない compileSdk が使用されている場合、Android Studio に警告が表示されます。また、可能であれば、プロジェクトで使用している compileSdk をサポートするバージョンの Android Studio に移行することを提案します。Android Studio のアップグレードに AGP のアップグレードが必要な場合があることに注意してください。また、プロジェクトで使用されている compileSdk が現在のバージョンの AGP でサポートされていない場合、AGP は [Build] ツール ウィンドウに警告を表示します。

lint の動作の変更点

Android Gradle プラグイン 8.3.0-alpha02 以降では、モジュールで lint を実行すると、モジュールのメイン コンポーネントとテスト コンポーネントに対して別々の lint 分析タスクが実行されます。この変更は、パフォーマンスの向上を目的としています。以前の動作に戻すには、gradle.properties ファイルで android.experimental.lint.analysisPerComponent=false を設定します。

正確なリソース圧縮がデフォルトでオン

resources.arsc ファイルから未使用のエントリを削除し、未使用のリソース ファイルを削除する正確なリソース圧縮は、デフォルトでオンになっています。この圧縮が有効になっている場合、リソーステーブルは縮小され、参照されている res フォルダのエントリのみが APK に含まれます。

正確なリソース圧縮をオフにするには、プロジェクトの gradle.properties ファイルで android.enableNewResourceShrinker.preciseShrinkingfalse に設定します。

修正された問題

Android Gradle プラグイン 8.3.0

修正された問題
Android Gradle プラグイン
ビルド キャッシュが PackageForUnitTest タスクに対して冗長である
[AGP 8.1.0] splits.abi.isEnable と testOptions.unitTests.isIncludeAndroidResources の両方が true の場合、「Unable to find manifest output」というエラーで ./gradlew テストが失敗する
ネストされた Gradle コンポジット ビルドで AGP モデルのビルドが失敗する
リソース圧縮ツールがリソース ID をマングリングしてランタイム クラッシュを発生させる
2 番目のビルド以降で Gradle 最小バージョン チェックが実行されない
AGP 8.0.2 から 8.1.0 への更新後にタスク ':app:mergeReleaseClasses' の実行が失敗する
[Gradle 8.4][アップグレード] Kotlin Gradle プラグインで非推奨の機能が使用されているためアップグレード後に統合テストが失敗する
構成の段階でマニフェスト オーバーレイ ファイルが存在するかどうかのチェックが行われない
MergeJavaResWorkAction エラーに関する Gradle ドキュメントのリンクが無効である
.gradle/.android/analytics.settings が原因で Gradle 8.1 で構成キャッシュが壊れる
AGP は ProjectComponentIdentifier.build なしで ProjectComponentIdentifier.projectPath を使用してはならない
AGP の情報レベルのロギング「Analytics other plugin to proto: ...」を削減 / 削除してください
[Gradle 8.4][アップグレード] ProcessJavaResTask での設定中のファイル操作により設定キャッシュが壊れる
シンボル テーブル(R.txt)を取得するための Variant API
lint スタンドアロン プラグインが gradleApi() の依存関係を適切に処理しない
AGP クラス / プロバティに関する kDocs の質が低い。「VariantOutput.enable」で、「VariantOutput.enable」と置き換える必要があることが推奨されている。
AGP 8.3.0-alpha02 が Windows ホストにリリース プロファイルをインストールできない
「android.enableDexingArtifactTransform=true」が強制適用される
[Gradle 8.4][アップグレード] 構成フェーズでのファイル操作が原因で、アップグレード後に統合テストが失敗する
AGP 8.3.0-alpha-02 - 「エラー: キャッシュに保存されたリソース リポジトリを逆シリアル化できませんでした。」
[Gradle 8.4][アップグレード] TestLabBuildService の構成フェーズでのファイル操作が原因で、アップグレード後に統合テストが失敗する
インストルメンテーション テストの実行後に AGP 8.1.0 がアプリをアンインストールする(7.4.2 はアンインストールしない)
APK を変換すると ListingFileRedirectTask でエラーが発生する
ASSETS アーティファクトを変換すると入力 / 出力の場所が壊れる
android.experimental.r8.dex-startup-optimization=true をデフォルトにすることを推奨する
新しい Gradle 設定配置 API に移行する
Kotlin コンパイラが IDEA 21.3 に更新しようとすると、リソースのコンパイルが失敗する
アーティファクト API を使用したリアクティブな get()
「android.lint.printStackTrace」AGP プロパティを安定版に移行する
AGP 8.1.0: 動的機能: exportReleaseConsumerProguardFiles と extractProguardFiles 間の暗黙の依存関係が原因でコンパイル エラーが発生する
「variant.unitTest.jniLibs.addGeneratedSourceDirectory」が何も行っていないようである
Gradle 8.4 の互換性のため AGP で使用される XML パーサーを更新する
AGP 8.0.1 リリース パッケージの jacoco 計測が有効にならない
Hedgehog 回帰: 実行ボタンが数秒ほど遅延する(仕様の作成中)
AGP 8.3.0-alpha11 で生成されるリリース APK が、android.content.res.Resources$NotFoundException で起動時にクラッシュする
「android.lint.printStackTrace」AGP プロパティを安定版に移行する
機能リクエスト: com.android.build.api.extension.impl.CURRENT_AGP_VERSION を公開 API に昇格
SDK Manager は stdout へのログ情報のスパム送信を停止する必要がある
リソースのみのライブラリ モジュールで DexArchiveBuilderTaskDelegate が失敗する
すべてのスロー重複エントリに対する AGP7.4 カスタム プラグイン バリアント toTransform: META-INF/MANIFEST.MF 例外
新しい Manifest タグのサポート
Studio の設定の「分離されたプロジェクト」のリンク先が誤って設定されている。
生成されたソースを Javadoc と SourceJar に含めるオプションを指定する
minCompileSdkVersion での compileSdk と依存関係との不一致に対するクイック フィックスが必要である
[Gradle] tools:overrideLibrary でアスタリスク(*)をサポートする必要がある
マニフェストの編集時に UI フリーズする
AGP 8.2.0 で JaCoCo バージョンを設定できない
動的機能を使用するプロジェクトで Android Gradle プラグイン 8.2.0 のインストール タスクが失敗する
動的機能を使用するプロジェクトで Android Gradle プラグイン 8.2.0 のインストール タスクが失敗する
Dexer(D8)
[脱糖ライブラリ] 脱糖ライブラリ バージョン 2.1 が R8 の以前のバージョンと互換性がない
D8 のみでも最適化が実行されるか?
lint
[lint] TranslucentViewDetector が filterIncident 関数でクラッシュし、lint が誤った結果を生成する
TranslucentViewDetector が「behind」値を受け入れる必要がある
Android lint が KMP ライブラリで「property 'variantInputs.name' doesn't have a specified value」というエラーが表示されて失敗する
TranslucentViewDetector がマニフェストで誤った行を報告する
プロジェクトの依存関係を使用している場合に lintDebug が UseTomlInstead 警告を誤って報告する
Android lint によって報告された別のプロジェクトからの予期しない問題
バインディングとクリック リスナーの内側での lint チェック Unused Resource の偽陽性の検出
カスタム lint チェックの jar ファイルを読み込めなかった: ノードを TreeNode にキャストできない
変数宣言で注釈付きクラスを使用するとリント visitAnnotationUsage が呼び出されない
リント 31.0.2 が java.util.NoSuchElementException で失敗する: 配列が空である
API 26 を必要とする kotlin.text.MatchNamedGroupCollection#get(String) に関する lint 警告が表示されない
lint:TypographyQuotes の偽陰性: エスケープされた複数のアポストロフィが無視される
AGP 8.0.2 lint InvalidId 検出機能で誤検出が起こる
lint ベースラインに lintError の問題が追加される
Quickfix Lint が動作せず、IDE エラーが発生する
部分的な分析のため、テスト失敗に整合性がない
誤検出である警告の無効なハイライト
変数宣言で注釈付きクラスを使用すると lint visitAnnotationUsage が呼び出されない
未使用のリソースのプロセッサが Gradle ビルドファイルを削除することがある
NewApi lint チェックで final フィールド「isAtleastU() && otherCondition()」が認識されない
「LintClient.getSdkHome」からの StackOverflow
「プラットフォーム」依存関係が古くても Android Studio / lint で通知されない
バグ: Firebase-bom の依存関係を更新するよう提案されない
プロジェクト構造(および Gradle(?))で、新しいバージョンへのアップグレード対象になる Firebase BOM の依存関係が検出されない
lint の統合
testImplementation 依存関係からの DuplicatePlatformClasses lint エラー
圧縮ツール(R8)
AGP 8.0.2 から 8.1.0 へのアップグレード後に R8 が動作しない
8.3.0-alpha11~alpha14 の isShrinkResources で過剰最適化が行われる
AGP 8.2.0 で R8 Flurry SDK がクラッシュする
Android - R8 が原因で LinearLayoutManager のサブクラスがクラッシュする
R8 v8.2.33、アップグレード後に「java.lang.VerifyError: Bad type on operand stack」ランタイム クラッシュが発生する
[R8 8.3.21] R8 8.3.21 は R8 8.1.56 より 1.57 MB 大きい
[R8 8.3.21] R8 8.3.21 は R8 8.1.56 より 1.57 MB 大きい
class.getInterfaces() が空を返す
SimpleKotlinEnumUnboxingTest テストが kotlin_dev bot で失敗する

Android Gradle プラグイン 8.3.1

修正された問題
Android Gradle プラグイン
MergeJavaResourcesTask の増分入力の処理に関する問題
lint の統合
AGP 8.3.0-rc02 で lint が兄弟ソースセットの型を解決できない

Android Gradle プラグイン 8.3.2

修正された問題
Android Gradle プラグイン
デスガーリングが有効になっている AGP 8.3 でデッドロックが発生する
AGP 8.3 で zipApksFor タスクが破損する
lint の統合
lint で KMP の依存関係を明確化できない