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 プロジェクトの場合 checkDependenciestrue を実行し、次のように 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 つの理由 次の点に注意してください。

  1. JVM をターゲットとし、欠落しているクラスが JVM のライブラリ ライブラリタイプを指定します(上記の例を参照)。

  2. いずれかの依存関係にコンパイル時のみの 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 の動作変更をご覧ください。