Android Studio Dolphin の新機能は次のとおりです。
Compose の新機能
Android Studio の Jetpack Compose の新機能と改善点は次のとおりです。
Compose のアニメーション調整
コンポーザブルのプレビューにアニメーションを記述している場合、アニメーション プレビューを使用して、それらをすべて一度に検査し、調整できるようになりました。特定のアニメーションを固定することもできます。
Compose のマルチプレビュー アノテーション
複数のプレビュー定義を含むアノテーション クラスを定義し、その新しいアノテーションを使用してそれらのプレビューを一度に生成できるようになりました。この新しいアノテーションを使用すると、コンポーザブルごとに定義を繰り返すことなく、複数のデバイス、フォント、テーマを同時にプレビューできます。
Layout Inspector での Compose 再コンポーズ回数
Compose レイアウトをデバッグするときには、UI が正しく実装されていることを確認するために、コンポーザブルがいつ再コンポーズを行うか、または行わないかを把握することが重要です。たとえば、頻繁に再コンポーズが行われている場合、アプリが必要以上の処理を行っている可能性があります。一方、想定どおりに再コンポーズしていないコンポーネントは、予期しない動作が発生する可能性があります。
Layout Inspector を使用すると、レイアウト階層内の個々のコンポーザブルが再コンポーズまたはスキップしたタイミングを確認できるようになりました。この情報はアプリの操作中に、リアルタイムで表示されます。この機能を使用するにはまず、アプリで Compose 1.2.0-alpha03
以降を使用していることを確認します。その後、通常どおりにアプリをデプロイします。
[Layout Inspector] ウィンドウを開き、アプリプロセスに接続します。[Component Tree] のレイアウト階層の横に 2 つの新しい列が表示されます。最初の列には各ノードのコンポジション回数が表示されます。2 番目の列には各ノードのスキップ回数が表示されます。[Component Tree] または [Layout Display] からコンポーザブルを選択すると、[Attributes] ペインにも同様の情報が表示されます。
カウントをリセットするには、[Component Tree] パネルの上部にある [Reset] をクリックします。カウントをリセットすることによって、アプリでの特定の操作中の再コンポジションまたはスキップを把握できます。
Wear OS エミュレータのペア設定アシスタントの更新
Android Studio Dolphin Canary 3 以降、Wear OS エミュレータのペア設定アシスタントでは、Wear エミュレータの管理と接続を容易にする機能が改善されました。これで、次のことができるようになりました。
- デバイス マネージャーで Wear デバイスを確認する。
- 複数の Wear デバイスを 1 台の仮想スマートフォンまたは物理スマートフォンとペア設定する。
- 過去にペア設定したデバイスの起動時に自動的に再接続する。Android Studio は、最後のペア設定を記憶して再度ペア設定を行うようになりました。
これらの新機能を使用するには、スマートフォン エミュレータが API レベル 30 以降で、Google Play ストアがインストールされていることを確認してください。また、Wear エミュレータが API レベル 28 以降であることを確認してください。エミュレートしているデバイスの最新のシステム イメージにアップグレードするには、[Tools] > [SDK Manager] にアクセスします。
詳細については、Wear OS エミュレータのペア設定アシスタントを使用するをご覧ください。
Wear OS エミュレータ ツールバーの更新
Android Studio Dolphin Canary 2 以降、API レベル 28 以降の Wear エミュレータの場合、エミュレータ ツールバーに、デバイスの物理ボタンと一般的な操作をシミュレートするボタンが追加されました。新しいボタンは、ボタン 1 とボタン 2(ボタン 2 は API レベル 30 以降でのみ使用可能)、手のひらボタン、傾斜ボタンです。以下に、Wear エミュレータで新しいボタンを使用して行える操作をいくつか示します。
- デバイスを「常に画面表示モード」に設定するには、手のひらボタンをクリックします。
- デバイスを「常に画面表示モード」前の最後の画面に戻すには、傾斜ボタンをクリックします。
詳細については、エミュレータで一般的なアクションを行うをご覧ください。
新しい Wear OS 実行構成
新しい実行構成が追加され、ウォッチフェイス、タイル、ウォッチフェイスの追加機能などの Wear OS に固有のサーフェスをすばやく実行およびデバッグできるようになりました。この新しい構成は、アプリの実行時に [Run/Debug Configurations] ダイアログから作成できます。
詳しくは、Wear OS の実行 / デバッグ構成をご覧ください。
新しい Logcat
Logcat が更新され、ログの解析、クエリ、追跡が容易になりました。
新しいフォーマッタ
Logcat では、タグやメッセージなどの有用な情報をスキャンし、警告やエラーなど、さまざまな種類のログを識別しやすくするために、ログをフォーマットするようになりました。
複数の Logcat ウィンドウを作成する
Logcat 内に複数のタブを作成できるようになりました。これにより、さまざまなデバイスやクエリを簡単に切り替えることができます。タブを右クリックすると名前を変更できます。また、タブをクリックしてドラッグすると並べ替えることもできます。
また、2 つのログセットを簡単に比較できるように、ログビューを右クリックし [Split Right] または [Split Down] を選択して、タブ内のビューを分割できるようになりました。分割を閉じるには、右クリックして [Close] を選択します。分割ごとに、固有のデバイス接続、表示オプション、クエリを設定できます。
ビュー プリセットの切り替え
Logcat では、 をクリックすることでビューモード(Standard、Compact、Custom)をすばやく切り替えられるようになりました。ビューモードによって、タイムスタンプ、タグ、プロセス ID(PID)など、表示する情報の量のデフォルト設定が異なります。また、[Modify View] を選択して、それぞれのデフォルトのビューモードとカスタムのビューモードをカスタマイズすることもできます。
新しい Key-Value 検索
以前のバージョンの Logcat では、文字列検索(正規表現をサポート)を使用するか、Logcat UI を使用してさまざまなフィールドにデータを入力して新しいフィルタを作成していました。1 つ目の方法では検索が複雑になり、2 つ目の方法ではクエリの共有と設定が困難でした。そこで、主要なクエリ フィールドから直接 Key-Value 検索を導入し、エクスペリエンスを簡素化しました。
この新しいクエリシステムでは、正規表現に依存することなく、クエリの対象の正確さを提供します。履歴から過去のクエリを参照し、これらのクエリを他のユーザーと共有できます。さらに、引き続き正規表現を使用でき、Key-Value に基づいてログを除外することもできます。新しいクエリシステムの使用方法の例を次に示します。ただし、クエリ フィールドに入力して候補を表示することもできます。
- ローカルアプリ プロジェクトの PID:
package:mine
- 特定の値:
package:<package-ID>
tag:<tag>
level:[VERBOSE | INFO | ASSERT |DEBUG | WARN | ERROR ]
- 特定の値を除外するには、キーの前に
-
を付けます。-tag:<exclude-tag>
- 特定のキーで正規表現を使用するには、キーの後に
~
を置きます。tag~:<regular-expression-tag>
- 除外タグ
-tag~:<exclude-regular-expression-tag>
と組み合わせます。
クエリ フィールドの をクリックし、プルダウンからクエリを選択して、クエリの履歴を表示することもできます。クエリをお気に入りに追加して、すべてのスタジオ プロジェクトでリストの先頭に表示されるようにするには、クエリ フィールドの末尾にある をクリックします。
アプリのクラッシュ / 再起動をまたいでログを追跡する
新しい Logcat では、アプリのクラッシュと再起動をまたいでアプリのログを簡単に追跡できるようになりました。これにより、このようなイベントをまたいだ重要なログを見逃すことがなくなります。アプリプロセスが停止して再起動したことが Logcat によって検出されると、出力に次のような PROCESS ENDED
や PROCESS STARTED
などのメッセージが表示されます。
また、Logcat を再起動すると、タブ分割、フィルタ、表示オプションなどのセッション構成が保持されるため、セッションを容易に続行できます。
Gradle で管理されているデバイス
自動インストルメンテーション テストで Android Virtual Device を使用する際の整合性、パフォーマンス、信頼性を高めるために、Gradle で管理されているデバイスを導入します。この機能は API レベル 27 以降で利用でき、プロジェクトの Gradle ファイルで仮想テストデバイスを構成できます。この構成は、自動テスト実行時にこれらのデバイスを完全に管理(つまり、作成、デプロイ、破棄)するために、ビルドシステムによって使用されます。
この機能を使用すると、Gradle は実行中のテストだけでなく、デバイスのライフサイクルも把握できるため、テスト エクスペリエンスの品質が次の方法で改善されます。
- テストを確実に実行するために、デバイス関連の問題に対応する
- エミュレータ スナップショットを利用して、デバイスの起動時間とメモリ使用量を改善し、テストの合間にデバイスをクリーンな状態に戻す
- テスト結果をキャッシュに保存し、異なる結果が得られる可能性のあるテストのみを再実行する
- ローカルテスト実行とリモートテスト実行の間に一貫したテスト実行環境を提供する
また、Gradle で管理されているデバイスには、自動テストデバイス(ATD)と呼ばれる新しいタイプのエミュレータ デバイスが導入されています。これは、インストルメンテーション テストの実行時にパフォーマンスが向上するように最適化されています。テストのシャーディングのサポートと組み合わせることで、テストスイートを複数の ATD インスタンスに分割して試行し、テスト実行時間全体を短縮できます。Gradle で管理されているデバイスとそれに関連する機能の詳細については、Gradle で管理されているデバイスを使用したテストのスケーリングをご覧ください。
R8 が DEX 命令オフセットに基づくマッピング ファイルの使用をサポート
R8 は、行情報を最適化する際に、命令オフセットに基づいて、行テーブルを含む共有デバッグ情報オブジェクトの情報をエンコードできるようになりました。これにより、行情報のオーバーヘッドが大幅に削減されます。このため、メソッド内の行は連続しなくなりましたが、命令のサイズによっては一定の間隔でジャンプすることがあります。ツールによっては、この共有エンコードが考慮されない場合があります。
さらに、O(API レベル 26)以降の Android VM では、メソッドに行番号情報がない場合は、スタック トレースで命令オフセットを出力できます。minSdk 26 以降でコンパイルし、ソースファイル情報がない場合、R8 は行番号情報を完全に削除します。
ステートレス ラムダがシングルトンとして脱糖されない
脱糖時にステートレス ラムダがシングルトンとして割り当てられなくなりました。シングルトンとして表現すると、追加されたフィールドとクラス イニシャライザによるコードサイズ オーバーヘッドと、静的クラス初期化による起動オーバーヘッドが追加されます。ステートレス ラムダは、ステートフル ラムダ(キャプチャ付きラムダ)と同様に使用サイトで割り当てられるようになりました。
R8 が Android ランタイムの検証の遅延を回避
Android ランタイム(Dalvik と ART)のパフォーマンスの問題をなくすため、R8(D8 ではない)にライブラリ スタブが導入され、実行時には存在しない可能性のあるライブラリ クラスとメソッドのライブラリ メソッドの呼び出しの概要が表示されるようになりました。そうすることで、多くの検証の問題が解消され、ランタイムのパフォーマンスが向上します。この機能は常に有効になっています。
Java 8+ API の脱糖を使用した JDK-11 API のサポート
coreLibraryDesugar の依存関係を使用する場合、JDK-11 に基づく実装ライブラリのサポートが追加されました。詳細については、desugar_jdk_libs
変更ログをご覧ください。
パッチリリース
Android Studio Dolphin のパッチリリースを以下に示します。
Android Studio Dolphin | 2021.3.1 パッチ 1(2022 年 10 月)
パッチ 1 のリリースにより、Android Studio Dolphin は Kotlin プラグイン 1.7.20 をサポートするようになりました。このマイナー アップデートには、以下のバグ修正も含まれます。
修正された問題 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Android Gradle プラグイン |
|
||||||||||||
Dexer(D8) |
|
||||||||||||
インポート / 同期 |
|
||||||||||||
リソース |
|
||||||||||||
圧縮ツール(R8) |
|