Android Studio プレビュー版の新機能

Android Studio 3.6 は、Stable チャンネルにリリース済みです。 こちらからダウンロードできます。

Android Studio 4.1 は現在、Canary チャンネルと Dev チャンネルにリリースされています。Android Studio 4.0 は現在、Beta チャンネルにリリースされています。

各リリースにおける重要な修正のリストなど、リリースに関する最新情報については、リリース アップデート情報もご覧ください。

Android Studio プレビュー版を使用していて問題が発生した場合は、お知らせください。ご提出いただいたバグレポートを基に、今後も Android Studio の改善に取り組んでまいります。

Android Studio 4.1

このセクションでは、Android Studio 4.1 の新機能や変更内容の概要について説明します。

Database Inspector

Android Studio 4.1 Canary 6 以降では、新しい Database Inspector を使用してアプリのデータベースを検査、クエリ、変更できます。たとえば、実行中のアプリをデバッグするには、データベース内の値を変更し、その変更をデバイス上でテストします。

表の値を変更し、実行中のアプリでその変更を確認する

まず、API レベル 26 以上が搭載されているデバイスにアプリをデプロイし、メニューバーから [View] > [Tool Windows] > [Database Inspector] を選択します。

[Database Inspector] ウィンドウでアプリのプロセスが自動的に選択されない場合は、プルダウン メニューから選択します。

表の検査と変更

[Databases] パネルでは、アプリのデータベースが表示され、データベース ノードを展開すると表が表示されます。表をダブルクリックすると、以下のスクリーンショットのように、Inspector では右側の別のタブに表が表示されます。そこでは、デバイスでのアプリの使用中に、データの検査、列の並べ替え、値の変更ができます。

表のセルの値を変更するには、セルをダブルクリックして値を変更し、Enter キーを押します。Room 永続ライブラリを使用して、(LiveData などによって)データベースを監視している場合、これらの変更は実行中のアプリにすぐに表示されます。そうでない場合は、アプリのデータベースのクエリを更新して変更内容を確認する必要がある場合があります。

アプリのデータベースの検査、クエリ、変更

アプリでデータベースが更新された際に、それらの更新を Inspector ウィンドウに自動的に表示させたい場合は、[Live updates] チェックボックスをオンにします。 ただし、このオプションが有効であっても、Inspector の表は読み取り専用になるため、値の変更はできないことにご注意ください。

また、データを手動で更新するには、[Refresh Table] をクリックします。同様に、データベース スキーマに変更がある場合は、[Databases] パネルで [Refresh Schema] をクリックします。

データベースにクエリを実行する

データベースにクエリを実行するには、[Databases] パネルで [Run SQL] をクリックします。右側に [New Query] タブが開きます。アプリに複数のデータベースが含まれている場合は、タブウィンドウのプルダウン メニューで、クエリを実行するデータベースを選択します。テキスト フィールドで、SQLite クエリを指定し、[Run] をクリックします。Inspector がアプリのデータベースにクエリを実行し、次のように結果を返します。

データベースにクエリを実行する

Room 永続ライブラリを使用する場合、Android Studio では、@Query アノテーションで定義したクエリをすばやく実行するためのガター アクションも提供します。アプリが対応デバイスにデプロイされており、[Database Inspector] が IDE で開いている場合は、以下に示すように @Query アノテーションの横にある ボタンをクリックします。

Room Query アノテーションのガター アクション

Database Inspector で新しいタブが開き、クエリが実行され、結果が返されます。クエリに :name のような名前付きバインド パラメータが含まれている場合、Android Studio では、クエリを実行する前に各パラメータの値がリクエストされます。

Native Memory Profiler

Android Studio の Memory Profiler に、Android 10 以降を搭載する物理デバイスにデプロイされるアプリ向けの Native Memory Profiler が追加されました。32 バイトのサンプルサイズを持つ Nativer Memory Profiler は、特定の期間のネイティブ コードのオブジェクトの割り当てと割り当て解除を追跡し、次の情報を提供します。

  • Allocations: 選択した期間中に malloc() または new 演算子によって割り当てられたオブジェクトの数。
  • Deallocations: 選択した期間中に free() または delete 演算子によって割り当て解除されたオブジェクトの数。
  • Allocations Size: 選択した期間中のすべての割り当ての合計サイズ(バイト単位)。
  • Deallocations Size: 選択した期間中のすべての解放されたメモリの合計サイズ(バイト単位)。
  • Total Count: [Allocations] 列の値から [Deallocations] 列の値を引いた値。
  • Remaining Size: [Allocations Size] 列の値から [Deallocations Size] 列の値を引いた値。

Native Memory Profiler

記録を開始するには、Memory Profiler ウィンドウの上部にある [Record native allocations] をクリックします。

[Record native allocations] ボタン

記録を完了する準備ができたら、[Stop recording] をクリックします。

TensorFlow Lite モデルを使用する

ML Model Binding を使用すると、簡単に .tflite モデルファイルを直接インポートしてプロジェクトで使用できます。Android Studio では使いやすいクラスが作成されるため、モデルを実行する際のコードが減り、型の安全性が高まります。

サポートされているモデル

ML Model Binding の現在の Canary 実装では、画像分類モデルやスタイル転送モデルがサポートされています(ただし、メタデータで拡張されている場合)。今後、物体検知、画像セグメンテーション、テキスト分類など、他の問題領域にもサポートを拡大していく予定です。

TensorFlow Hub では、さまざまな事前トレーニング済みの画像分類モデルが提供されており、「メタデータ」に関するモデル形式を検索してダウンロードできます。また、TensorFlow Lite モデルにメタデータを追加するに記載されているように、TensorFlow Lite モデルにメタデータを自分で追加することもできます。

モデルファイルをインポートする

サポートされているモデルファイルをインポートする手順は次のとおりです。

  1. [File] メニューで [File] > [New] > [Other] > [TensorFlow Lite Model] を選択し、TensorFlow Lite モデルのインポート ダイアログを開きます。
  2. 以前にダウンロードまたは作成した .tflite モデルファイルを選択します。
  3. [Finish] をクリックします。

この操作により、モデルファイルがプロジェクトにインポートされ、ml/ フォルダに配置されます。ディレクトリが存在しない場合は、Android Studio によって作成されます。

TensorFlow Lite モデルをインポートする

モデルのメタデータを表示する

インポートしたモデルの詳細とアプリでの使用方法を確認するには、プロジェクト内のモデルファイルをダブルクリックして、モデルビューア ページを開きます。モデルビューア ページには、次の内容が表示されます。

  • Model: モデルの概要
  • Tensors: 入力テンソルと出力テンソルの説明
  • Sample code: アプリのモデルとのやり取りの例

TensorFlow Lite モデルビューアのスクリーンショット

モデルにメタデータがない場合、この画面には最小限の情報しか表示されません。

アプリでモデルを使用する

モデルビューアには、アプリでモデルを簡単に使い始められるように、サンプルコードが用意されています。

mobilenet_quant_metadata.tflite の使用例を次に示します。

Kotlin

    try {
        val model: MobilenetQuantMetadata = MobilenetQuantMetadata.newInstance(this)

        // Creates a TensorImage instance from Bitmap.
        val tensorImage = TensorImage()
        tensorImage.load(bitmap)

        // Runs model inference and gets result.
        val outputs: MobilenetQuantMetadata.Outputs = model.process(tensorImage)
        val tensorLabel: TensorLabel = outputs.getProbabilityAsTensorLabel()
        val probMap = tensorLabel.mapWithFloatValue

        for ((key, value) in probMap) {
            Log.d(TAG, "label = $key, prob = $value")
        }
    } catch (e: IOException) {
        // Handles exception
    }
    

Java

    try {
        MobilenetQuantMetadata model = MobilenetQuantMetadata.newInstance(this);

        // Creates a TensorImage instance from Bitmap.
        TensorImage tensorImage = new TensorImage();
        tensorImage.load(bitmap);

        // Runs model inference and gets results.
        MobilenetQuantMetadata.Outputs outputs = model.process(tensorImage);
        TensorLabel tensorLabel = outputs.getProbabilityAsTensorLabel();
        Map<String, Float> probMap = tensorLabel.getMapWithFloatValue();

        for (Map.Entry<String, Float> entry : probMap.entrySet()) {
          Log.d(TAG, "label = " + entry.getKey() + ", prob = " + entry.getValue());
        }
    } catch (IOException e) {
       // Handles exception
    }
    

この例で示されるように、Android Studio はモデルを操作するための MobilenetQuantMetadata というクラスを作成します。

既知の問題と回避策

  • 現在、画像分類とスタイル転送以外の問題領域に対する TensorFlow Lite モデルのサポートは制限されています。インポートは正常に機能しますが、一部のモデル入力やモデル出力は、わかりやすい型ではなく TensorBuffers で表されます。メタデータのないモデルの場合、モデルの入力と出力はすべて TensorBuffer になります。
  • 20 MB を超える TensorFlow Lite モデルをサポートするには、IntelliJ IDE プロパティ idea.max.content.load.filesize をオーバーライドします。詳しくは、このページをご覧ください。
  • 入力データ型と出力データ型が DataType.UINT8 または DataType.FLOAT32 と異なるモデルは、サポートされていません。

この機能はまだ開発中ですので、フィードバックをお送りいただくか、バグをご報告ください

Jetpack Compose のサポート

Jetpack Compose ツールキットは、アプリの UI をビルドする最新の方法を提供します。 また、このツールキットにより、Kotlin の利点をあますところなく活用できるようになります。たとえば、Java と完全に相互運用可能である、簡潔で自然なコードを作成できます。

Jetpack Compose を使用して最適な開発を行うには、Android Studio 4.1 の最新バージョンを使用する必要があります。これは、Android Studio を使用して Jetpack Compose でアプリを開発する際に、新しいプロジェクト テンプレートや Compose UI をすぐにプレビューできるなど、スマート エディタの機能を活用できるためです。

詳細については、Jetpack Compose の概要をご覧ください。

デバッグビルドでのアサーション

デバッグ バージョンのアプリをデプロイする際、Java コード内のアサーションが有効になりました。Android ランタイムはランタイム時のアサーションの有効化(つまり -ea / -enableassertions フラグと同等のものを Java VM に渡すこと)をサポートしていないため、これまでアプリ内のアサーションは効果がありませんでした。

これからは、Android Gradle プラグイン 4.1.0-alpha01 以降でデバッグ バージョンのアプリをビルドしてデプロイすると、内蔵されたコンパイラ(D8)がコンパイル時のアサーションを有効にするようにコードを書き換えるため、アサーションのチェックが常に有効になります。

4.1 Preview に関する既知の問題

このセクションでは、Android Studio 4.1 Preview の現在判明している問題について説明します。

4.1 Canary 2 でパッチが機能しない

Android Studio 4.1 Canary 2 のパッチは現在機能しません。Android Studio 4.1 の新バージョンに更新するには、Android Studio をシャットダウンしてから最新のパッケージをダウンロードしてインストールします。

この問題は Android Studio 4.1 Canary 3 で修正されています。

CPU Profiler のタイムアウト エラー

[Sample Java Methods] 構成または [Trace Java Methods] 構成を選択すると、Android Studio の CPU Profiler で「記録が停止できませんでした」というエラーが発生する場合があります。多くの場合、特に idea.log ファイルに次のエラー メッセージが表示された場合、これはタイムアウト エラーです。

Wait for ART trace file timed out

タイムアウト エラーは、サンプリングされたメソッドよりもトレースされたメソッドに、短い記録よりも長い記録に影響を与える傾向があります。一時的な回避策として、短い記録を試して、エラーが消えるかどうかを確認することをおすすめします。

Profiler でタイムアウトの問題が発生した場合は、デバイスのメーカーやモデル、および idea.log と logcat の関連エントリを含むバグを報告してください。

IDE の Git バージョン管理エラー

Android Studio 4.1 Canary 1 の IDE では、Git バージョン管理での認証が必要なオペレーションが機能しません。

この問題を解決するには、Android Studio 4.1 Canary 2 にアップグレードしてください。

Android Studio 4.0

このセクションでは、Android Studio 4.0 の新機能や変更内容の概要について説明します。

CPU Profiler の UI アップグレード

システム トレース UI のアップグレード

フィードバックに基づいて、CPU Profiler の UI が一新され、より直感的なワークフローを提供します。主な変更点は、以下のとおりです。

  • CPU の記録がメインのプロファイラのタイムラインから切り離され、分析が容易になりました。記録されたデータは、[Profiler] ウィンドウの左側にグループ別に整理されています。グループを上下に移動してリストを再編成するには、ウィンドウの右上にあるオプションの  プロファイラのオプション アイコン をクリックするか、グループ内の個々のアイテムをドラッグ&ドロップします。
  • スレッド アクティビティのタイムライン内にあるすべてのスレッド アクティビティ(メソッド、関数、イベントなど)を表示できるようにし、対比分析を容易にしています。
  • [Flame Chart] タブ、[Top Down] タブ、[Bottom Up] タブの分析が、右側の列になりました。[Threads] グループのスレッドについて、システム トレースの記録の場合は自動的に展開され、他の記録形式の場合はデフォルトで折りたたまれています。スレッド名をダブルクリックして、スレッドを展開または折りたたむことができます。
  • 上記のスクリーンショットに示されるように、システム トレース UI も改善されています。 たとえば、イベントは簡単に区別できるように色分けされています。

この機能はまだ開発中のため、引き続きフィードバックをお寄せください

個別アノテーション処理機能を削除

個別アノテーション処理を専用のタスクに分割する機能は削除されました。このオプションは、Java のみのプロジェクトで非増分アノテーション プロセッサが使用されている場合において、増分 Java コンパイルの維持に使用されていました。有効化には gradle.properties ファイルで android.enableSeparateAnnotationProcessingtrue に設定する必要がありましたが、この設定はすでにご利用いただけません。

ビルド パフォーマンスを向上させるには、代わりに増分アノテーション プロセッサを使用するよう移行する必要があります。

[Build Speed] ウィンドウ

Android Gradle プラグイン 4.0.0-alpha03 以降で Android Studio 4.0 Canary 3 を使用する場合、最適化の無効化やタスクの不適切な設定など、ビルドプロセスの問題を理解および診断するうえで [Build Speed] ウィンドウが役に立ちます。Android Studio 4.0 Canary 3 以降と Android Gradle プラグイン 4.0.0-alpha03 以降を使用している場合、[Build Speed] ウィンドウを開くには次の手順を行います。

  1. まだアプリのビルドを行っていない場合は、メニューバーから [Build] > [Make Project] を選択してアプリをビルドします。
  2. メニューバーから [View] > [Tool Windows] > [Build] を選択します。
  3. [Build] ウィンドウで、次のいずれかの方法により [Build Speed] ウィンドウを開きます。
    • Android Studio でプロジェクトのビルドが完了したら、[Build Speed] タブをクリックします。
    • Android Studio でプロジェクトのビルドが完了したら、[Build Output] ウィンドウの右側のリンクをクリックします。

[Build Speed] ウィンドウの左側のツリーには、起こり得るビルドの問題がまとめられます。各問題をクリックすると、右側のペインで詳細を調べることができます。Android Studio を使ってビルドを分析すると、ビルド時間を決定付けたタスクセットを求め、各タスクの影響を可視化して把握しやすいようにできます。[Warnings] ノードを展開して、警告の詳細を確認することもできます。

ビルド速度のグラフ

ビルド時間を決定付けているタスクはどれか

Gradle は、タスクの相互依存、プロジェクト構造、CPU 負荷によってタスクの実行を決定し、タスクを順次または並列に実行します。指定したビルドの [Build Speed] ウィンドウには、現在のビルドの時間を決定付けたタスクセットがハイライト表示されます。このようにハイライト表示されたタスクの非効率性に対処することが、全体のビルド時間を短縮するうえで最適な出発点であると言えます。

ビルドを実行するたびにビルド時間を決定するタスクセットが異なる場合がありますので、ご注意ください。たとえば、ビルド構成に変更を加える場合、異なるタスクセットでビルド(増分ビルドなど)を実行する場合、さまざまな制約(重い CPU 負荷など)下でビルドを実行する場合には、[Build Speed] ウィンドウでハイライト表示されるタスクセット(ビルド時間に最も影響を与えたタスクセット)が変わってくることがあります。このような変動が見られるため、ビルド時間を確実に短縮するには、複数のビルドで [Build Speed] ウィンドウを使用することをおすすめします。

Live Layout Inspector

更新された Live Layout Inspector を使用してレイアウトをデバッグします。これにより、デバイスにデプロイされているアプリの UI を包括的にリアルタイムで分析できます。

[Layout Inspector] ウィンドウを開くには、[View] > [Tools Windows] > [Layout Inspector] に移動します。Live Layout Inspector は、既存の Layout Inspector とほぼ同じ機能を備えていますが、以下の機能も提供します。

  • 動的レイアウト階層: デバイスのビューが変更されると更新されます。

動的レイアウト階層

  • プロパティ値解決スタック: リソース プロパティ値がソースコードのどこにあるかを調査し、プロパティ ペインのハイパーリンクを辿ってその場所に移動します。

プロパティ値解決スタック

  • 3D ビュー: 高度な 3D 視覚化により、ランタイム時にアプリのビュー階層を表示します。この機能を使用するには、[Live Layout Inspector] ウィンドウでレイアウトをクリックして回転させます。

Layout inspector: 3D ビュー

Live Layout Inspector を使用できるのは、API レベル 29 以降を搭載するデバイスにアプリをデプロイする場合のみです。また、[File] > [Settings] > [Experimental] に移動し、[Enable Live Layout Inspector] の横にあるチェックボックスをオンにする必要もあります。

Multi Preview

Multi Preview は、さまざまなデバイスや設定のレイアウトを同時にプレビューするビジュアル ツールで、レイアウトに関する潜在的な問題を検出するのに役立ちます。

この機能にアクセスするには、IDE ウィンドウの右上にある [Multi Preview] タブをクリックします。

Multi Preview タブ

Pixel デバイスとプロジェクト ロケールの 2 つの設定セットから選択できます。これらの設定セットを切り替えるには、[Multi Preview] ウィンドウの上部にあるプルダウン メニューから選択します。

Multi Preview のデモ

Java 8 ライブラリの desugaring が含まれる D8 と R8

Android Studio では、アプリの最小 API レベルを必要とせずに、多数の Java 8 言語 API の使用がサポートされています。

desugaring と呼ばれるプロセスにより、Android Studio 3.0 以降の DEX コンパイラ D8 はすでに、Java 8 言語機能(ラムダ式、デフォルトのインターフェース メソッド、リソースの試用など)の実質的なサポートを提供しています。Android Studio 4.0 では desugaring エンジンが拡張され、Java 言語 API を desugar できるようになりました。つまり、最近の Android でしか使用できなかった標準的な言語 API(java.util.streams など)を古いバージョンの Android アプリでも使用できるようになりました。

このリリースでは次の API がサポートされています。

  • 連続ストリーム(java.util.stream
  • java.time のサブセット
  • java.util.function
  • java.util.{Map,Collection,Comparator} の最新の追加 API
  • オプション(java.util.Optional, java.util.OptionalIntjava.util.OptionalDouble)および上記の API で役立つその他の新しいクラス
  • java.util.concurrent.atomic の追加 API(AtomicIntegerAtomicLongAtomicReference の新しいメソッド)
  • ConcurrentHashMap(Android 5.0 のバグを修正)

上記言語 API のサポートのため、D8 は不足している API の実装を含む単独のライブラリ DEX ファイルをコンパイルし、この実装をアプリに追加します。desugar プロセスはアプリのコードを書き換えて、ランタイム時に代わりにこのライブラリを使用するようにします。

このような言語 API のサポートを有効にするには、モジュールの build.gradle ファイルに以下を記述します。

android {
      defaultConfig {
        // Required when setting minSdkVersion to 20 or lower
        multiDexEnabled true
      }

      compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }

    dependencies {
      coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
    }
    

問題が発生した場合や、サポートしてほしい他の API がある場合は、Google のバグトラッカーでバグとして報告してください。

Kotlin DSL スクリプト ファイルのサポート

Android Gradle プラグインは、Kotlin DSL ビルド スクリプト ファイル(*.kts)をサポートするようになりました。Android Studio で使用する場合、[Project Structure] ダイアログやビルド スクリプトのクイック修正のような特定の IDE 機能で、Kotlin ビルド スクリプト ファイルの読み書きもサポートされるようになりました。

ProGuard ルールのスマート エディタ機能

ProGuard ルールファイルを開いた場合に、構文のハイライト表示、コード補完、エラーチェックなどのスマート エディタ機能を使用できるようになりました。また、エディタでは Android Studio プロジェクトと統合して、すべてのクラス、メソッド、フィールドの完全なシンボル補完、クイック ナビゲーションとリファクタリングも可能です。

ProGuard ルールファイル編集時のスマート エディタ機能

新しい Motion Editor

Android Studio に MotionLayout レイアウト タイプのビジュアル デザイン エディタが追加され、アニメーションの作成やプレビューが簡単になりました。

Motion Editor は、MotionLayout ライブラリ(Android アプリのアニメーションの基盤として機能)の要素を操作するシンプルなインターフェースを提供します。以前のリリースでは、こうした要素を作成および変更するには、XML リソース ファイル内の制約を手動で編集する必要がありました。Motion Editor により、この XML を生成して、開始と終了の状態、キーフレーム、遷移、タイムラインをサポートできるようになりました。

MotionLayout を使用するには:

  1. ConstraintLayout を作成します。
  2. Layout Editor でプレビューを右クリックします。
  3. [Convert to MotionLayout] をクリックします。

Android Studio で ConstraintLayout が MotionLayout に変換されると、Motion Scene ファイルも XML を含むディレクトリに追加されます。

その後、MotionLayout がルート レイアウトになり、Motion Editor の UI に表示されます。レイアウトにはすでに開始の ConstraintSet、終了の ConstraintSet、開始から終了までの遷移が含まれています。

概要グラフィックを使用すると、ConstraintSet または Transition を選択し、選択パネルでコンポーネントを選択できます。

その後、ConstraintLayout の編集と同じ方法で、開始または終了の ConstraintSet のいずれかについて制約と属性を編集できます。

グラフでさらに要素を作成する場合は、作成アイコンを使用すると ConstraintSetTransition、またはOnClick / OnSwipe ジェスチャーをすばやく作成できます。

キーフレームを追加するには、まず Transition の矢印をクリックします。

次に [Transition] タイムライン ペインで、右上隅をクリックして [KeyPosition] を選択します。

キーフレームの属性を設定するダイアログが開きます。

属性パネルの Transition に OnClick および OnSwipe ハンドラを追加することもできます。

追加すると、ターゲット コンポーネントやドラッグ方向など、クリックの属性を設定するダイアログが開きます。

Motion Editor では、デザイン サーフェスでのアニメーションのプレビューがサポートされています。アニメーションを選択したら、タイムラインの上にある Play をクリックして、アニメーションをプレビューできます。

Android Gradle プラグイン 4.0.0 の新機能

このセクションでは、Android Gradle プラグイン 4.0.0 に含まれる新機能と動作の変更点について説明します。

ビルド機能を有効または無効にする新しいオプション

Android Gradle プラグイン 4.0.0-alpha05 では、ビュー バインディング、データ バインディング、Jetpack Compose などのように、有効または無効にするビルド機能を新しい方法で制御できます。新しい機能が追加されると、デフォルトで無効になります。 その場合は、buildFeatures ブロックを使用して、必要な機能のみを有効にできます。これにより、プロジェクトのビルド パフォーマンスを最適化できます。各モジュールのオプションは、モジュール レベルの build.gradle で次のように設定できます。

    android {
        // The default value for each feature is shown below. You can change the value to
        // override the default behavior.
        buildFeatures {
            // Determines whether to generate a BuildConfig class.
            buildConfig = true
            // Determines whether to support View Binding.
            // Note that the viewBinding.enabled property is now deprecated.
            viewBinding = false
            // Determines whether to support Data Binding.
            // Note that the dataBinding.enabled property is now deprecated.
            dataBinding = false
            // Determines whether to generate binder classes for your AIDL files.
            aidl = true
            // Determines whether to support RenderScript.
            renderScript = true
            // Determines whether to support injecting custom variables into the module's R class.
            resValues = true
            // Determines whether to support shader AOT compilation.
            shaders = true
        }
    }
    

以下に示すように、プロジェクトのすべてのモジュールでこのような機能のデフォルト設定を指定することもできます。これには、プロジェクトの gradle.properties ファイルに次のうち 1 つ以上を指定します。ただし、モジュール レベルの build.gradle ファイルで buildFeatures ブロックを使用すると、これらのプロジェクト全体のデフォルト設定をオーバーライドできます。

android.defaults.buildfeatures.buildconfig=true
    android.defaults.buildfeatures.aidl=true
    android.defaults.buildfeatures.renderscript=true
    android.defaults.buildfeatures.resvalues=true
    android.defaults.buildfeatures.shaders=true
    

Feature-on-Feature 依存関係

以前のバージョンの Android Gradle プラグインでは、すべての Dynamic Feature モジュールはアプリのベース モジュールのみに依存していました。Android Gradle プラグイン 4.0.0 を使用する場合、別の機能モジュールに依存する機能モジュールを含めることができるようになりました。つまり、以下の図に示すとおり、:video 機能は、ベース モジュールに依存する :camera モジュールに依存することが可能です。

Feature on Feature 依存関係

動的機能 :video は、:app ベース モジュールに依存する機能 :camera に依存します。

つまり、アプリによって動的機能モジュールのダウンロードがリクエストされると、その機能モジュールに依存する他の機能モジュールもダウンロードされます。アプリの動的機能モジュールを作成した後、モジュールの build.gradle ファイルで Feature-on-Feature 依存関係を宣言できます。たとえば、:video モジュールで :camera に対する依存関係を宣言する場合、次のようになります。

// In the build.gradle file of the ':video' module.
    dependencies {
        // All dynamic feature modules must declare a dependency
        // on the base module.
        implementation project(':app')
        // Declares that this module also depends on the 'camera'
        // dynamic feature module.
        implementation project(':camera')
        ...
    }
    

また、メニューバーから [Help] > [Edit Custom VM Options] をクリックして以下の行を含め、Android Studio の Feature-on-Feature 依存関係機能を有効にする必要があります(たとえば、実行構成の編集時にこの機能をサポートするため)。

-Drundebug.feature.on.feature=true
    

Android Gradle プラグインから「feature」と「instantapp」を削除

Android Gradle プラグイン 3.6.0 から、Android App Bundle による Instant App のビルドとパッケージ化を行う Dynamic Feature プラグイン(com.android.dynamic-feature)の使用を優先し、Feature プラグイン(com.android.feature)と Instant App プラグイン(com.android.instantapp)のサポートを終了しました。

Android Gradle プラグイン 4.0.0-alpha01 以降では、サポート終了済みの上記プラグインは完全に削除されています。このため、最新の Android Gradle プラグインを使用するには、Android App Bundle に対応できるように Instant App を移行する必要があります。 Instant App を移行すると、App Bundle のメリットを生かして、アプリのモジュール設計を簡素化できます。

依存関係のメタデータ

Android Gradle プラグイン 4.0.0-beta02 以降を使用してアプリをビルドする場合、アプリにコンパイルされる依存関係を記述するメタデータがプラグインに含まれます。アプリをアップロードすると、Play Console でこのメタデータが検査され、次のようなメリットがあります。

  • アプリで使用する SDK と依存関係に関する既知の問題のアラートを取得する
  • これらの問題を解決するための実用的なフィードバックを受け取る

データは圧縮され、Google Play の署名鍵で暗号化され、リリースアプリの署名ブロックに保存されます。ただし、ディレクトリ <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt のローカル中間ビルドファイルでは自分でメタデータを検査できます。

この情報を共有したくない場合は、モジュールの build.gradle ファイルに次の情報を含めることでオプトアウトできます。

android {
        dependenciesInfo {
            // Disables dependency metadata when building APKs.
            includeInApk = false
            // Disables dependency metadata when building Android App Bundles.
            includeInBundle = false
        }
    }
    

Kotlin Android ライブ テンプレート

Android Studio には、Kotlin クラスの Android ライブ テンプレートが含まれています。たとえば、toast をタップし、Tab キーを入力すると、Toast をすばやく挿入できます。利用可能なライブ テンプレートの全リストについては、メニューバーの [File] > [Settings](macOS を使用している場合は、[Android Studio] > [Preferences])をクリックして [Editor] > [Live Templates] に移動します。

[Fragment] ウィザードと新しいフラグメント テンプレート

[New Android Fragment] ウィザードと新しいフラグメント テンプレートが利用できるようになりました。利用するには、[File] > [New] > [Fragment] > [Gallery] に移動するか、Navigation エディタで [Create new destination] をクリックします。

Fragment ギャラリー ウィザード。

Fragment ギャラリー ウィザード。

AAR 依存関係からネイティブ ライブラリをインポートする

Android Gradle プラグイン 4.0 Canary 9 以降では、アプリの AAR 依存関係から C/C++ ライブラリをインポートできます。以下で説明する構成手順に従うと、Gradle により自動的にこれらのネイティブ ライブラリが CMake などの外部ネイティブ ビルドシステムで使用できるようになります。Gradle はこれらのライブラリをビルドで使用できるようにするだけなので、これらを使用するには、ビルド スクリプトを構成する必要があります。

ライブラリは、Prefab パッケージ形式を使用してエクスポートされます。

各依存関係は、1 つ以上のモジュールで構成される Prefab パッケージを 1 つだけ公開できます。Prefab モジュールは単一のライブラリで、共有ライブラリ、静的ライブラリ、ヘッダーのみのライブラリのいずれかです。

通常、パッケージ名は Maven アーティファクト名と一致し、モジュール名はライブラリ名と一致しますが、常に一致するとは限りません。ライブラリのパッケージとモジュール名を知る必要があるため、依存関係のドキュメントを参照して名前を確認する必要があります。

外部ネイティブ ビルドシステムを構成する

必要な手順を確認するには、使用する予定の外部ネイティブ ビルドシステムをクリックします。

AAR に含まれるネイティブ依存関係は、CMake_Find_root_PATH を介して CMake プロジェクトに公開されます。この値は、CMake が呼び出されたときに Gradle によって自動的に設定されるため、ビルドでこの変数を変更する場合は、割り当てるのではなく追加する必要があります。

各依存関係は、CMake ビルドに config-file パッケージを公開します。これは find_package コマンドでインポートします。このコマンドは、指定されたパッケージ名とバージョンに一致する config-file パッケージを検索し、ビルドで使用するために定義したターゲットを公開します。たとえば、アプリで libapp.so を定義し curl を使用する場合は、CMakeLists.txt ファイルに次のように記述します。

add_library(app SHARED app.cpp)

    # Add these two lines.
    find_package(curl REQUIRED CONFIG)
    target_link_libraries(app curl::curl)
    

app.cpp#include "curl/curl.h" を指定できるようになりました。プロジェクトをビルドすると、外部ネイティブ ビルドシステムによって自動的に、APK または App Bundle の libcurl.so とパッケージ libcurl.solibapp.so がリンクされます。

4.0 Preview に関する既知の問題

このセクションでは、Android Studio 4.0 Preview の現在判明している問題について説明します。

ベータ版 4 で Build Analyzer が無効になっている

Android Studio 4.0 ベータ版 4 では、Build Analyzer が無効になっています。ベータ版 5 で再び有効になります。

CPU Profiler のタイムアウト エラー

[Sample Java Methods] 構成または [Trace Java Methods] 構成を選択すると、Android Studio の CPU Profiler で「記録が停止できませんでした」というエラーが発生する場合があります。多くの場合、特に idea.log ファイルに次のエラー メッセージが表示された場合、これはタイムアウト エラーです。

Wait for ART trace file timed out

タイムアウト エラーは、サンプリングされたメソッドよりもトレースされたメソッドに、短い記録よりも長い記録に影響を与える傾向があります。一時的な回避策として、短い記録を試して、エラーが消えるかどうかを確認することをおすすめします。

Profiler でタイムアウトの問題が発生した場合は、デバイスのメーカーやモデル、および idea.log と logcat の関連エントリを含むバグを報告してください。

4.0 ベータ版 2 でパッチが機能しない

Android Studio 4.0 ベータ版 2 のパッチは現在機能しません。Android Studio 4.0 の新バージョンに更新するには、Android Studio をシャットダウンしてから、最新のパッケージをダウンロードしてインストールします。

この問題は Android Studio 4.0 ベータ版 3 で修正されています。

IDE の Git バージョン管理エラー

Android Studio 4.0 ベータ版 1 の IDE では、Git バージョン管理での認証が必要なオペレーションが機能しません。

この問題を解決するには、Android Studio 4.0 ベータ版 2 以降にアップグレードしてください。

ツールバーにある実行、デバッグ、プロファイルの各ボタンがない

操作ボタンの [Run/Debug] グループをカスタマイズした場合([Settings] ウィンドウまたは [Preferences] ウィンドウの [Appearance & Behavior] > [Menus and Toolbars] ウィンドウにあるオプションを編集した場合など)、IDE を再起動すると、ツールバーから操作ボタンが消えることがあります。これは、Android Studio 4.0 がベースとしている IntelliJ バージョンの既知の問題です(問題 IDEA-228450 を参照)。

この問題を解決するには、これらのボタンに行ったカスタマイズを次のように元に戻します。

  1. [File] > [Settings](macOS の場合、[Android Studio] > [Preferences] を選択します。
  2. ウィンドウの左側で [Appearance & Behavior] > [Menus and Toolbars] に移動します。
  3. ウィンドウの右側で [Main Toolbar] > [Toolbar Run Actions] に移動し、[Run/Debug] を選択します。
  4. ウィンドウ上部近くにある Revert をクリックし、[Restore Run/Debug] を選択します。
  5. [OK] をクリックします。見つからなかったボタンがツールバーに表示されます。

Canary 5 で利用できないパッチ

Android Studio 4.0 Canary 5 のパッチは、以前にリリースされた Android Studio 4.0 Canary バージョンでは利用できません。Android Studio 4.0 Canary 5 をインストールするには、Android Studio ダウンロード ページからダウンロードしてください。

Canary 5 の Profiler と Live Layout Inspector

Android Studio 4.0 Canary 5 以降、Windows で Live Layout Inspector と Profiler が正しく動作しないため、次のエラー メッセージが表示されます。

    transfer error: couldn't create file: Read-only file system.
    

この問題を解決するには、Android Studio 4.0 Canary 7 以降にアップグレードしてください。

Kotlin Maven リポジトリがない

Android Studio 4.0 Canary 4 以下を使用している場合、次のエラー メッセージが表示されることがあります。

Application build has failed with an error (Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25)
    

この問題を解決するには、Android Studio 4.0 Canary 5 以降に更新してください。

ネイティブ依存関係を含むアプリをデプロイすると IllegalStateException が発生する

アプリにネイティブ依存関係が含まれていて、androidParallelJsonGen=true(デフォルト)がある場合、Android Studio からアプリをデプロイすると、IllegalStateException という例外が発生します。この問題を回避するには、プロジェクトの gradle.properties ファイルで android.enableParallelJsonGen=false を設定します。詳しくは、問題 149575364 をご覧ください。

ネイティブ依存関係を含む問題

現在、Android Gradle プラグインはデフォルトで旧バージョンの Prefab になっていますが、いくつかの既知の問題があります。

  • ライブラリへのパスが Windows で誤ってエスケープされる。
  • CMake プラグインが静的ライブラリを誤ってエクスポートする。
  • 有効な STL の組み合わせが誤って拒否される場合がある。

Prefab の最新バージョンでは、これらの問題の修正が行われています。最新バージョンの Prefab を使用するには、プロジェクトの gradle.properties ファイルで android.prefabVersion1.0.0-alpha6 以上に設定します。