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

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

Android Studio 3.5 は現在、Beta チャンネルにリリースされています。

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

このページでは、上記のプレビュー版における新機能や変更内容について説明します。

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

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

Android Studio 3.5

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

Project Marble のアップデート

Project Marble は、システムの健全性と機能の質を大幅に高め、バグを減らすための Android Studio イニシアティブです。この目標に向けて、Android Studio 3.5 では次のようなさまざまな点が改善されています。

  • エディタ ウィンドウの UI レイテンシを削減し、Data Binding ライブラリ使用時のスマート エディタ機能を改善しました。
  • 増分アノテーション処理により、ビルド速度を改善しました。
  • Android NDK 使用時のパフォーマンスを改善しました。
  • メモリリークを抑えることにより、lint チェックのパフォーマンスを改善しました。
  • Windows において、新しい通知アクションを導入し、ウィルス対策ソフトウェアに起因するビルド速度の低下を緩和しました。
  • Android Emulator 使用時の CPU 使用率を大幅に削減しました。
  • 削除するビルド キャッシュの調整により、Gradle 同期のパフォーマンスを改善しました。
  • アップデート機能を改善しました。IDE や Android Gradle Plugin の更新が容易になるよう、詳細な情報とアクションを提供します。
  • Layout Editor のパフォーマンスと UX を改善しました。

Project Marble のアップデートの詳細については、Android デベロッパー ブログの記事や下記のセクションをご覧ください。

増分アノテーション処理

Android Gradle Plugin 3.5.0-beta01 以降を使用している場合、さらに多くのアノテーション プロセッサが増分 Java コンパイルをサポートするようになりました(データ バインディングなど)。この最適化により、増分ビルドのパフォーマンスが向上しています。完全なリストについては、増分アノテーション プロセッサの表をご覧ください。

また、KAPT 1.3.30 以降でも、増分アノテーション プロセッサがサポートされます。これは、gradle.properties ファイルに kapt.incremental.apt=true を追加することで有効にできます。

メモリ管理設定

5 GB 以上の RAM を搭載した 64 ビット オペレーティング システムを使用している場合、OS が Android Studio プロセス(コア IDE、Gradle デーモン、Kotlin デーモンなど)に割り当てる RAM の最大量を設定できるようになりました。この設定を使用して、各プロセスに最適なメモリ量を割り当てることで、Android Studio のパフォーマンスを高めることができます。

Android Studio プロセス用の RAM の最大量を設定できるメモリ設定

図 1: Android Studio のメモリ設定

この新しい設定にアクセスするには、[File] > [Settings](macOS の場合は [Android Studio] > [Preferences])を選択して、[Appearance & Behavior] > [System Settings] にある [Memory Settings] セクションを見つけます。

メモリ使用状況レポート

Android Studio で生じるメモリの問題は、再現して報告することが難しい場合があります。この問題を解決するため、Android Studio にメモリ使用状況レポート機能が搭載されました。このレポートを Android Studio チームに送信することで、メモリ問題の原因特定が促進されます。プレビュー版(Canary、Beta、リリース候補)の場合、Android Studio は、メモリ使用量を自動的にモニタリングして、メモリ不足しきい値に頻繁に到達していることを検出すると、メモリヒープ分析をトリガーします。

ヒープ分析をトリガーすると、Android Studio は、ヒープダンプをローカルでキャプチャし、次回 Android Studio を実行したときにヒープダンプを分析します。分析中、Android Studio は個人データをすべて削除し、メモリ状態の概要データを作成します。この概要データには、クラスとオブジェクトのインスタンスや、異常に大きいメモリ割り当ての参照パスが含まれます。

分析が完了すると、Android Studio は検証用のレポートを生成して、通知を表示します(図 2 を参照)。[Review Report] をクリックすると、メモリ使用状況レポートの内容が表示されます。

検証用のメモリ使用状況レポートの準備が整ったことを示す通知

図 2: 検証用のメモリ使用状況レポートの準備が整ったことを示す通知

レポートを送信する前に、レポートに含まれているすべての情報を確認できます(図 3 を参照)。確認が済んだら、[Send] をクリックします。Android Studio チームがレポートを検証して、発生した問題の調査と解決に取り組みます。

メモリ使用状況レポート

図 3: メモリ使用状況レポート

メモリ使用状況レポートを手動で作成するには、メニューバーから [Help] > [Analyze Memory Usage] を選択します。このオプションを選択すると、Android Studio はヒープをダンプし、IDE を再起動するよう求めるプロンプトを表示します。IDE を再起動すると、ヒープダンプ分析がすぐに開始されます。IDE を再起動しなかった場合は、次回 Android Studio を実行したときにヒープダンプ分析が開始されます。いずれの場合でも、検証用のメモリ使用状況レポートの準備が整うと、IDE が通知を表示します。

動的機能モジュールの条件付き配信

条件付き配信を使用すると、アプリのインストール時に動的機能モジュールを自動的にダウンロードするためのデバイス設定要件を指定できます。たとえば、AR(拡張現実)用の機能を含む動的機能モジュールに関して、AR をサポートするデバイスの場合に限り、アプリのインストール時に利用可能にするよう設定できます。

現在のところ、この配信メカニズムは以下のデバイス設定に基づいて、アプリのインストール時にモジュールをダウンロードするか制御することができます。

指定したすべての要件をデバイスが満たしていない場合、モジュールはアプリのインストール時にダウンロードされません。ただし、アプリは後で、Play コアライブラリを使用してオンデマンドでモジュールをダウンロードするようリクエストすることができます。

この機能の利用を開始する前に、Android Studio 3.5 Canary 11 以降を使用していることを確認してください。

以下のセクションで、動的機能モジュールに条件付き配信のサポートを追加する手順を示します。なお、動的機能モジュールを備えたアプリを Google Play に公開するには、ベータ プログラムに参加する必要があります。

条件付き配信オプションに対応した新しいモジュールを追加する

条件付き配信に対応した新しい動的機能モジュールを作成する場合、以下のように [New Module] ウィザードを使用すると最も簡単に作成できます。

  1. [New Module] ダイアログを開くには、メニューバーから [File] > [New] > [New Module] を選択します。
  2. [New Module] ダイアログで、[Dynamic Feature Module] を選択して、[Next] をクリックします。
  3. 通常どおりモジュールを設定して、[Next] をクリックします。
  4. ダイアログの [Module Download Options] セクションで、次の選択肢の中から [Only include module at app install for devices with specified features] 選択します。
    • Do not include include module at app install (on-demand): アプリがサポートする API レベル(API レベル 21 以上)を搭載しているすべてのデバイス設定を対象に、常にオンデマンド ダウンロードとして利用可能なモジュールを作成します。
    • Include module at install-time: アプリのインストール時に常にアプリと一緒に組み込まれるモジュールを作成します。
    • Only include module at install-time for devices with specified features: 指定した特定のデバイス設定(デバイス機能や国など)を持つデバイスに限り、アプリのインストール時にアプリと一緒に組み込まれるモジュールを作成します。
  5. モジュールの自動ダウンロードを特定の国や最小 API レベルに制限する場合は、[Finish] をクリックしてモジュールの作成を完了した後、最小 API レベルに基づく条件を指定します。手順については、下記のセクションをご覧ください。

    それ以外の条件の場合は、[+ device feature] をクリックして、インストール時にモジュールをダウンロードするうえでデバイスが必要とする機能を追加します。

  6. [device-feature] の横にあるプルダウン メニューから、次のオプションのいずれかを選択して、その値を指定します。

    • Name: インストール時にモジュールをダウンロードするうえでデバイスが必要とするハードウェアまたはソフトウェアの機能を指定できます。条件付き配信がサポートする機能は、PackageManager によって FEATURE_* 定数としてリスト表示されるものと同じです。

      このオプションを選択した場合、プルダウンの横にあるフィールドで、機能の定数値(「bluetooth」など)の入力を開始し、表示された候補の中からいずれかを選択します。

    • OpenGL ES Version: インストール時にモジュールをダウンロードするうえでデバイスが必要とする OpenGL ES のバージョンを指定できます。このオプションを選択した場合、プルダウンの横にあるフィールドで、バージョン(「0x00030001」など)の入力を開始し、表示された候補の中からいずれかを選択します。

  7. 利用可能なデバイス機能に基づく条件を複数追加する場合は、指定するデバイス機能条件ごとに [+ device feature] をクリックします。

  8. モジュール ダウンロード オプションの設定が完了したら、[Finish] をクリックします。

Android Studio が動的機能モジュールの作成を完了したら、そのマニフェストを検査して、<dist:delivery> ノードで指定されている条件を確認します。たとえば、次のようになります。

<manifest ...>
      <dist:module ...>
        <dist:delivery>
          <dist:install-time>
            <dist:conditions>
              <!-- Requires that the device support AR to download the module at
              app install-time.  -->
              <dist:device-feature dist:name="android.hardware.camera.ar"/>
            </dist:conditions>
          </dist:install-time>
        </dist:delivery>
        ...
      </dist:module>
    </manifest>
    

条件付き配信オプションを既存の動的機能モジュールに追加する

モジュールのマニフェストを使用すれば、既存の動的機能モジュールに条件付き配信オプションを簡単に追加できます。ただし、追加する前に、条件付き配信オプションと、すでに有効になっている可能性のある他の配信オプションとの互換性について確認する必要があります。

追加する際はまず、マニフェストを新しい <dist:delivery> 要素に移行する必要があります。古い構文の例を以下のコード スニペットに示します。

<dist:module
      dist:title="@string/title_dynamic_feature" dist:onDemand="true">
      <dist:fusing dist:include="true"/>
    </dist:module>
    

上記の配信オプションは、現在では次のように指定します。

<dist:module
      dist:title="@string/title_dynamic_feature">
      <dist:delivery>
          <dist:on-demand/>
      </dist:delivery>
      <dist:fusing dist:include="true"/>
    </dist:module>
    

移行後、デバイス機能に基づく条件付き配信オプションを追加するには、次のように設定します。

<dist:module
        dist:title="@string/title_dynamic_feature">
        <dist:delivery>
          <dist:on-demand/>
          <dist:install-time>
            <dist:conditions>
              <!-- Requires that the device support AR to download the module at
              app install-time.  -->
              <dist:device-feature dist:name="android.hardware.camera.ar"/>
            </dist:conditions>
          </dist:install-time>
        </dist:delivery>
        <dist:fusing dist:include="true"/>
    </dist:module>
    

以下のセクションでは、国や最小 API レベルなど、条件付き配信の他のオプションについて説明します。

他のモジュール ダウンロード オプションとの互換性

動的機能モジュールには、各機能をユーザーのデバイスに配信する方法を設定するオプションが複数用意されているため、条件付き配信オプションが他の設定によってどのように影響を受けるのか把握しておくことが重要です。条件付き配信と他のモジュール ダウンロード オプションとの互換性について以下の表に示します。

モジュール ダウンロード オプション 条件付き配信との互換性
融合(<dist:fusing dist:include="true"/> モジュールに対してこのオプションを true に設定している場合、API レベル 19 以下を搭載しているデバイスにアプリをデプロイする際、指定した条件付き配信オプションは Google Play によって無視されます。つまり、API レベル 19 以下を搭載しているデバイスの場合、融合を有効にしている動的機能モジュールは、インストール時に常に組み込まれます。
Instant 対応(<dist:module dist:instant="true"/> Instant 対応の動的機能モジュールは、条件付き配信オプションをサポートしていません。
オンデマンド(<dist:on-demand/> デフォルトでは、条件付き配信オプションを指定した場合、モジュールはオンデマンドでも利用できます。

国に基づく条件を指定する

条件付き配信を使用すると、アプリのインストール時にモジュールをダウンロードする対象から除外する(あるいは対象に含める)国を指定することもできます。たとえば、特定の地域では利用できない支払い方法を実装しているモジュールの場合、この条件を指定すると便利です。

この条件の基準となるデバイスの「国」は通常、Google Play アカウントに登録されているユーザーの請求先住所によって判断されます。

モジュールの対象国を指定するには、動的機能モジュールのマニフェストに以下の設定を追加します。

<dist:conditions>
       <!-- Specify "true" to specify countries to exclude from downloading
       this module at app install-time, or "false" to specify countries that should
       download the module. By default, this is set to “false”. -->
      <dist:user-countries dist:exclude="true">
        <!-- Specifies the two-letter  CLDR country code for regions that should
        not download the module at app install-time. -->
        <dist:country dist:code="CN"/>
        <dist:country dist:code="HK"/>
      </dist:user-countries>
    </dist:conditions>
    

最小 API レベルに基づく条件を指定する

特定の Android プラットフォーム バージョンだけで利用可能な API に依存する動的機能モジュールの場合、デバイスの API レベルに基づく条件を指定すると便利です。

デバイスの最小 API レベルに基づく条件を設定するには、動的機能モジュールのマニフェストに以下の設定を追加します。なお、条件として指定する API レベルは、モジュール自体の minSdkVersion 以上に設定する必要があります。

<dist:conditions>
        <!-- Specifies the minimum API level that the device must satisfy
              in order to download your module at app app install-time. -->
       <dist:min-sdk dist:value="24"/>
    </dist:conditions>
    

Apply Changes

Apply Changes を使用すると、アプリを再起動せずに(場合によっては、現在のアクティビティを再起動せずに)、実行中のアプリに対してコードやリソースの変更をプッシュすることができます。Apply Changes は、アプリの状態を保持するためのまったく新しいアプローチを実現します。APK のバイトコードを書き換える Instant Run とは異なり、Apply Changes は、Android 8.0(API レベル 26)以降でサポートされているランタイム インストルメンテーションを活用して、オンザフライでクラスを再定義します。

Apply Changes を使用する手順は次のとおりです。

  • 現在のアクティビティを再起動せずにコードの変更だけを適用する場合は、[Apply Code Changes](Apply Code Changes アイコン)をクリックするか、Ctrl+Alt+F10(macOS の場合は Command+Shift+Ctrl+R)を押します。

    一般に、メソッド本体のコードを変更したがリソースは変更していない場合、[Apply Code Changes] を使用します。リソースも変更した場合は、代わりに [Apply Changes and Restart Activity] を使用します。

  • アプリを再起動せずにリソースやコードの変更を適用する場合は、[Apply Changes and Restart Activity](Apply Changes アイコン)をクリックするか、Ctrl+F10(macOS の場合は Command+Ctrl+R)を押します。

    このオプションを使用すると、アプリを再起動せずに現在のアクティビティを再起動することで、リソースやコードの変更を適用できます。

Apply Changes に対する代替実行を有効にする

アプリを再起動しなければ変更を適用できない場合、アプリをもう一度実行Run アイコン)するよう求めるプロンプトが表示されます。ただし、この状況が発生するたびにプロンプトを表示したくない場合は、変更を適用できないときに自動的にアプリを実行するよう Android Studio を設定することができます。

この動作を有効にする手順は次のとおりです。

  1. [Settings] ダイアログまたは [Preferences] ダイアログを開きます。

    • Windows または Linux の場合、メニューバーから [File] > [Settings] を選択します。
    • macOS の場合、メニューバーから [Android Studio] > [Preferences] を選択します。
  2. [Build, Execution, Deployment] > [Deployment] に移動します。

  3. いずれかの Apply Changes アクションの自動代替実行を有効にするチェックボックスをオンにします。

  4. [OK] をクリックします。

制限事項

Apply Changes には以下の制限があります。

  • Apply Changes を利用できるのは、Android 8.0(API レベル 26)以降を搭載しているデバイスに限られます。
  • Instant Run の場合と同様、コード変更を適用する際、アプリの再起動が必要となることがあります。たとえば、以下のようなコード変更が該当します。
    • クラス、メソッド、フィールドの追加や削除
    • マニフェストの変更
    • メソッド シグネチャの変更
    • メソッドやクラスの修飾子の変更
    • クラス名の変更
    • クラス継承の変更
    • リソースの追加や削除
    • ネイティブ ライブラリ(.so ファイル)の変更
    • 列挙型内の値の変更

既知の問題

Apply Changes に関しては、以下の問題が報告されています。

  • Apply Changes は、Instant Run よりも速度が遅い場合があります。これは安定性を優先した結果であり、今後も継続してパフォーマンスの改善に取り組んでいきます。
  • システムおよびアプリのスレッド コンテキスト以外のカスタム クラスローダを使用すると、予期しない動作が発生する場合があります。

IntelliJ IDEA 2019.1

テーマのカスタマイズなど、IntelliJ IDEA 2019.1 リリースによる改善に伴い、コアの Android Studio IDE が更新されました。

これには、以下のバグ修正アップデートによる改善も含まれています。

Android Studio 3.6

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

Apply Changes

[Apply Code Changes](Apply Code Changes アイコン)または [Apply Changes and Restart Activity](Apply Changes アイコン)のいずれかをクリックすることで、クラスを追加し、実行中のアプリにそのコード変更をデプロイできるようになりました。

2 つのアクションの違いについては、Apply Changes をご覧ください。

NDK のアップデート

以下のアップデートにより、Android Studio 内のネイティブ(C / C++)開発がサポートされます。

Kotlin のサポート

これまで Java でサポートされていた Android Studio の以下の NDK 機能が、Kotlin でもサポートされるようになりました。

  • JNI 宣言から、対応する C / C++ の実装関数に移動できます。このマッピングを表示するには、マネージ ソースコード ファイルの行番号の近くにある C / C++ アイテム マーカーにカーソルを合わせます。
  • JNI 宣言のスタブ実装関数を自動的に作成できます。まず JNI 宣言を定義し、次に C / C++ ファイル内に「jni」またはメソッド名を入力してアクティブにします。

  • 未使用のネイティブ実装関数は、ソースコード内で警告としてハイライト表示されます。また、実装が欠落している JNI 宣言は、エラーとしてハイライト表示されます。

  • ネイティブ実装関数の名前を変更(リファクタリング)すると、対応するすべての JNI 宣言が更新されます。JNI 宣言の名前を変更すると、ネイティブ実装関数が更新されます。

  • 暗黙的にバインドされた JNI 実装のシグネチャ チェックを行います。

JNI に関する他の改善点

  • コスメティクス

    • パラメータや戻り値の型ヒントが、JNI 実装関数内に表示されます。
    • JNI によってマングリングされた関数名は折りたたむことができます。

  • RegisterNatives のサポート

    • メソッド宣言名、パラメータの型、戻り値の型を自動補完します。

    • メソッド宣言名の名前変更リファクタリングをサポートします。

    • バインドされた JNI 関数のシグネチャ チェックを行います。

  • 他の JNI 関数支援

    • 以下の関数内の文字列リテラルの自動補完、検査、ナビゲーション、名前変更リファクタリングをサポートします。
      • FindClass
      • GetMethodID および GetStaticMethodID
      • GetFieldID および GetStaticFieldID
    • 以下の関数に関して、さまざまな検査をサポートします。
      • Call[Static]<type>Method
      • CallNonvirtual<type>Method
      • Get[Static]<type>Field
      • NewObject

IntelliJ IDEA 2019.2

サービスツール ウィンドウなど、IntelliJ IDEA 2019.2 リリースによる改善に伴い、コアの Android Studio IDE が更新されました。

バージョン 2019.2 に累積して組み込まれている他の IntelliJ バージョンの改善点については、以下のページをご覧ください。