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 |
SDK Build Tools | 30.0.2 | 30.0.2 |
NDK | なし | 21.4.7075529 |
JDK | 11 | 11 |
AGP 7.0 の実行に JDK 11 が必要
Android Gradle プラグイン 7.0 を使用してアプリをビルドする場合、JDK 11 が いくつかあります。Android Studio Arctic Fox には、JDK 11 と デフォルトで使用するように Gradle を設定します。つまり、ほとんどの Android Studio プロジェクトの構成を変更する必要はありません。
ルールを手動で設定する必要がある場合は、 JDK バージョンが Android Studio 内の AGP によって使用されている場合は、JDK 11 を使用する必要があります。 以上です。
Android Studio とは別に AGP を使用する場合は、次の方法で JDK バージョンをアップグレードしてください。
JAVA_HOME 環境変数を設定する
または -Dorg.gradle.java.home
コマンドライン オプション
JDK 11 のインストール ディレクトリに移動します。
サポートが終了した 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 分析は
再実行する必要はありません。この場合、
タスクの実行は「UP-TO-DATE」と表示されるGradle
出力です。この変更により、checkDependencies = true
を使用してアプリ モジュールで lint を実行したときに、変更されたモジュールのみが
分析を実行できますそのため、lint の実行がさらに高速になります。
また、lint レポートタスクは、入力が出力されていない場合も実行する必要がありません。 変更されました。関連する既知の問題として、lint がない lint タスクが UP-TO-DATE のときに stdout に出力されるテキスト出力 (問題 #191897708)。
動的機能モジュールでの lint の実行
AGP は、動的機能モジュールからの lint の実行をサポートしなくなりました。
対応するアプリ モジュールから lint を実行すると、
動的機能モジュールを追加し、アプリの lint にすべての問題を含めるようにします。
レポート関連する既知の問題として、lint を実行しようとした
アプリ モジュールの checkDependencies = true
を使用する場合、
動的機能ライブラリの依存関係は、それがアプリでもない限りチェックされない
(問題
#191977888)。
デフォルトのバリアントのみの lint の実行
./gradlew :app: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 では、クラス欠落に関するメッセージは警告として表示され、
エラーに変える
android.r8.failOnMissingClasses = true
インチ
gradle.properties
。AGP 8.0 では、この警告は
エラーが表示されます。次の方法で、AGP 7.0 の動作を維持できます。
-ignorewarnings
オプションを
proguard-rules.pro
ファイルを使用することはおすすめしませんが、この方法はおすすめしません。
Android Gradle プラグインのビルド キャッシュを削除
AGP 4.1 では、AGP ビルド キャッシュが削除されました。AGP で以前に導入 2.3 で Gradle ビルド キャッシュを補完するために、AGP ビルド キャッシュが置き換えられました すべて 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
を使用してフォルダを登録します。
ダウンロードします。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 を使用するプロジェクト Android Gradle を使用するには、マルチプラットフォーム サポートを Kotlin 1.5.0 にアップデートする必要がある プラグイン 7.0.0。回避策として、Android Gradle プラグインをダウングレードできます。 4.2.x にアップグレードしますが、推奨されません。
詳細については、次をご覧ください: KT-43944。
lint 出力がない
lint タスクの実行時に stdout に出力される lint テキストがない 最新の状態 (問題 #191897708)。 詳細については、 lint の動作変更この問題 Android Gradle プラグイン 7.1 で修正される予定です。
動的機能のライブラリ依存関係がすべて lint チェックされるわけではない
checkDependencies = true
で lint を
動的機能のライブラリ依存関係がチェックされるのは、
アプリの依存関係でもある
(問題 #191977888)。
回避策として、これらのライブラリで lint タスクを実行できます。詳しくは
lint の動作変更をご覧ください。