Android Gradle プラグイン 4.1.0(2020 年 8 月)
互換性
最小バージョン | デフォルトのバージョン | 備考 | |
---|---|---|---|
Gradle | 6.5 | なし | 詳細については、Gradle のアップデートをご覧ください。 |
SDK Build Tools | 29.0.2 | 29.0.2 | SDK Build Tools をインストールまたは設定します。 |
NDK | なし | 21.1.6352462 | 別のバージョンの NDK をインストールまたは設定します。 |
<p>This version of the Android plugin requires the following:</p>
<ul>
<li>
<p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
To learn more, read the section about <a href="#updating-gradle">updating
Gradle</a>.</p>
</li>
<li>
<p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
29.0.2</a> or higher.</p>
</li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>
新機能
このバージョンの Android Gradle プラグインには、次の新機能が含まれています。
Kotlin Script DSL のサポート
Kotlin buildscript での編集を容易にするために、DSL と Android Gradle プラグイン 4.1 の API は、実装クラスとは別の一連の Kotlin インターフェースで定義されるようになりました。つまり、次のようになります。
- null 可能性と可変性は、Kotlin 型で明示的に宣言されるようになりました。
- これらのインターフェースから生成されたドキュメントは、Kotlin API リファレンスで公開されています。
- Android Gradle プラグインでは API サーフェスが明確に定義されているため、Android の今後のビルド拡張の安定性が向上します。
重要: すでに KTS ビルド スクリプトを導入している場合や、buildSrc
で Kotlin を使用している場合は、以前のリリースであればランタイム エラーになっていたようなエラーについて、ソースの互換性の問題が発生する可能性があります。
DSL で変化することが想定されているコレクション型は、一律に次のように定義されます。
val collection: MutableCollectionType
つまり、以前は Kotlin をサポートしていたコレクションでも、Kotlin スクリプトで次のように記述することができなくなりました。
collection = collectionTypeOf(...)
ただしコレクションの変更は一律にサポートされるため、collection += …
と collection.add(...)
はどこでも使用できます。
Android Gradle プラグイン Kotlin API と DSL を使用するプロジェクトのアップグレードで問題が発生した場合は、バグを報告してください。
AAR から C / C++ の依存関係をエクスポートする
Android Gradle プラグイン 4.0 では、AAR 依存関係に Prefab パッケージをインポートする機能が追加されました。AGP 4.1 では、Android ライブラリ プロジェクト向けに AAR 内の外部ネイティブ ビルドからライブラリをエクスポートできるようになりました。
ネイティブ ライブラリをエクスポートするには、ライブラリ プロジェクトの build.gradle
ファイルの android
ブロックに次の行を追加します。
buildFeatures { prefabPublishing true }prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }
<var>myotherlibrary</var> { headers "src/main/cpp/<var>myotherlibrary</var>/include" }
}
buildFeatures { prefabPublishing = true }prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }
create("<var>myotherlibrary</var>") { headers = "src/main/cpp/<var>myotherlibrary</var>/include" }
}
この例では、ndk-build または CMake 外部ネイティブ ビルドの mylibrary
ライブラリと myotherlibrary
ライブラリが、ビルドによって生成された AAR にパッケージ化され、それぞれが指定されたディレクトリから依存先にヘッダーをエクスポートします。
注: Android Gradle プラグイン 4.0 以降を使用している場合、ビルド済みのネイティブ ライブラリのインポートに関する構成設定が変更されました。詳細については、4.0 リリースノートをご覧ください。
Kotlin メタデータの R8 サポート
Kotlin は Java クラスファイルのカスタム メタデータを使用して、Kotlin の言語構造を識別します。R8 では Kotlin メタデータの維持と書き換えが可能になったため、kotlin-reflect
を使用する Kotlin ライブラリと Kotlin アプリケーションの圧縮が完全にサポートされます。
Kotlin メタデータを保持するには、次の keep ルールを追加します。
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
それにより、直接保持されるすべてのクラスについて、R8 が Kotlin メタデータを保持するように指示できます。
詳細については、Medium の R8 で Kotlin リフレクションを使用して Kotlin ライブラリとアプリケーションを圧縮する{:.external}をご覧ください。
デバッグビルドでのアサーション
Android Gradle プラグイン 4.1.0 以降を使用してアプリのデバッグ バージョンをビルドすると、組み込みコンパイラ(D8)がアプリのコードを書き換えてコンパイル時にアサーションを有効にするため、アサーション チェックは常に有効になります。
動作の変更
Android Gradle プラグインのビルド キャッシュを削除
AGP 4.1 では、AGP ビルド キャッシュが削除されました。Gradle ビルド キャッシュを補完するために以前 AGP 2.3 で導入された AGP ビルド キャッシュは、AGP 4.1 の Gradle ビルド キャッシュに完全に置き換えられました。この変更はビルド時間には影響しません。
cleanBuildCache
タスクと android.enableBuildCache
プロパティおよび android.buildCacheDir
プロパティは非推奨になり、AGP 7.0 で削除されます。現在、android.enableBuildCache
プロパティは効果を生じさせませんが、android.buildCacheDir
プロパティと cleanBuildCache
タスクは、既存の AGP ビルド キャッシュのコンテンツを削除できるように、AGP 7.0 までは機能します。
コード圧縮を使用するアプリのサイズを大幅に削減
このリリース以降、R クラスのフィールドはデフォルトで保持されなくなりました。これによりコード圧縮に対応しているアプリでは、APK のサイズを大幅に削減できるようになります。リフレクションによって R クラスにアクセスする場合を除き、動作の変更は行われません。アクセスする場合は、これらの R クラスの keep ルールを追加する必要があります。
android.namespacedRClass プロパティの名前を android.nonTransitiveRClass に変更
試験運用版フラグ android.namespacedRClass
の名前が android.nonTransitiveRClass
に変更されました。
gradle.properties
ファイル内でこのフラグを設定すると、各ライブラリの R クラスの名前空間が有効になります。その結果 R クラスにはライブラリ自体で宣言されたリソースのみが含まれ、ライブラリの依存関係からは除外されるようになります。これによりライブラリの R クラスのサイズが削減されます。
Kotlin DSL: coreLibraryDesugaringEnabled の名前を変更
Kotlin DSL コンパイル オプション coreLibraryDesugaringEnabled
が isCoreLibraryDesugaringEnabled
に変更されました。このフラグの詳細については、Java 8 以降の API の脱糖サポート(Android Gradle プラグイン 4.0.0+)をご覧ください。
バージョン プロパティをライブラリ プロジェクトの BuildConfig クラスから削除
ライブラリ プロジェクトの場合のみ、生成される BuildConfig
クラスから BuildConfig.VERSION_NAME
および BuildConfig.VERSION_CODE
プロパティが削除されます。これは、そうした静的な値がアプリケーションのバージョン コードと名前の最終的な値を反映しておらず、誤解を招いていたためです。またそれらの値は、マニフェストをマージする際に破棄されていました。
Android Gradle プラグインの今後のバージョンでは、ライブラリ用の DSL からも versionName
および versionCode
プロパティが削除されます。現時点では、ライブラリのサブプロジェクトから、アプリのバージョン コードとバージョン名に自動的にアクセスする方法はありません。
アプリケーション モジュールについては変更がないため、DSL で versionCode
や versionName
に値を割り当てることができます。その値はアプリのマニフェストや BuildConfig
フィールドに反映されます。
NDK パスを設定する
モジュールの build.gradle
ファイルの android.ndkPath
プロパティを使用して、ローカルの NDK インストールのパスを設定できます。
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}
このプロパティを android.ndkVersion
プロパティと併用する場合、このパスには android.ndkVersion
に一致する NDK バージョンが含まれている必要があります。
ライブラリ単体テストの動作変更
ライブラリの単体テストをコンパイルして実行する動作を変更しました。ライブラリの単体テストは、ライブラリ自体のコンパイル / ランタイム クラスに対してコンパイルし、実行するようになりました。そのため、単体テストは外部サブプロジェクトと同じ方法でライブラリを消費します。通常はこの構成により、テストの有効性が高まります。
場合によっては、ライブラリの単体テストでデータ バインディングを使用すると、DataBindingComponent
クラスや BR
クラスが欠落することがあります。その場合は、androidTest
プロジェクト内のインストルメンテーション テストに移植する必要があります。そうしたクラスに対して単体テストをコンパイルして実行すると、正しい出力が得られない可能性があるためです。
io.fabric Gradle プラグインの非推奨
io.fabric Gradle プラグインは非推奨になっており、Android Gradle プラグインのバージョン 4.1 と互換性がありません。非推奨になった Fabric SDK と、Firebase Crashlytics SDK への移行の詳細については、Firebase Crashlytics SDK へのアップグレードをご覧ください。