Android Gradle プラグイン 9.0 は、API と動作の変更をもたらすメジャー リリースです。
Android Gradle プラグイン 9.0.0 に更新するには、Android Gradle プラグイン Upgrade Assistant を使用します。
AGP Upgrade Assistant は、プロジェクトをアップグレードする際に、必要に応じて既存の動作を保持します。これにより、AGP 9.0 の新しいデフォルトをすべて採用する準備ができていない場合でも、プロジェクトをアップグレードして AGP 9.0 を使用できます。
互換性
Android Gradle プラグイン 9.0 でサポートされる最大 API レベルは 36 です。その他の互換性情報は以下のとおりです。
| 最小バージョン | デフォルトのバージョン | 備考 | |
|---|---|---|---|
| Gradle | 9.1.0 | 9.1.0 | 詳細については、Gradle のアップデートをご覧ください。 |
| SDK Build Tools | 36.0.0 | 36.0.0 | SDK Build Tools をインストールまたは設定します。 |
| NDK | なし | 28.2.13676358 | 別のバージョンの NDK をインストールまたは設定します。 |
| JDK | 17 | 17 | 詳細については、JDK バージョンの設定をご覧ください。 |
android DSL クラスは、新しい公開インターフェースのみを実装するようになりました
過去数年間、Google は DSL と API の新しいインターフェースを導入し、公開する API をより適切に制御できるようにしてきました。AGP バージョン 7.x と 8.x では、インターフェースの作業の進行に合わせて互換性を維持するため、新しい公開インターフェースも実装した古い DSL タイプ(BaseExtension など)が引き続き使用されていました。
AGP 9.0 では、新しい DSL インターフェースのみが使用され、実装は完全に隠蔽された新しい型に変更されました。これにより、非推奨の古いバリアント API へのアクセスも削除されます。
AGP 9.0 に更新するには、次の操作が必要になる場合があります。
- プロジェクトが組み込みの Kotlin と互換性があることを確認する:
org.jetbrains.kotlin.androidプラグインは新しい DSL と互換性がありません。 KMP プロジェクトを Android Gradle Library Plugin for KMP に切り替える:
com.android.libraryプラグインとcom.android.applicationプラグインと同じ Gradle サブプロジェクトでorg.jetbrains.kotlin.multiplatformプラグインを使用することは、新しい DSL と互換性がありません。ビルドファイルを更新する: インターフェースの変更は、DSL をできるだけ類似した状態に保つことを目的としていますが、小さな変更が生じる可能性があります。
新しい DSL と API を参照するようにカスタムビルド ロジックを更新します。 内部 DSL への参照をすべて公開 DSL インターフェースに置き換えます。ほとんどの場合、これは 1 対 1 の置き換えになります。
applicationVariantsなどの API の使用箇所を、新しいandroidComponentsAPI に置き換えます。androidComponentsAPI はプラグインの互換性を長く維持するために安定性を高めるように設計されているため、この方法はより複雑になる可能性があります。例については、Gradle のレシピをご覧ください。サードパーティ製プラグインを更新する: サードパーティ製プラグインの中には、公開されなくなったインターフェースや API に依存しているものがあります。AGP 9.0 と互換性のあるプラグインのバージョンに移行します。
新しい DSL インターフェースに切り替えることで、次のようなさまざまな非推奨 API を使用するプラグインや Gradle ビルドスクリプトが防止されます。
android ブロック内の非推奨 API |
関数 | 交換 |
|---|---|---|
applicationVariants、libraryVariants、testVariants、unitTestVariants
|
AGP に新しい機能を追加するプラグインの拡張ポイント。 |
これは、androidComponents.onVariants API に置き換えます。次に例を示します。androidComponents { onVariants() { variant -> variant.signingConfig .enableV1Signing.set(false) } } |
variantFilter
|
選択したバリエーションを無効にできます。 |
これを androidComponents.beforeVariants API に置き換えます。例:androidComponents { beforeVariants( selector() .withBuildType("debug") .withFlavor("color", "blue") ) { variantBuilder -> variantBuilder.enable = false } } |
deviceProvider とtestServer
|
Android デバイスとエミュレータに対してテストを実行するためのカスタム テスト環境の登録。 | [Gradle で管理されているデバイス] に切り替えます。 |
sdkDirectory、ndkDirectory、bootClasspath、adbExecutable、adbExe
|
カスタムタスクに Android SDK のさまざまなコンポーネントを使用する。 |
androidComponents.sdkComponents に切り替えます。 |
registerArtifactType、registerBuildTypeSourceProvider、registerProductFlavorSourceProvider、registerJavaArtifact、registerMultiFlavorSourceProvider、wrapJavaSourceSet |
廃止された機能は、主に Android Studio での生成されたソースの処理に関連しており、AGP 7.2.0 で動作しなくなりました。 | これらの API の直接的な代替手段はありません。 |
dexOptions
|
d8 に置き換えられた dx ツールに関連する廃止された設定。Android Gradle プラグイン 7.0 以降、これらの設定は無効になっています。 |
直接的な代替はありません。 |
generatePureSplits
|
Instant Apps の構成分割を生成します。 | 構成分割を配信する機能が Android App Bundle に組み込まれました。 |
aidlPackagedList
|
このライブラリに依存するライブラリやアプリの API として公開するために、AAR にパッケージ化する AIDL ファイル。 |
これは LibraryExtension では公開されていますが、他の拡張機能タイプでは公開されていません。 |
AGP 9.0 に更新したときに次のエラー メッセージが表示された場合は、プロジェクトが古い型の一部を参照していることを意味します。
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
互換性のないサードパーティ製プラグインによってブロックされている場合は、オプトアウトして、DSL の古い実装と古いバリアント API を取得できます。この間も新しいインターフェースは利用可能で、独自のビルド ロジックを新しい API に更新することもできます。オプトアウトするには、gradle.properties ファイルに次の行を含めます。
android.newDsl=false
AGP 9.0 にアップグレードする前に、新しい API へのアップグレードを開始することもできます。新しいインターフェースは多くの AGP バージョンに存在するため、新旧のインターフェースを混在させることができます。AGP API リファレンス ドキュメントには、各 AGP バージョンの API サーフェスと、各クラス、メソッド、フィールドが追加された時期が記載されています。
9.0 のアルファ版の段階で、プラグインの作成者に連絡を取り、新しいモードに完全に対応したプラグインを適応させてリリースできるようサポートします。また、Android Studio の AGP Upgrade Assistant を強化して、移行をガイドします。
新しい DSL または Variant API に機能が不足していることが判明した場合は、できるだけ早く問題を報告してください。
Kotlin が組み込まれている
Android Gradle プラグイン 9.0 では、Kotlin の組み込みサポートが導入され、デフォルトで有効になります。つまり、Kotlin ソースファイルをコンパイルするために、ビルドファイルで org.jetbrains.kotlin.android(または kotlin-android)プラグインを適用する必要がなくなります。これにより、AGP との Kotlin 統合が簡素化され、非推奨の API の使用が回避され、場合によってはパフォーマンスが向上します。
そのため、プロジェクトを AGP 9.0 にアップグレードする際は、組み込みの Kotlin に移行するか、オプトアウトする必要があります。
Kotlin ソースがない Gradle サブプロジェクトに対して、Kotlin の組み込みサポートを選択的に無効にすることもできます。
Kotlin Gradle プラグインの実行時の依存関係
Kotlin の組み込みサポートを提供するため、Android Gradle プラグイン 9.0 には Kotlin Gradle プラグイン(KGP)2.2.10 に対するランタイム依存関係が追加されました。つまり、KGP バージョンを宣言する必要がなくなり、2.2.10 より前の KGP バージョンを使用している場合は、Gradle が KGP バージョンを 2.2.10 に自動的にアップグレードします。同様に、2.2.10-2.0.2 より前の KSP バージョンを使用している場合、AGP は KGP バージョンに合わせて 2.2.10-2.0.2 にアップグレードします。
上位の KGP バージョンにアップグレードする
より新しいバージョンの KGP または KSP を使用するには、最上位のビルドファイルに以下を追加します。
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
}
}
下位の KGP バージョンにダウングレードする
KGP のバージョンをダウングレードできるのは、組み込みの Kotlin をオプトアウトした場合のみです。これは、AGP 9.0 で組み込み Kotlin がデフォルトで有効になり、組み込み Kotlin には KGP 2.2.10 以降が必要になるためです。
以前のバージョンの KGP または KSP を使用するには、厳密なバージョン宣言を使用して、最上位のビルドファイルでそのバージョンを宣言します。
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("KGP_VERSION") }
}
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
ダウングレードできる KGP の最小バージョンは 2.0.0 です。
テスト フィクスチャの IDE サポート
AGP 9.0 では、テスト フィクスチャの Android Studio IDE の完全なサポートが導入されています。
Fused ライブラリ プラグイン
Fused Library プラグイン(プレビュー)を使用すると、複数のライブラリを 1 つの Android ライブラリ AAR として公開できます。これにより、ユーザーが公開されたアーティファクトに依存しやすくなります。
スタートガイドについては、Fused Library を使用して複数の Android ライブラリを 1 つとして公開するをご覧ください。
動作の変更
Android Gradle プラグイン 9.0 には、次の新しい動作があります。
| 動作 | 推奨事項 |
|---|---|
Android Gradle プラグイン 9.0 は、デフォルトで NDK バージョン r28c を使用します。 |
使用する NDK バージョンを明示的に指定することを検討してください。 |
| Android Gradle プラグイン 9.0 では、デフォルトで、ライブラリのコンシューマーが同じかそれ以上のコンパイル SDK バージョンを使用する必要があります。 |
ライブラリを使用する場合は、同じまたはそれ以上のコンパイル SDK を使用します。これが不可能な場合や、公開するライブラリの利用者に切り替えのための時間をさらに与えたい場合は、AarMetadata.minCompileSdk を明示的に設定します。 |
AGP 9.0 には、次の Gradle プロパティのデフォルトの更新が含まれています。これにより、アップグレード時に AGP 8.13 の動作を維持するかどうかを選択できます。
| プロパティ | 関数 | AGP 8.13 から AGP 9.0 への変更 | 推奨事項 |
|---|---|---|---|
android. |
android ブロックの以前の実装を公開せずに、新しい DSL インターフェースを使用します。つまり、 android.applicationVariants などの以前のバリアント API にもアクセスできなくなります。 |
false → true |
android.newDsl=false を設定することでオプトアウトできます。プロジェクトで使用するすべてのプラグインとビルドロジックに互換性があることを確認したら、オプトアウトを削除します。 |
android. |
組み込みの Kotlin を有効にします。 | false → true |
組み込みの Kotlin に移行するか、オプトアウトします。 |
android. |
各ライブラリに個別のパッケージ名があることを強制します。 | false → true |
プロジェクト内のすべてのライブラリに一意のパッケージ名を指定します。それが不可能な場合は、移行中にこのフラグを無効にできます。 |
android. |
デフォルトで androidx 依存関係を使用します。 |
false → true |
androidx 依存関係を採用します。 |
android. |
デフォルトで androidx.test.runner.AndroidJUnitRunner クラスを使用してデバイス上のテストを実行します。これは、非推奨の InstrumentationTestRunner のデフォルトを置き換えるものです。android {
defaultConfig {
testInstrumentationRunner = "..."
}
} |
false → true |
AndroidJUnitRunner を採用するか、カスタム testInstrumentationRunner を明示的に指定します。 |
android. |
構成間の依存関係制約の使用を制御します。 AGP 9.0 のデフォルトは false で、アプリのデバイス テスト(AndroidTest)での制約のみを使用します。これを true に設定すると、8.13 の動作に戻ります。 |
true → false |
依存関係の制約は、必要な場合を除き、どこでも使用しないでください。このフラグの新しいデフォルトを受け入れると、プロジェクトのインポート プロセスで最適化も有効になります。これにより、多数の Android ライブラリ サブプロジェクトを含むビルドのインポート時間が短縮されます。 |
android. |
アプリケーションのコードを最終版ではない R クラスに対してコンパイルし、アプリケーションのコンパイルをライブラリのコンパイルと一致させます。 これにより、増分性が向上し、リソース処理フローのパフォーマンス最適化が将来的に可能になります。 |
false → true |
多くのプロジェクトでは、ソースコードを変更せずに新しい動作を採用できます。R クラスのフィールドが定数を必要とする場所(switch case など)で使用されている場合は、連鎖した if 文を使用するようにリファクタリングします。 |
android. |
アプリとテストのターゲット SDK バージョンのデフォルト値としてコンパイル SDK バージョンを使用します。 この変更前は、ターゲット SDK バージョンはデフォルトで最小 SDK バージョンになっていました。 |
false → true |
アプリとテストのターゲット SDK バージョンを明示的に指定します。 |
android. |
テスト対象のビルドタイプの単体テスト コンポーネントのみを作成します。 デフォルト プロジェクトでは、これによりデバッグ用の単一の単体テストが生成されます。以前の動作では、デバッグまたはリリース用に単体テストが実行されていました。 |
false → true |
プロジェクトでデバッグとリリース両方のテストを実行する必要がない場合は、変更は必要ありません。 |
android. |
AGP DSL で指定されたキープファイルがディスクに存在しない場合、エラーでビルドを失敗させます。この変更前は、ファイル名のタイプミスがあると、ファイルは無視されていました。 | false → true |
無効な proguard ファイルの宣言を削除 |
android. |
クラスと Android リソースをまとめて考慮することで、R8 が保持する Android リソースを減らすことができます。 | false → true |
プロジェクトの保持ルールがすでに完了している場合は、変更は必要ありません。 |
android. |
クラスが保持されるときにデフォルトのコンストラクタを暗黙的に保持しないことで、R8 が保持するものを減らすことができます。つまり、-keep class A は -keep class A { <init>(); }を意味しなくなります。 |
false → true |
プロジェクトの保持ルールがすでに完了している場合は、変更は必要ありません。 デフォルトのコンストラクタを保持する必要がある場合は、プロジェクトの保持ルールで -keep class A を -keep class A { <init>(); } に置き換えます。 |
android. |
すべてのサブプロジェクトで resValues を有効にします |
true → false |
次の設定をプロジェクトの Gradle ビルドファイルで行うことで、resValues を必要とするサブプロジェクトでのみ有効にします。android {
buildFeatures {
resValues = true
}
} |
android. |
すべてのサブプロジェクトでシェーダー コンパイルを有効にします。 | true → false |
シェーダーを含むサブプロジェクトでのみシェーダー コンパイルを有効にするには、それらのプロジェクトの Gradle ビルドファイルで次のように設定します。android {
buildFeatures {
shaders = true
}
} |
android. |
AGP 9.0 では、getDefaultProguardFile() は proguard-android.txt ではなく proguard-android-optimize.txt のみをサポートします。これは、proguard-android.txt に含まれる dontoptimize フラグが誤って使用されるのを防ぐためです。 |
false → true |
最適化を回避したい場合は、proguard-android-optimize.txt の使用と合わせて、カスタム proguardFile で dontoptimize を明示的に指定できます。dontoptimize フラグは R8 最適化のメリットを減らすため、可能であればこのファイルから削除してください。そうでない場合は、android.r8.globalOptionsInConsumerRules.disallowed=false を設定してオプトアウトします。 |
android. |
AGP 9.0 以降では、コンシューマー キープファイルに問題のある Proguard 構成が含まれている場合、Android ライブラリと機能モジュールの公開は失敗します。dontoptimize や dontobfuscate などのグローバル オプションを含むファイルを保持するコンシューマーは、アプリケーション モジュールでのみ使用する必要があり、ライブラリ ユーザーの最適化のメリットを減らす可能性があります。Android アプリ モジュールのコンパイルでは、事前コンパイルされた依存関係(JAR または AAR)に埋め込まれている場合、このようなグローバル オプションは暗黙的に無視されます。この状況が発生したかどうかは、configuration.txt(通常は <app_module>/build/outputs/mapping/<build_variant>/configuration.txt などのパスにあります)で # REMOVED CONSUMER RULE: dontoptimize などのコメントを確認することでわかります。 |
false → true |
公開されたライブラリでは、互換性のないルールはすべて削除する必要があります。内部ライブラリは、互換性はないが必須のルールをアプリ モジュールの proguardFile に移動する必要があります。android.r8.globalOptionsInConsumerRules.disallowed=false を設定してオプトアウトします。すべてのコンシューマー キープファイルが互換性を持つようになったら、オプトアウトを削除します。 |
android. |
AndroidSourceSet DSL を使用して、生成されたソースのプロバイダを渡すことを禁止します。 |
false → true |
androidComponents の Sources API を使用して、生成されたソースを登録します。 |
android. |
シェーダー コンパイルが有効になっている場合、local.properties でシェーダー コンパイラのパスを明示的に設定する必要があります。 |
false → true |
プロジェクトの local.properties に glslc.dir=/path/to/shader-tools を追加します。 |
削除された機能
Android Gradle プラグイン 9.0 では、次の機能が削除されています。
- Wear OS アプリの埋め込みのサポート
AGP 9.0 では、Wear OS アプリの埋め込みのサポートが削除されました。この機能は Google Play でサポートされなくなりました。これには、wearApp構成とAndroidSourceSet.wearAppConfigurationNameDSL の削除が含まれます。アプリを Wear OS に公開する方法については、Wear OS への配信をご覧ください。 androidDependenciesおよびsourceSetsレポートタスク- 密度の分割 APK のサポート
AGP 9.0 では、画面密度に基づく分割 APK の作成のサポートが削除されました。この機能と関連する API が削除されました。AGP 9.0 以降を使用して画面密度に基づいて APK を分割するには、アプリバンドルを使用します。
変更された DSL
Android Gradle プラグイン 9.0 には、次の破壊的な DSL の変更が含まれています。
CommonExtensionのパラメータ化が削除されました。これ自体は、将来のソースレベルの破壊的変更を回避するためのソースレベルの破壊的変更にすぎませんが、ブロック メソッドを
CommonExtensionからApplicationExtension、LibraryExtension、DynamicFeatureExtension、TestExtensionに移動する必要があることも意味します。プロジェクトを AGP 9.0 にアップグレードする場合は、これらのパラメータまたはブロック メソッドを使用する Gradle プラグイン コードをリファクタリングします。たとえば、次のプラグインは、型パラメータを削除し、削除されたブロック メソッドに依存しないように更新されます。
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }AGP のバージョン範囲を対象とするプラグインの場合、ゲッターを直接使用すると、9.0 より前の AGP バージョンとのバイナリ互換性が維持されます。
DSL を削除しました
Android Gradle プラグイン 9.0 では、次のものが削除されています。
AndroidSourceSet.jni(機能していなかったため)。AndroidSourceSet.wearAppConfigurationName(削除された埋め込み Wear OS アプリのサポートに関連するもの)。BuildType.isRenderscriptDebuggable(機能していなかったため)。DependencyVariantSelection。DependencySelectionに置き換えられ、kotlin.android.localDependencySelectionとして公開されます。Installation.installOptions(String)。Installation.installOptionsの可変プロパティに置き換えられます。試験運用中だが安定化されていない
PostProcessingブロック。ProductFlavor.setDimension(dimensionプロパティに置き換えられました)LanguageSplitOptionsは Google Play Instant でのみ使用されていましたが、非推奨になりました。DensitySplit。この機能はサポートされなくなったためです。代替手段は、App Bundle を使用することです。
削除された API
Android Gradle プラグイン 9.0 では、次のものが削除されています。
AndroidComponentsExtension.finalizeDSl。finalizeDslに置き換えられました。Component.transformClassesWith。Instrumentation.transformClassesWithに置き換えられました。Component.setAsmFramesComputationMode。Instrumentation.setAsmFramesComputationModeに置き換えられました。ComponentBuilder.enabled。ComponentBuilder.enableに置き換えられました。DependenciesInfoBuilder.includedInApk。これはincludeInApkに置き換えられます。DependenciesInfoBuilder.includedInBundle。これはincludeInBundleに置き換えられます。GeneratesApk.targetSdkVersion。targetSdkに置き換えられました。Variant.minSdkVersion。minSdkに置き換えられました。Variant.maxSdkVersion。maxSdkに置き換えられました。Variant.targetSdkVersion。targetSdkに置き換えられました。Variant.unitTest。com.android.testプラグインには適用されなかったためです。unitTestは、HasUnitTestを拡張するVariantBuilderサブタイプで使用できます。VariantBuilder.targetSdkとtargetSdkPreviewはライブラリでは意味がないため、削除されました。代わりにGeneratesApkBuilder.targetSdkまたはGeneratesApkBuilder.targetSdkPreviewを使用してください。VariantBuilder.enableUnitTest。com.android.testプラグインには適用されなかったためです。enableUnitTestは、HasUnitTestBuilderを拡張するVariantBuilderサブタイプで使用できます。HasUnitTestBuilderを拡張するVariantBuilderサブタイプで、より一貫性のある名前のenableUnitTestを優先してVariantBuilder.unitTestEnabledが削除されました。VariantOutput.enable。enabledに置き換えられました。非推奨で無効になっている
FeaturePluginとFeatureExtension。非推奨となり無効化された
BaseExtension.registerTransformAPI。これは、AGP 4.2 以前での実行をターゲットにしながら、最新の AGP バージョンに対するコンパイルを可能にするためだけに残されていました。
削除された Gradle プロパティ
次の Gradle プロパティは、デフォルトで有効になっている機能をグローバルに無効にする方法として最初に追加されました。
これらの機能は、AGP 8.0 以下ではデフォルトで無効になっています。これらの機能を使用するサブプロジェクトでのみ有効にすると、ビルドの効率が向上します。
| プロパティ | 関数 | 交換 |
|---|---|---|
android. |
すべてのサブプロジェクトで AIDL コンパイルを有効にします。 |
AIDL ソースがあるサブプロジェクトでのみ AIDL コンパイルを有効にするには、それらのプロジェクトの Gradle ビルドファイルで次のプロパティを設定します。AIDL ソースを含む各サブプロジェクトの Gradle ビルドファイル内の android {
buildFeatures {
aidl = true
}
} |
android. |
すべてのサブプロジェクトで RenderScript コンパイル を有効にします。 |
レンダースクリプト ソースがあるサブプロジェクトでのみレンダースクリプト コンパイルを有効にするには、それらのプロジェクトの Gradle ビルドファイルで次のプロパティを設定します。android {
buildFeatures {
renderScript = true
}
} |
適用される Gradle プロパティ
次の Gradle プロパティを設定すると、AGP 9.0 はエラーをスローします。
これらのプロパティを使用するプロジェクトは、Android Gradle プラグイン Upgrade Assistant で AGP 9.0 にアップグレードされません。
| プロパティ | 関数 |
|---|---|
android. |
リソースの縮小は常に R8 の一部として実行されるようになり、以前の実装は削除されました。 |
android. |
リソース圧縮では、常に正確なリソース圧縮が使用されるようになり、より多くのリソースを削除できるようになりました。 |
R8 の変更
AGP 9.0.0 には次の R8 の変更が含まれています。
新しい構成オプション -processkotlinnullchecks
Kotlin の null チェックを処理するように R8 を構成するための新しい R8 オプション -processkotlinnullchecks を追加しました。このオプションは、keep、remove_message、remove のいずれかの値にする必要がある必須引数を取ります。このオプションは、Kotlin コンパイラによって追加された次の null チェックを処理します。
class kotlin.jvm.internal.Intrinsics {
void checkNotNull(java.lang.Object);
void checkNotNull(java.lang.Object, java.lang.String);
void checkExpressionValueIsNotNull(
java.lang.Object, java.lang.String);
void checkNotNullExpressionValue(
java.lang.Object, java.lang.String);
void checkReturnedValueIsNotNull(
java.lang.Object, java.lang.String);
void checkReturnedValueIsNotNull(
java.lang.Object, java.lang.String, java.lang.String);
void checkFieldIsNotNull(java.lang.Object, java.lang.String);
void checkFieldIsNotNull(
java.lang.Object, java.lang.String, java.lang.String);
void checkParameterIsNotNull(java.lang.Object, java.lang.String);
void checkNotNullParameter(java.lang.Object, java.lang.String);
}
オプション値は、弱い順から強い順に並べられ、次の効果があります。
keepはチェックを変更しません。remove_messageは、各チェック メソッド呼び出しを、呼び出しの最初の引数に対するgetClass()の呼び出しに書き換えます(null チェックは実質的に維持されますが、メッセージはなくなります)。removeはチェックを完全に削除します。
デフォルトでは、R8 は remove_message を使用します。-processkotlinnullchecks の指定は、この設定をオーバーライドします。複数回指定された場合は、最も強い値が使用されます。
Keep 情報をコンパニオン メソッドに伝播しないようにする
以前は、keep ルールが desugaring の対象となるインターフェース メソッドと一致した場合、R8 は内部で 最適化の禁止ビットと縮小の禁止ビットを合成されたコンパニオン メソッドに転送していました。
AGP 9.0 以降では、保持ルールはコンパニオン メソッドに適用されなくなりました。これは、保持ルールがコンパイラによって合成された他のフィールド、メソッド、クラスに適用されないことと一致しています。
最適化の禁止ビットと縮小の禁止ビットをコンパニオン メソッドに転送することで、以前は次のユースケースがサポートされていました。
default/static/privateインターフェース メソッドを含むライブラリを、minSdk< 24 とインターフェース メソッドを保持するルールを使用して DEX にコンパイルします。- クラスパスと
-applymappingにライブラリを指定してアプリをコンパイルします。 - アプリとライブラリを統合します。
これは -applymapping でのみ機能します。disallow
obfuscation ビットはコンパニオン メソッドに転送されないため、ステップ 1 で生成されたコンパニオン クラスには難読化されたメソッド名が含まれます。
今後、このユースケースは minSdk < 24 ではサポートされなくなります。この問題を回避するには、次の操作を行います。
default/static/privateインターフェース メソッドを含むライブラリを、minSdk< 24 のクラスファイルに脱糖します。- R8 と、コンパニオン クラスのインターフェース メソッドを保持するルールを使用して、脱糖されたアーティファクトをコンパイルします。
- クラスパス上のライブラリを使用してアプリをコンパイルします。
- アプリと脱糖されたアーティファクトをマージします。
この副作用として、匿名クラスとローカルクラスの内部クラスと外側のメソッド属性をインターフェース コンパニオン メソッド内に保持できなくなりました。
デフォルトの出力ソースファイルを r8-map-id-<MAP_ID> に変更
この変更は AGP 8.12.0 以降に適用されます。
クラスのデフォルトの出力ソースファイル属性は、リトレースが必要な場合(つまり、難読化または最適化のいずれかが有効になっている場合)、SourceFile から r8-map-id-<MAP_ID> に変更されます。
難読化されたスタック トレースが与えられた場合、新しいソースファイル属性により、再トレースに必要なマッピング ファイルの ID を抽出できるようになります。この ID は、Logcat でのスタック トレースの自動再トレースをサポートするために使用できます。
カスタム ソースファイル属性(-renamesourcefileattribute)が使用されている場合は、このカスタム ソースファイル属性が引き続き優先されます。
ProGuard 互換モード(gradle.properties に android.enableR8.fullMode=false が含まれている場合)では、r8-map-id-<MAP_ID> のソースファイル属性の出力は、SourceFile 属性が保持されていない場合にのみ有効になります。ProGuard 互換モードを使用し、マッピング ファイル ID をスタック トレースに含めたいアプリは、-keepattributes SourceFile を削除する必要があります(または R8 フルモードに移行する必要があります)。
r8-map-id-<MAP_ID> で使用されるマップ ID は、以前使用されていたマップハッシュの 7 文字の接頭辞ではなく、マップハッシュ全体です。
L8 の脱糖で最小化された合成名の使用を有効にする
D8 によって生成された合成クラスの名前には通常、D8 によって生成された合成クラスであることを示す $$ExternalSynthetic というサブ文字列が含まれています。また、合成の名前には合成の種類(Backport、Lambda など)もエンコードされます。クラス名が文字列プールでより多くのスペースを占有するため、結果として得られる DEX のサイズに悪影響を及ぼします。
AGP 9.0 は、すべての j$ クラスを含む DEX ファイルが合成クラスに新しい短縮クラス名形式を使用するように L8(コア ライブラリの脱糖)を構成します。新しいクラス名では数値 ID が使用されます(例: $1)。
-addconfigurationdebugging のサポートを削除
AGP 9.0 では -addconfigurationdebugging のサポートが削除されます。このフラグが使用されると、コンパイラが警告を報告するようになりました。
D8/R8 から L8 ルールを生成するサポートを削除
この変更は、D8/R8 コマンドラインまたは API を直接使用するデベロッパーにのみ関連します。
R8 9.0 では、D8 および R8 から L8 のキープルールを生成するサポートが削除されました。代わりに、この目的には TraceReferences を使用する必要があります。
具体的には、D8Command.builder.setDesugaredLibraryKeepRuleConsumer メソッドと R8Command.Builder.setDesugaredLibraryKeepRuleConsumer メソッドが削除され、D8 と R8 のコマンドライン オプションから --desugared-lib-pg-conf-output のサポートが削除されます。
修正された問題
Android Gradle プラグイン 9.0.0-rc03
| 修正された問題 | ||
|---|---|---|
| Android Gradle プラグイン |
|
|
Android Gradle プラグイン 9.0.0-rc02
| 修正された問題 | |
|---|---|
| AGP 9.0.0-rc02 で修正済みとしてマークされた公開の問題はありません |
Android Gradle プラグイン 9.0.0-rc01
| 修正された問題 | |
|---|---|
| AGP 9.0.0-rc01 で修正済みとマークされた公開の問題はありません。 |
Android Gradle プラグイン 9.0.0-beta05
| 修正された問題 | ||
|---|---|---|
| Android Gradle プラグイン |
|
|
Android Gradle プラグイン 9.0.0-beta04
| 修正された問題 | |||
|---|---|---|---|
| Android Gradle プラグイン |
|
||
Android Gradle プラグイン 9.0.0-beta03
| 修正された問題 | |
|---|---|
| AGP 9.0.0-beta03 で修正済みとマークされた公開の問題はありません |
Android Gradle プラグイン 9.0.0-beta02
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
| lint |
|
|||
| lint の統合 |
|
|||
Android Gradle プラグイン 9.0.0-beta01
| 修正された問題 | |
|---|---|
| AGP 9.0.0-beta01 で修正済みとマークされた公開されている問題はありません |
Android Gradle プラグイン 9.0.0-alpha14
| 修正された問題 | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle プラグイン |
|
||||||
| lint の統合 |
|
||||||
| 圧縮ツール(R8) |
|
||||||
Android Gradle プラグイン 9.0.0-alpha13
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
Android Gradle プラグイン 9.0.0-alpha12
| 修正された問題 | |||||
|---|---|---|---|---|---|
| Android Gradle プラグイン |
|
||||
Android Gradle プラグイン 9.0.0-alpha11
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
Android Gradle プラグイン 9.0.0-alpha10
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
| lint |
|
|||
Android Gradle プラグイン 9.0.0-alpha09
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
Android Gradle プラグイン 9.0.0-alpha08
| 修正された問題 | |
|---|---|
| AGP 9.0.0-alpha08 で修正済みとしてマークされた公開の問題はありません |
Android Gradle プラグイン 9.0.0-alpha07
| 修正された問題 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Android Gradle プラグイン |
|
||||||||
Android Gradle プラグイン 9.0.0-alpha06
| 修正された問題 | |||||
|---|---|---|---|---|---|
| Android Gradle プラグイン |
|
||||
| lint |
|
||||
Android Gradle プラグイン 9.0.0-alpha05
| 修正された問題 | |||||
|---|---|---|---|---|---|
| Android Gradle プラグイン |
|
||||
| lint |
|
||||
Android Gradle プラグイン 9.0.0-alpha04
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
| lint |
|
|||
Android Gradle プラグイン 9.0.0-alpha03
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
| lint |
|
|||
Android Gradle プラグイン 9.0.0-alpha02
| 修正された問題 | ||||
|---|---|---|---|---|
| Android Gradle プラグイン |
|
|||
Android Gradle プラグイン 9.0.0-alpha01
| 修正された問題 | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle プラグイン |
|
||||||
Android Gradle プラグイン 9.0.0
| 修正された問題 | |
|---|---|
| AGP 9.0.0 で修正済みとしてマークされた公開の問題はありません |