Android Gradle プラグイン 3.4.0(2019 年 4 月)

このバージョンの Android プラグインには、次のものが必要です。

  • Gradle 5.1.1 以降。詳細については、Gradle のアップデートに関するセクションをご覧ください。

    注: Gradle 5.0 以降を使用すると、デフォルトの Gradle デーモンのメモリヒープ サイズが 1 GB から 512 MB に減少します。これにより、ビルドのパフォーマンスが低下する可能性があります。このデフォルト設定をオーバーライドするには、プロジェクトの gradle.properties ファイルで Gradle デーモンのヒープサイズを指定します。

  • SDK Build Tools 28.0.3 以降。

3.4.3(2020 年 7 月)

このマイナー アップデートでは、Android 11 でのパッケージの公開設定に関する新しいデフォルト設定と各種機能との互換性が確保されています。

詳細については、4.0.1 リリースノートをご覧ください。

3.4.2(2019 年 7 月)

Android Studio 3.4.2 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。

3.4.1(2019 年 5 月)

Android Studio 3.4.1 をサポートするマイナー アップデートです。さまざまなバグの修正とパフォーマンスの改善が含まれています。 主なバグ修正のリストについては、リリース アップデート情報ブログの関連記事をご覧ください。

新機能

  • 新しい lint チェック依存関係コンフィグレーション: lintChecks の動作が変更され、新しい依存関係コンフィグレーション lintPublish が導入されました。これにより、Android ライブラリにパッケージ化される lint チェックを細かく制御できるようになりました。

    • lintChecks: プロジェクトをローカルでビルドするときだけ実行する、lint チェックに使用する既存の構成。以前に lintChecks 依存関係コンフィグレーションを使用して公開 AAR に lint チェックを含めていた場合は、これらの依存関係を移行して、下記の新しい lintPublish コンフィグレーションを使用する必要があります。
    • lintPublish: 下記のように、公開 AAR に含める lint チェックに使用する、ライブラリ プロジェクトの新しいコンフィグレーション。つまりライブラリを使用するプロジェクトでも、これらの lint チェックを適用します。

    次のコードサンプルでは、ローカルの Android ライブラリ プロジェクトで両方の依存関係コンフィグレーションを使用しています。

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • 一般に、パッケージ化と署名のタスクで、全体的なビルド速度が改善されています。これらのタスクに関連してパフォーマンスの低下が見られた場合は、バグを報告してください。

動作の変更

  • Android Instant Apps Feature プラグイン非推奨の警告: インスタント アプリのビルドに依然として com.android.feature プラグインを使用している場合、Android Gradle プラグイン 3.4.0 では、非推奨の警告がスローされます。今後のバージョンのプラグインでもインスタント アプリをビルドできるようにするには、動的機能プラグインを使用するようにインスタント アプリを移行します。またこれにより、インストール済みアプリとインスタント アプリの両方のエクスペリエンスを、単一の Android App Bundle から公開できます。

  • R8 をデフォルトで有効化: R8 は、desugar、圧縮、難読化、最適化、dex 変換をすべて 1 つのステップに統合し、ビルド パフォーマンスを大幅に改善します。R8 は Android Gradle プラグイン 3.3.0 で導入されました。現在は、3.4.0 以上のプラグインを使用するアプリ プロジェクトと Android ライブラリ プロジェクトの両方で、デフォルトで有効になっています。

下記の図は、R8 が導入される前のコンパイル プロセスの概要を示しています。

R8 の導入前、ProGuard は dex 変換および desugar とは別のコンパイル ステップでした。

現在では、下記の図に示すように、desugar、圧縮、難読化、最適化、dex 変換(D8)のすべてが、R8 によって 1 つのステップで完了します。

R8 では、desugar、圧縮、難読化、最適化、dex 変換がすべて単一のコンパイル ステップで行われます。

R8 は既存の ProGuard ルールと連携するように設計されているため、通常は、R8 を利用するうえで必要となる措置はありません。ただし、Android プロジェクト専用に設計された ProGuard とは異なるテクノロジーであるため、圧縮や最適化により、ProGuard では発生しないコードの削除が生じる可能性があります。そのため、ごくまれにこのような状況が生じた場合は、ビルド出力内にそのコードを保持するための追加ルールが必要となることがあります。

R8 を使用していて問題が発生した場合は、R8 の互換性に関するよくある質問を参照して、該当の問題の解決策があるかどうかを確認してください。解決策が記載されていない場合は、バグを報告してください。R8 を無効にするには、次のいずれかの行をプロジェクトの gradle.properties ファイルに追加します。

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

注: 特定のビルドタイプでは、アプリ モジュールの build.gradle ファイルで useProguardfalse に設定している場合、プロジェクトの gradle.properties ファイルで R8 を無効にしているかどうかにかかわらず、Android Gradle プラグインは R8 を使用してそのビルドタイプに対応するアプリのコードを圧縮します。

  • ndkCompile は非推奨: ndkBuild を使用してネイティブ ライブラリをコンパイルしようとすると、ビルドエラーが発生するようになりました。代わりに CMake か ndk-build を使用して、プロジェクトに C / C++ コードを追加する必要があります。

既知の問題

  • 一意のパッケージ名を正しく使用することは現在必須ではありませんが、プラグインの今後のバージョンでは、より厳密になります。Android Gradle プラグインのバージョン 3.4.0 では、次の行を gradle.properties ファイルに追加することで、使用可能なパッケージ名をプロジェクトで宣言しているかどうかの確認をオプトインできます。

              android.uniquePackageNames = true
              
            

    Android Gradle プラグインを使用してパッケージ名を設定する方法について詳しくは、アプリケーション ID の設定をご覧ください。