Android Studio 3.1(2018 年 3 月)

Android Studio 3.1.0 はメジャー リリースで、さまざまな新機能や改善措置が組み込まれています。

3.1.4(2018 年 8 月)

Android Studio 3.1 のこのアップデートには、以下の変更と修正が含まれています。

  • バンドルされた Kotlin のバージョンが 1.2.50 になりました。
  • 新しいプロジェクトは、サポートが終了した kotlin-stdlib-jre* アーティファクトではなく、kotlin-stdlib-jdk* artifacts で作成されるようになりました。
  • ProGuard ルールの R8 解析が改善されました。
  • 以下のバグが修正されました。
    • Kotlin メインクラスを実行しようとすると、"Error: Could not find or load main class..." というエラーで失敗していました。
    • R8 で、特定の最適化の実行中に無限ループが発生していました。
    • [Run] ウィンドウで [Rerun failed tests] コマンドを使用すると、誤って「No tests were found」というメッセージが返されることがありました。
    • D8 が invoke-virtual インスタンスを適切に処理せず、VerifyError: invoke-super/virtual can't be used on private method でクラッシュを引き起こしていました。
    • Data Binding のコンパイラが古いバージョンの com.android.tools:annotations に依存していました。現在、コンパイラは、ベース プロジェクトのツール アノテーションを使用します(使用可能な場合)。
    • プロファイラを使用している際、フラグメントの遷移中に Android Studio がクラッシュしていました。
    • テキスト ボックスを含むレイアウトをデバッグする際に、デバッガがクラッシュしていました。
    • D8 が特殊文字を含む一部の ZIP ファイルの読み取りに失敗していました。

3.1.3(2018 年 6 月)

この Android Studio 3.1 のアップデートでは、以下のバグが修正されています。

  • Layout Editor を使用した後、メモリリークにより Android Studio が遅くなり、応答しなくなっていました。このアップデートでは、この問題の大部分が修正されています。残りのメモリリークに対処する別のアップデートをまもなくリリースする予定です。
  • D8 でビルドされた一部のアプリが、一部の Verizon Ellipsis タブレットでクラッシュしていました。
  • D8 でビルドされたアプリを、Android 5.0 または 5.1(API レベル 21 または 22)を搭載しているデバイスにインストールしようとすると、INSTALL_FAILED_DEXOPT エラーで失敗していました。
  • OkHttp ライブラリを使用する一部のアプリが D8 でビルドされた場合、Android 4.4(API レベル 19)を搭載しているデバイスでクラッシュしていました。
  • com.intellij.psi.jsp.JspElementType のクラス初期化中に Android Studio が ProcessCanceledException で起動に失敗することがありました。

3.1.2(2018 年 4 月)

この Android Studio 3.1 のアップデートでは、以下のバグが修正されています。

  • Android Studio の終了中に、無期限にハングアップすることがありました。
  • Instant Run を有効にしている場合、ソースセットを使用して構成したビルドが失敗し、次のメッセージが表示されていました。

    "The SourceSet name is not recognized by the Android Gradle Plugin."

  • Instant Run を有効にしている場合、新しい Kotlin プロジェクトのビルドが [Run] コマンドでトリガーされたときに失敗していました。
  • build.gradle ファイルの編集中、文字を入力してから画面に文字が表示されるまでに顕著な遅延が発生することがありました。
  • 多数のモジュールまたは外部依存関係を含むプロジェクト内で dex 変換を行っているときにビルドエラーが発生し、次のエラー メッセージが表示されていました。

    "RejectedExecutionException: Thread limit exceeded replacing blocked worker"

  • D8 のメイン dex リストの計算で、一部のリフレクション呼び出しが考慮されていませんでした。

このアップデートには、いくつかの状況で Gradle からの lint チェックの実行を高速化する変更も含まれています。

3.1.1(2018 年 4 月)

この Android Studio 3.1 のアップデートでは、以下のバグが修正されています。

  • Android Studio 3.0 で作成したプロジェクトを Android Studio 3.1 で初めて開いたときに、Gradle 対応の Make タスクが、[Run/Debug Configurations] の [Before launch] 領域から削除されることがありました。その結果、[Run] ボタンまたは [Debug] ボタンをクリックしてもプロジェクトがビルドされず、Instant Run を使用したときに誤った APK のデプロイやクラッシュなどのエラーが発生していました。

    この問題を解決するため、Android Studio 3.1.1 では、このエントリのないプロジェクトの実行構成に対して Gradle 対応の Make タスクが追加されます。 この修正措置は、プロジェクトを読み込んだ際の最初の Gradle 同期の後で行われます。

  • 高度なプロファイリングを有効にしているときに、テキスト ボックスを含むレイアウトをデバッグすると、デバッガがクラッシュしていました。
  • [Build Variants] をクリックすると、Android Studio がフリーズしていました。
  • AAR(Android アーカイブ)ファイルが 2 回抽出されていました(Gradle 同期プロセス中に 1 回、Gradle ビルドプロセス中にもう 1 回)。
  • SVG ファイルからインポートした一部のベクター型ドローアブルで要素が欠落していました。
  • compile 依存関係構成のサポート終了に関する警告が更新され、implementation 構成と api 構成に関するガイダンスが改善されました。compile 構成から移行する方法については、新しい依存関係構成のドキュメントをご覧ください。

コーディング / IDE

IntelliJ 2017.3.3

IntelliJ IDEA 2017.3.3 リリースによる改善に伴い、コアの Android Studio IDE が更新されました。改善点としては、コレクションと文字列の制御フロー分析の改善、null 可能性推定の改善、新しいクイック フィックスの導入などがあります。

詳細については、IntelliJ IDEA バージョン 2017.2 / 2017.3 の JetBrains リリースノートや、バグ修正アップデートに関する JetBrains リリースノートをご覧ください。

Room による SQL 編集の改善

Room データベース ライブラリを使用する際、次のように改善された SQL 編集機能を利用できます。

  • Query 内のコード補完で、SQL テーブル(エンティティ)、列、クエリ パラメータ、エイリアス、結合、サブクエリ、WITH 句が認識されます。
  • SQL 構文のハイライト表示が機能します。
  • SQL 内のテーブル名を右クリックして名前を変更すると、対応する Java コードや Kotlin コードも書き換えられます(たとえば、クエリの戻り値の型など)。この名前変更機能は反対方向でも機能し、Java クラスや Java フィールドの名前を変更すると、対応する SQL コードが書き換えられます。
  • [Find usages] を使用すると、SQL の使用法が表示されます(右クリックして、コンテキスト メニューから [Find usages] を選択します)。
  • Java コードまたは Kotlin コード内の SQL エンティティの宣言に移動するには、Ctrl キー(Mac の場合は command キー)を押しながらエンティティをクリックします。

Room を活用して SQL を使用する方法については、Room を使用してローカル データベースにデータを保存するをご覧ください。

データ バインディングのアップデート

このアップデートでは、データ バインディングに関して次のように改善されています。

  • LiveData オブジェクトをデータ バインディング式内で監視可能フィールドとして使用できるようになりました。ViewDataBinding クラスに、LiveData オブジェクトの監視に使用する新しい setLifecycle() メソッドが追加されました。

  • ObservableField クラスが、コンストラクタ内の他の Observable オブジェクトを受け取れるようになりました。

  • データ バインディング クラス用の新しい増分コンパイラをプレビューできるようになりました。この新しいコンパイラの詳細と有効化の手順については、Data Binding Compiler V2 をご覧ください。

    新しいコンパイラのメリットは次のとおりです。

    • ViewBinding クラスが、Java コンパイラの前に Android Plugin for Gradle によって生成されます。
    • アプリのコンパイル時に、ライブラリは生成されたバインディング クラスを保持するようになり、毎回再生成されることはなくなりました。これにより、マルチモジュール プロジェクトのパフォーマンスが大幅に向上します。

コンパイラと Gradle

デフォルト dex コンパイラとなる D8

dex バイトコードを生成する際、D8 コンパイラがデフォルトで使用されます。

この新しい dex コンパイラには、主に次のようなメリットがあります。

  • 高速 dex 変換
  • メモリ使用量の削減
  • コード生成機能の改善(効率的なレジスタ割り当て、スマートな文字列テーブル)
  • コードをステップ実行する際のデバッグ エクスペリエンスの向上

以前に手動で D8 コンパイラを無効にしていない限り、コードや開発ワークフローを変更しなくても、この改善のメリットを享受できます。

gradle.propertiesandroid.enableD8false に設定している場合は、そのフラグを削除するか、true に設定してください。

        android.enableD8=true
      

詳細については、新しい dex コンパイラをご覧ください。

増分 desugar

Java 8 言語機能を使用しているプロジェクトの場合、デフォルトで増分 desugar が有効になっており、ビルド時間を改善できます。

desugar は、糖衣構文を、コンパイラが効率的に処理できる形式に変換します。

増分 desugar を無効にするには、プロジェクトの gradle.properties ファイルで次のように指定します。

        android.enableIncrementalDesugaring=false
      

簡素化された出力ウィンドウ

Gradle Console は、[Build] ウィンドウに置き換えられました。このウィンドウには、[Sync] タブと [Build] タブがあります。

簡素化された新しい [Build] ウィンドウの使用方法については、ビルドプロセスのモニタリングをご覧ください。

バッチ更新とインデックス作成同時実行

Gradle 同期プロセスや IDE インデックス作成プロセスが大幅に効率化され、多数の冗長なインデックス作成処理に費やされる時間が削減されています。

C++ と LLDB

C++ 開発のコーディング、同期、ビルド、デバッグの各段階で、品質とパフォーマンスが大幅に改善されています。主な改善点は次のとおりです。

  • 大規模な C++ プロジェクトで、シンボル作成時間が大幅に削減されています。大規模プロジェクトの同期時間も大幅に短縮されています。

  • キャッシュ済みの結果を積極的に再利用することにより、CMake を使用してビルドや同期を実行する際のパフォーマンスが向上しています。

  • さまざまな C++ データ構造用のフォーマッタ(「プリティ プリンタ」)が追加され、LLDB 出力が読みやすくなりました。

  • 現在のところ、LLDB は Android 4.1(API レベル 16)以上でのみ動作します。

注: Android Studio 3.0 以上を使用している場合、ネイティブ デバッグは 32 ビット Windows では機能しません。32 ビット Windows を使用していて、ネイティブ コードをデバッグする必要がある場合は、Android Studio 2.3 を使用してください。

Kotlin

Kotlin がバージョン 1.2.30 にアップグレード

Android Studio 3.1 には、Kotlin バージョン 1.2.30 が組み込まれています。

Kotlin コードをコマンドライン lint チェックで分析可能

コマンドラインから lint を実行して、Kotlin クラスを分析できるようになりました。

lint を実行するプロジェクトごとに、最上位の build.gradle ファイルに Google の Maven リポジトリを含める必要があります。Android Studio 3.0 以上で作成したプロジェクトでは、Maven リポジトリがすでに含まれています。

パフォーマンス ツール

CPU Profiler を使用してネイティブ C++ プロセスをサンプリングする

CPU Profiler に、アプリのネイティブ スレッドのサンプル トレースを記録するデフォルト構成が追加されました。この構成を使用するには、Android 8.0(API レベル 26)以降を搭載しているデバイスにアプリをデプロイし、CPU Profiler の記録構成プルダウン メニューから [Sampled (Native)] を選択します。その後、通常どおりトレースの記録と検査を行います。

記録構成を作成することで、サンプリング間隔などのデフォルト設定を変更できます。

Java スレッドのトレースに戻るには、[Sampled (Java)] または [Instrumented (Java)] 構成を選択します。

CPU トレース、メモリ割り当て結果、ヒープダンプをフィルタリングする

CPU ProfilerMemory Profiler には、メソッド トレース、メモリ割り当て、ヒープダンプの記録結果をフィルタリングできる検索機能があります。

検索するには、ペインの右上隅にある [Filter] をクリックし、クエリを入力して Enter キーを押します。

ヒント: Ctrl+F キー(Mac の場合は command+F キー)を押して、検索フィールドを開くこともできます。

CPU Profiler の [Flame Chart] タブで、検索クエリに関連するメソッドを含むコールスタックがハイライト表示され、グラフの左側に移動します。

メソッド、クラス、パッケージの名前でフィルタリングする方法については、メソッド トレースの記録と検査をご覧ください。

Network Profiler の [Request] タブ

Network Profiler に [Request] タブが追加されました。選択したタイムライン内のネットワーク リクエストに関する詳細情報が表示されます。以前のバージョンでは、Network Profiler に表示されるのは、ネットワーク レスポンスに関する情報に限られていました。

Network Profiler のスレッドビュー

Network Profiler 内でタイムラインの一部を選択して、以下のいずれかのタブを選択すると、その期間中のネットワーク アクティビティに関する詳細情報を表示できます。

  • Connection View: 以前のバージョンの Android Studio と同じ情報が表示されます。アプリのすべての CPU スレッドを対象に、タイムラインの選択部分内で送受信されたファイルがリスト表示されます。リクエストごとにサイズ、種類、ステータス、送信期間を調べることができます。
  • Thread View: アプリの各 CPU スレッドのネットワーク アクティビティを表示します。 このビューでは、各ネットワーク リクエストがどのアプリのスレッドによるものかを調べられます。

Layout Inspector

Layout Inspector に新機能が追加されました。その中には、非推奨の Hierarchy Viewer ツールと Pixel Perfect ツールがこれまで提供していた機能も含まれています。

  • レイアウトを表示、検査するためのズームボタンやキーボード ショートカット
  • 参照グリッド オーバーレイ
  • 参照画像をロードしてオーバーレイとして使用する機能(レイアウトと UI モックアップを比較する際に便利です)
  • 複雑なレイアウトにおいてビューを分離できるサブツリー プレビューのレンダリング

Layout Editor

Layout Editor の [Palette] が、さまざまな点で改善されています。

  • ビューやレイアウトのカテゴリが再編成されました。
  • ビューとレイアウトに新しい [Common] カテゴリが追加されました。[Favorite] コマンドを使用して追加できます。
  • ビューとレイアウトの検索機能が改善されました。
  • 特定のビュー要素やレイアウト要素のドキュメントを開くための新しいコマンドが追加されました。

コンポーネント ツリーまたはデザイン エディタに追加された新しい [Convert view] コマンドを使用すると、ビューまたはレイアウトを別のタイプのビューまたはレイアウトに変換できます。

[Attributes] ウィンドウの上部にあるビュー インスペクタ内の新しい [Create a connection] ボタンを使用すると、選択したビューの近くのアイテムに対して簡単に制約を作成できます。

Run と Instant Run

[Select deployment target] ダイアログの [Use same selection for future launches] オプションの動作に関して、整合性が向上しています。[Use same selection] オプションを有効にしている場合、[Run] コマンドを初めて使用したときに限り、選択したデバイスが接続解除されるまでは、[Select deployment target] ダイアログが開きます。

Android 8.0(API レベル 26)以上を搭載しているデバイスをターゲットにしている場合、Instant Run により、アプリの再起動を引き起こすことなく、リソースに対する変更をデプロイできます。これが可能になるのは、リソースが分割 APK 内に格納されているためです。

エミュレータ

Android Studio 3.0 以降のエミュレータの新機能と変更点については、バージョン 27.0.2 からバージョン 27.1.12 までの Android Emulator リリースノートをご覧ください。

主な改善点は次のとおりです。

  • エミュレータの状態を保存して起動を高速化するクイックブート スナップショット。[Save now] コマンドを使用すると、カスタム起動状態を保存できます。
  • ウィンドウのないエミュレータ画面。
  • Android 8.0(API レベル 26)、Android 8.1(API レベル 27)、Android P デベロッパー プレビュー版用のシステム イメージ。

ユーザー インターフェースおよびユーザー エクスペリエンスの改善

ツールチップ、キーボード ショートカット、便利なメッセージの追加

Android Studio 内のさまざまな場所に、ツールチップや便利なメッセージ オーバーレイが追加されています。

各種コマンドのキーボード ショートカットを表示するには、ツールチップが表示されるまで、ボタンの上にマウスポインタを置きます。

[Tools] > [Android] メニューの削除

[Tools] > [Android] メニューが削除されました。以前このメニューの下にあったコマンドは、各所へ移動しています。

  • 多くのコマンドは、[Tools] メニューの直下に移動しました。
  • [Sync project with gradle files] コマンドは、[File] メニューに移動しました。
  • [Device Monitor] コマンドは削除されました(下記を参照)。

Device Monitor はコマンドラインから利用可能になる

Android Studio 3.1 では、Device Monitor の役割が以前よりも少なくなりました。多くの場合、Device Monitor が提供してきた機能は、新しいツールや改善されたツールによって提供されるようになりました。

コマンドラインから Device Monitor を呼び出す方法や、Device Monitor を通じて利用できるツールの詳細については、Device Monitor のドキュメントをご覧ください。