Android Gradle プラグイン 8.1.0 はメジャー リリースで、さまざまな新機能や改善措置が組み込まれています。
互換性
|
最小バージョン |
デフォルトのバージョン |
備考 |
Gradle |
8.0 |
8.0 |
詳細については、Gradle のアップデートをご覧ください。 |
SDK Build Tools |
33.0.1 |
33.0.1 |
SDK Build Tools をインストールまたは設定します。 |
NDK |
なし |
25.1.8937393 |
別のバージョンの NDK をインストールまたは設定します。 |
JDK |
17 |
17 |
詳細については、JDK バージョンの設定をご覧ください。 |
Kotlin DSL がビルド構成のデフォルト
新しいプロジェクトでは、ビルド構成にデフォルトで Kotlin DSL(build.gradle.kts
)が使用されるようになりました。これにより、構文のハイライト表示、コード補完、宣言へのナビゲーションなど、Groovy DSL(build.gradle
)よりも優れた編集エクスペリエンスが実現します。AGP 8.1 と Kotlin DSL を使用してビルド構成を行う場合は、最適なエクスペリエンスを実現するために Gradle 8.1 を使用する必要があります。詳細については、Kotlin DSL 移行ガイドをご覧ください。
アプリ別の言語の自動サポート
Android Studio Giraffe Canary 7 および AGP 8.1.0-alpha07 以降では、アプリで自動的にアプリ別の言語設定をサポートするよう設定できます。Android Gradle プラグインは、プロジェクト リソースに基づいて LocaleConfig
ファイルを生成し、そのファイルへの参照を最終マニフェスト ファイルに追加します。そのため、手動で行う必要はありません。AGP は、アプリ モジュールの res
フォルダ内のリソースと、ライブラリ モジュールの依存関係を使用して、LocaleConfig
ファイルに含めるロケールを決定します。
自動のアプリ別の言語機能は、Android 13(API レベル 33)以降を実行するアプリをサポートしています。この機能を使用するには、compileSdkVersion
を 33 以上に設定する必要があります。以前のバージョンの Android のアプリ別の言語設定を設定するには、API とアプリ内言語選択ツールを使用する必要があります。
アプリ別の言語の自動サポートを有効にするには、デフォルトの言語 / 地域を指定します。
- アプリ モジュールの
res
フォルダに、resources.properties
という名前の新しいファイルを作成します。
resources.properties
ファイルで、unqualifiedResLocale
ラベルを使用してデフォルトのロケールを設定します。ロケール名を形成するには、言語コードをスクリプトや地域コード(省略可)と組み合わせ、それぞれをダッシュで区切ります。
たとえば、デフォルトのロケールがアメリカ英語である場合は次のとおりです。
unqualifiedResLocale=en-US
AGP は、このデフォルトのロケールと、res
フォルダの values-*
ディレクトリを使用して指定した代替ロケールを、自動生成された LocaleConfig
ファイルに追加します。
アプリ別の言語の自動サポートはデフォルトでオフになっています。この機能を有効にするには、モジュール レベルの build.gradle.kts
ファイル(Groovy を使用している場合は build.gradle
ファイル)の androidResources {}
ブロックで generateLocaleConfig
設定を使用します。
Kotlin
android {
androidResources {
generateLocaleConfig = true
}
}
Groovy
android {
androidResources {
generateLocaleConfig true
}
}
Android Lint に JVM 17 をターゲットとするバイトコードが含まれている
AGP 8.1.0-alpha04 以降、Android Lint には JVM 17 をターゲットとするバイトコードが含まれています。カスタム lint チェックを記述する場合は、JDK 17 以降でコンパイルし、Kotlin コンパイラ オプションで jvmTarget = '17'
を指定する必要があります。
lint ツールの詳細については、lint チェックでコードを改善するをご覧ください。
ネイティブ ライブラリの圧縮設定を DSL に移動
AGP 8.1.0-alpha10 以降では、マニフェストではなく DSL を使用してネイティブ ライブラリの圧縮を構成しないと、警告が表示されます。次のガイダンスでは、DSL を使用するように構成を更新する方法について説明します。これらの更新を行う際にサポートが必要な場合は、AGP Upgrade Assistant([Tools] > [AGP Upgrade Assistant])を使用してください。
圧縮されていないネイティブ ライブラリを使用するには、マニフェストから android::extractNativeLibs
属性を削除し、モジュール レベルの build.gradle.kts
ファイル(Groovy を使用している場合は build.gradle
ファイル)に次のコードを追加します。
Kotlin
android {
packagingOptions {
jniLibs {
useLegacyPackaging = false
}
}
}
Groovy
android {
packagingOptions {
jniLibs {
useLegacyPackaging false
}
}
}
試験運用版のビルドフラグ
これらは、AGP 8.1 で利用可能なビルドを構成するための試験運用版フラグです。
フラグ |
追加日 |
デフォルト値 |
備考 |
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes |
AGP 8.0 |
false |
署名構成を指定せずにこれを有効にすると、プロファイリング可能なビルドまたはデバッグ可能なビルドを実行するときに、AGP はデフォルトのデバッグ署名構成を使用します。このフラグはデフォルトで無効になっています。これは、ビルド作成者が特定のプロファイリング署名構成を宣言することを推奨するためです。 |
android.experimental.library.desugarAndroidTest |
AGP 8.0 |
false |
このフラグを使用すると、ライブラリビルダーは、linting などによって生成された AAR に影響を与えることなく、テスト APK のコア ライブラリの脱糖を有効にできます。最終的には、Variant API でこの動作をサポートする予定です。 |
android.experimental.testOptions.managedDevices.customDevice |
AGP 8.0 |
false |
有効にすると、Gradle で管理されているデバイスでは、プラグインから提供できるユーザー定義のカスタム デバイスタイプを使用できます。Firebase Test Lab プラグインを使用する場合は、このフラグを有効にする必要があります。 |
android.lint.printStackTrace |
AGP 8.0 |
false |
有効にすると、Android lint はクラッシュした場合にスタックトレースを出力します。このフラグには、LINT_PRINT_STACKTRACE 環境変数と同じ機能があります。 |
android.experimental.testOptions.managedDevices.maxConcurrentDevices |
AGP 8.0 |
なし |
任意の時点でアクティブにする Gradle マネージド デバイス(AVD)の同時実行数の上限を指定します。値が 0 または負の場合、デバイスの最大数はありません。 |
android.experimental.testOptions.installApkTimeout |
AGP 8.0 |
なし |
APK のインストール タイムアウト時間(秒)。値が 0 または負の場合は、UTP によってデフォルト値に設定されます。 |
修正された問題
Android Gradle プラグイン 8.1.0
修正された問題 |
Android Gradle プラグイン |
構成キャッシュでの「com.android.build.gradle.tasks.ShaderCompile」の問題
|
AGP API を使用して Java リソースに追加すると構成キャッシュが破損する
|
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so が APK 内にパッケージ化されている
|
設定中に KGP がマニフェストを読み取り、マニフェストの変更時に構成キャッシュを無効にする
|
マージ マニフェストに問題がある場合のビルド警告メッセージが不明確である
|
AGP 7.4 にアップグレードすると、StackOverflowError が発生する
|
Kotlin ライブラリのサブプロジェクトに直接依存する動的機能で ClassNotFoundException が発生する
|
テスト バリアントのマニフェスト プレースホルダで processDebugUnitTestManifest が失敗する
|
テスト バリアントのマニフェスト プレースホルダで processDebugUnitTestManifest が失敗する
|
名前空間プロパティが HasAndroidResources に属している可能性がある
|
「Gradle files have changed since last project sync」というメッセージを無効にできない
|
新しい Android Gradle プラグインがないのに「We recommend using a newer Android Gradle plugin」と表示される
|
テスト バリアントのマニフェスト プレースホルダで processDebugUnitTestManifest が失敗する
|
CheckAarMetadataTask でコンパイル SDK チェックを無効にするためのブール値フラグ
|
ビルドエラーが、存在しない API レベル 34 を指している
|
JVM ツールチェーンを設定しても JavaCompile targetCompatibility の値に影響しない
|
ワイルドカード ドメインを使用した Navigation の deepLink エントリのマージ マニフェストに「android:host」属性がない
|
Android Gradle プラグイン 8.1 以降で processDebugMainManifest タスクが失敗する
|
AnalyticsRecordingTask を削除したい
|
output-metadata.json の内容が一貫していない
|
AnalyticsRecordingTask を削除したい
|
output-metadata.json の内容が一貫していない
|
JVM ツールチェーンを設定しても JavaCompile targetCompatibility の値に影響しない
|
ワイルドカード ドメインを使用した Navigation の deepLink エントリのマージ マニフェストに「android:host」属性がない
|
Android Gradle プラグイン 8.1 以降で processDebugMainManifest タスクが失敗する
|
Android Studio で環境変数 STUDIO_GRADLE_JDK が優先して使用されない
|
カスタム ソースタイプでマルチフレーバーのソースセットを作成する必要がある
|
DependenciesInfoBuilder には API の更新とドキュメントが必要
|
ネストのメンバーがないことが原因で Java 11 ターゲットでの DexingNoClasspathTransform (minSdk >= 24) が失敗する
|
Groovy に記載されているとおりに DslExtension.Builder.extendProjectWith() が機能しない
|
kotlin.Pair を使用しない VariantSelector.withFlavor API を追加
|
「proguard.txt」が変更されたため、AndroidLintAnalysisTask ( :lintAnalyzeExternalRelease) にキャッシュミスがある
|
アプリのマージ マニフェストに依存関係の extractNativeLibs 属性と useEmbeddedDex 属性が含まれている
|
AGP: AIDL ツールとフレームワークの AIDL ファイルへのパスを公開 API として公開している
|
リクエスト: IDE が「PermittedSubclasses が ASM9 を要求する」問題の修正を提供できるようにする
|
バグ: 「KSP を有効にして、代わりにこの依存関係に KSP プロセッサを使用する」をオンにしてもウェブサイトに移動するだけである
|
.gradle/.android/analytics.settings が原因で Gradle 8.1 で構成キャッシュが壊れる
|
agp 8.1.0 の generateLocaleConfig は非決定的な順序を使用するため、再現可能なビルドができない
|
|
Dexer(D8) |
最新のアップデート後にコアライブラリの脱糖でアプリがクラッシュする。
|
API 21 を使用する agp 8.1.0 回帰 - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] Check failed: !method->IsAbstract()
|
|
lint |
lint は、継承されたインターフェースではなく、直接実装されたインターフェースについてのみ、安全なキャストをチェックする
|
lint が呼び出しのレシーバについて有効なキャストをチェックしない
|
TypedArray#close(API 31)は脱糖されていないが、try-with-resources で使用したときに AS が警告を表示しない
|
バグ: 「「BC」プロバイダは非推奨になっており、Android P では...」という誤検出の警告
|
Kotlin を 1.8.0 にアップグレードした後の remember について、lint の誤検出が発生する
|
列挙型パラメータを使用してメソッド内で SDK_INT チェックを実行すると、誤検出の lint の警告が表示される
|
TypographyQuotes lint チェックがエスケープされた引用符で機能しない
|
TrustAllX509TrustManager lint チェックで、X509TrustManager を拡張するインターフェースに誤ってフラグが付けられる
|
修正の置換用に挿入されたコードのみを再フォーマットする
|
lint: インテンション プレビューが ReplaceStringQuickFix に対して例外をスローする
|
|
圧縮ツール(R8) |
VerifyError: Kotlin 1.8.20 で R8 を使用した場合に検証ツールがクラスを拒否した
|
AGP 8 の R8 により Google Fit サービスが中断される
|
含めるソースファイルの情報に入力名と重複する名前が残っていると、正しく表現されない
|
ArrayIndexOutOfBoundsException を使用して Compose でビルド中に R8 が失敗する
|
シンプルな StringBuilder 関連のコードで、リリースモードまたは debuggable=false モードで tail 呼び出しを付加できない
|
VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds() メソッドの特殊なケース
|
java.lang.VerifyError の dex.startup-optimization の結果: クラスを拒否
|
Android 12 以降での確認エラーによるクラッシュ
|
|
Android Gradle プラグイン 8.1.1
修正された問題 |
Dexer(D8) |
Java 16 レコード: equals(null) が NullPointerException をスローする
|
|
圧縮ツール(R8) |
java.lang.VerifyError: 検証ツールがクラスを拒否
|
Apache POI ライブラリを使用している場合にビルドが :minifyReleaseWithR8 で先に進まなくなる
|
R8 最適化を有効にしたときに呼び出しを拒否する
|
java.lang.reflect.Executable の NoClassDefFoundError
|
|
Android Gradle プラグイン 8.1.2
修正された問題 |
Android Gradle プラグイン |
Android ライブラリ モジュールで androidResources を利用できない
|
[AGP 8.1.0] splits.abi.isEnable と testOptions.unitTests.isIncludeAndroidResources の両方が true の場合、「Unable to find manifest output」というエラーで ./gradlew テストが失敗する
|
|
圧縮ツール(R8) |
null チェックが削除された場合、Kotlin 1.9 で Kotlin ラムダが R8 によって破棄される
|
play-services-measurement-21.3.0-runtime.jar で「コンパイル中に未定義の値が検出されました」というエラーで R8 が失敗する
|
|
Android Gradle プラグイン 8.1.3
修正された問題 |
Android Gradle プラグイン |
[AGP 8.1.0] splits.abi.isEnable と testOptions.unitTests.isIncludeAndroidResources の両方が true の場合、「Unable to find manifest output」というエラーで ./gradlew テストが失敗する
|
AGP 8.1 に更新した後にビルドが失敗する
|
|
Android Gradle プラグイン 8.1.4
修正された問題 |
Android Gradle プラグイン |
アーティファクト変換によってすでに dex 変換されているサブプロジェクトのクラスに対して dex 変換タスクを実行しない
|
|