Android Gradle プラグイン 7.0.0(2021 年 7 月)
Android Gradle プラグイン 7.0.0 はメジャー リリースで、さまざまな新機能や改善措置が組み込まれています。
7.0.1(2021 年 8 月)
このマイナー アップデートには、さまざまなバグの修正が含まれています。 主なバグ修正のリストについては、 <ph type="x-smartling-placeholder"></ph> リリース アップデート情報ブログをご覧ください。
互換性
最小バージョン | デフォルトのバージョン | 備考 | |
---|---|---|---|
Gradle | 7.0.2 | 7.0.2 | 詳細については、Gradle のアップデートをご覧ください。 |
SDK Build Tools | 30.0.2 | 30.0.2 | SDK Build Tools をインストールまたは設定します。 |
NDK | なし | 21.4.7075529 | 別のバージョンの NDK をインストールまたは設定します。 |
JDK | 11 | 11 | 詳細については、JDK バージョンの設定をご覧ください。 |
AGP 7.0 の実行に JDK 11 が必要
Android Gradle プラグイン 7.0 を使用してアプリをビルドする場合、Gradle を実行するために JDK 11 が必要になりました。Android Studio Arctic Fox には JDK 11 がバンドルされており、Gradle がデフォルトでこれを使用するように設定されています。そのため、ほとんどの Android Studio ユーザーはプロジェクトの設定を変更する必要がありません。
ルールを手動で設定する必要がある場合は、 JDK バージョンが Android Studio 内の AGP によって使用されている場合は、JDK 11 を使用する必要があります。 以上です。
Android Studio とは別に AGP を使用する場合は、JAVA_HOME 環境変数または -Dorg.gradle.java.home
コマンドライン オプションを JDK 11 のインストール ディレクトリに設定して、JDK バージョンをアップグレードします。
サポートが終了した SDK Tools パッケージに含まれる SDK Manager と AVD Manager は、 JDK 11 では動作しませんSDK Manager と AVD Manager を引き続き使用するには AGP 7.0 以降を使用する場合は、 現在の Android SDK コマンドライン ツール パッケージ。
Variant API 安定版
新しい Variant API が安定版になりました。新しいインターフェースについては、 com.android.build.api.variant パッケージ、およびサンプルの gradle-recipes GitHub プロジェクト。新しい バリアント API を含むいくつかの中間ファイルを アーティファクトを アーティファクト 行うことができます。これらのアーティファクト(マージ マニフェストなど)は安全に取得できます。 サードパーティのプラグインやコードを使用してカスタマイズすることもできます。
今後も新機能を追加し、Variant API の拡張を進めていきます 利用できる中間アーティファクトの数も カスタマイズが可能です。
lint の動作の変更点
このセクションでは、Android Gradle での複数の lint の動作変更について説明します。 プラグイン 7.0.0.
ライブラリ依存関係の lint の改善
checkDependencies = true
を使用した lint の実行が高速になりました
向上しますライブラリを含むアプリで構成される Android プロジェクトの場合
checkDependencies
を
true
を実行し、次のように lint を実行します。
./gradlew :app:lint
: すべての依存関係を分析します
レポートが 1 つ生成され、各モジュールで検出された問題を含む
依存関係が存在します。
Groovy
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
lint タスクを UP-TO-DATE にできるようになりました
モジュールのソースとリソースが変更されていない場合、lint 分析は
再実行する必要はありません。この場合、タスクの実行は Gradle の出力に「UP-TO-DATE」と表示されます。この変更により、checkDependencies = true
を使用してアプリ モジュールで lint を実行したときに、変更されたモジュールのみが
分析を実行できますそのため、lint の実行がさらに高速になります。
また、lint レポートタスクは、入力が出力されていない場合も実行する必要がありません。 変更されました。関連する既知の問題として、lint がない lint タスクが UP-TO-DATE のときに stdout に出力されるテキスト出力 (問題 #191897708)。
動的機能モジュールでの lint の実行
AGP は、動的機能モジュールからの lint の実行をサポートしなくなりました。
対応するアプリ モジュールから lint を実行すると、その動的機能モジュールで lint が実行され、すべての問題がアプリの lint レポートに含まれます。関連する既知の問題は、アプリ モジュールから checkDependencies = true
で lint を実行したとき、アプリ依存関係でもある場合を除き、動的機能のライブラリ依存関係がチェックされないことです(問題 #191977888)。
デフォルトのバリアントのみの lint の実行
./gradlew :app:lint
を実行すると、デフォルトのバリアントに対してのみ lint が実行されるようになりました。以前のバージョンの AGP では、すべてのバリアントに対して lint が実行されていました。
R8 圧縮ツールでのクラス欠落警告
R8 は、欠落しているクラスと -dontwarn
オプションを、より正確に、かつ一貫して処理します。そのため、出力された欠落クラス警告の評価を開始する必要があります。
。
アプリまたはアプリで定義されていないクラス参照が R8 で検出された場合 依存関係がある場合は、ビルドに表示される警告が出力されます。 出力です。例:
R8: Missing class: java.lang.instrument.ClassFileTransformer
この警告は、アプリのコードを分析したときにクラス定義 java.lang.instrument.ClassFileTransformer
が見つからなかったことを示しています。これは、通常はエラーがあることを意味しますが、この警告を無視したい場合もあります。この警告を無視する一般的な理由は 2 つあります。
-
JVM をターゲットとし、欠落しているクラスが JVM のライブラリ ライブラリタイプを指定します(上記の例を参照)。
-
いずれかの依存関係にコンパイル時のみの API が使用されている。
クラス欠落に関する警告を無視するには、-dontwarn
proguard-rules.pro
ファイルにルールを追加します。例:
-dontwarn java.lang.instrument.ClassFileTransformer
便宜上、AGP は欠落している可能性のあるルールをすべて含むファイルを生成し、app/build/outputs/mapping/release/missing_rules.txt
のようなファイルパスに書き込みます。追加
proguard-rules.pro
ファイルにルールを追加して警告を無視します。
AGP 7.0 では、クラス欠落メッセージは警告として表示されます。エラーとして表示されるようにするには、gradle.properties
で android.r8.failOnMissingClasses = true
を設定します。この警告は、AGP 8.0 ではビルドを破壊するエラーになる予定です。-ignorewarnings
オプションを proguard-rules.pro
ファイルに追加することで AGP 7.0 の動作を維持することは可能ですが、おすすめはしません。
Android Gradle プラグインのビルド キャッシュを削除
AGP 4.1 では、AGP ビルド キャッシュが削除されました。AGP ビルド キャッシュは、Gradle ビルド キャッシュを補完するために以前 AGP 2.3 で導入されましたが、AGP 4.1 で Gradle ビルド キャッシュに完全に置き換えられました。今回の変更は 時間が短縮されます。
AGP 7.0 では、android.enableBuildCache
プロパティで、
android.buildCacheDir
プロパティ、
cleanBuildCache
個のタスクを削除しました。
プロジェクトで Java 11 のソースコードを使用する
アプリのプロジェクトで Java 11 までのソースコードをコンパイルできるようになりました。これにより、プライベート インターフェース メソッド、匿名クラスのダイヤモンド演算子、ラムダ パラメータのローカル変数構文などの新しい言語機能を使用できます。
この機能を有効にするには、compileOptions
を目的の Java バージョンに設定し、compileSdkVersion
を 30 以上に設定します。
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
依存関係構成を削除
AGP 7.0 では、次の構成(または依存関係スコープ)が 削除:
-
compile
ユースケースに応じて、api
またはimplementation
に置き換えられました。
*Compile バリアントにも適用されます(debugCompile
など)。 -
provided
compileOnly
に置き換えられました。
*Provided バリアントにも適用されます。次に例を示します。releaseProvided
。 -
apk
runtimeOnly
に置き換えられました。 -
publish
runtimeOnly
に置き換えられました。
ほとんどの場合、AGP Upgrade Assistant により、プロジェクトは自動的に新しい構成に移行されます。
Android に対してコンパイルする際のクラスパスの変更 Gradle プラグイン
Android Gradle プラグインに対してコンパイルする場合は、コンパイル
クラスパスは変更される可能性があります。AGP は api/implementation
を使用するようになったため
一部のアーティファクトがコンパイルから削除される場合があります。
クラスパスを指定します。コンパイル時に AGP の依存関係に依存している場合は、
明示的な依存関係として追加します。
Java リソース フォルダへのネイティブ ライブラリの追加はサポート対象外
これまでは、Java リソース フォルダにネイティブ ライブラリを追加し、android.sourceSets.main.resources.srcDirs
を使用してそのフォルダを登録することで、ネイティブ ライブラリが抽出されて最終的な APK に追加されるようにしていました。AGP 7.0 以降、これはサポートされておらず、Java リソース フォルダのネイティブ ライブラリは無視されます。代わりに、サービス アカウント向けの DSL メソッドを
ネイティブ ライブラリ、android.sourceSets.main.jniLibs.srcDirs
。対象
詳細については、以下をご覧ください。
Google Workspace または
ソースセットをご覧ください。
既知の問題
このセクションでは、Android Gradle プラグイン 7.0.0 に存在する既知の問題について説明します。
1.4.x Kotlin Multiplatform プラグインとの互換性がない
Android Gradle プラグイン 7.0.0 は以下と互換性があります。 Kotlin マルチプラットフォーム プラグイン 1.5.0 以降。Kotlin Multiplatform サポートを使用しているプロジェクトを Android Gradle プラグイン 7.0.0 で使用するには、Kotlin 1.5.0 に更新する必要があります。回避策として、Android Gradle プラグインをダウングレードできます。 4.2.x にアップグレードしますが、推奨されません。
詳細については、KT-43944 をご覧ください。
lint 出力がない
lint タスクが UP-TO-DATE の場合、lint テキストが stdout に出力されません(問題 #191897708)。詳しくは、lint の動作の変更点をご覧ください。この問題は Android Gradle プラグイン 7.1 で修正される予定です。
動的機能のライブラリ依存関係がすべて lint チェックされるわけではない
アプリ モジュールから checkDependencies = true
で lint を実行したとき、アプリ依存関係でもある場合を除き、動的機能のライブラリ依存関係はチェックされません(問題 #191977888)。回避策として、これらのライブラリで lint タスクを実行できます。詳細については、lint の動作の変更点をご覧ください。