ChromeOS チームは、Android アプリ デベロッパーが Chromebook 向けにアプリをシームレスに最適化できるデベロッパー ツールとフレームワークの強化に取り組んでいます。そのため、大画面と ChromeOS 向けにビルドするエクスペリエンスを強化するために、デベロッパーに影響力のあるツールセットを提供する方法を常に検討する必要があります。
ChromeOS は、新たな課題に直面するたびに進化を遂げてきました。その 1 つは、エンジニアに重要な問題を早期に頻繁に特定することです。Lint ルールは品質の中核をなすものであり、修正しないと発生する問題についてデベロッパーに警告を発します。更新された lint ルールにより、デベロッパーは ChromeOS でのアプリの実行状況をより詳細に把握できるようになり、ChromeOS デバイスで実行される Android アプリに問題を引き起こす可能性のあるソフトウェアとハードウェアの両方の問題を確認できます。
これらの lint ルールの存在とその重要性について詳しくは、ブログ投稿をご覧ください。
これらの lint ルールはどこにありますか?
この数か月間、積極的に開発を進めてきました。Android Studio のリリース スケジュールに伴い、Electric Eel Canary ビルドで一部の lint ルールが導入されています。これらの lint ルールの一部は、Flamingo Canary リリースでも利用できるようになりました。今後数か月以内に、Android Studio の安定版でこれらの機能を利用できるようにする予定です。
もう一つ重要な点として、これらのルールは Android Studio の新しいバージョンではデフォルトで有効になります。この目標は、エンジニアが ChromeOS と大画面向けに今後どのように構築していくかについて、より強い意見に基づいたガイダンスを提供することです。
新しい Lint ルール(Flamingo Canary 3 で更新)
x86/x86_64 ABI のサポート
Chromebook の大部分は Intel アーキテクチャで動作するため、主に x86 アーキテクチャ プラットフォームとなっています。バイナリの一部として NDK コードが含まれている場合に ChromeOS を適切にサポートするには、x86 があると、ARM ライブラリから必要な変換が削除されるため、パフォーマンスが向上します。そのため、開発チームが x86 または x86_64 アーキテクチャのサポートを追加することを強くおすすめします。これは、ChromeOS または Intel デバイス上のネイティブ コードのパフォーマンス向上に役立ちます。
対処方法
可能であれば、build.gradle 内の abiSplits の中に x86 と x86_64 を追加します。また、これらの ABI をサポートするために、適切なフォルダにコードを追加していることを確認してください。詳細については、Android ABI に関するドキュメントと、ADS の ABI サポートに関する講演をご覧ください。
注: 利用されているサードパーティ ライブラリにも x86 と x86_64 のバイナリが含まれていることを確認してください。
ChromeOS ハードウェアの制限
ほとんどの ChromeOS デバイスには、Android スマートフォンと比べて、ハードウェア センサーやその他の機能のサンプル セットが少なく搭載されています。このルールの目的は、デベロッパーに対して、android:required=true で <uses-feature> フラグを使用している場合、アプリは ChromeOS の Google Play ストアで利用できなくなることを通知することです。できるだけ多くのデバイスでアプリにアクセスできるようにするためには、ハードウェア機能がデフォルトで必須ではないようにすることが強く推奨されます。代わりに、実行時に特定のハードウェアをチェックする防御コードを追加できます。たとえば、
<uses-feature android:name="android.hardware.camera" android:required="true">
対処方法
アプリ内の機能が実際に必要であることを確認します。必要でない場合は、android:required パラメータを false に変更し、API 呼び出しが必要な場合は防御的プログラミングを追加します。詳細については、明示的に宣言された機能に関するドキュメントをご覧ください。
サイズ変更できないアクティビティ
デフォルトでは、Chromebook で Android R 以降を実行している ChromeOS 向け Android ランタイムは、デフォルトの UI 状態に基づいて、Android アプリをスマートフォンのバージョンまたはタブレットのバージョンのいずれかで起動します。ただし、ChromeOS ユーザーにとってより快適な 3 つ目のオプションとして、サイズ変更可能モードがあります。このフラグをアクティビティの一部として有効にすると、マルチウィンドウ環境でアプリを使用できるユーザーは、アプリのサイズを適切なサイズに変更できます。これらの変更により、ユーザーはニーズに合わせて UI を拡大縮小できるようになります。マニフェストにこれらの変更を追加したら、以下のデスクトップ エミュレータに対してアプリケーションをテストします。
対処方法
AndroidManifest.xml ファイルの Activity に resizableActivity="true" 属性を追加します。詳しくは、大画面の制限事項に関するドキュメントをご覧ください。
構成の変更
サイズ変更可能な画面の大きな注意点として、ユーザーがアプリケーションのサイズを変更するたびに onConfigurationChanged() が呼び出されることが挙げられます。アプリがそのメソッド内で完全な再描画を発行している場合、パフォーマンスに影響します。現在、finish() が onConfigurationChanged 内で呼び出されていないことを確認しています。これは、保存されたインスタンスの状態をより細かく処理する必要があるためです。完全な再描画を強制する必要はありません。パフォーマンスの低下が発生するケースを特定し、このルールを適宜更新していきます。
対処方法
アクティビティとフラグメントの onConfigurationChanged() API 内で finish() が呼び出されていないことを確認します。詳細については、構成の変更の処理に関するドキュメントをご覧ください。
キーボードとマウスのサポート
Jetpack Compose の採用が増加しているため、これらのライブラリを使用したビルドに、今後マウスとキーボードのサポート機能も含まれるようにしたいと考えています。今後も、マウス、キーボード、トラックパッドなどの周辺機器の操作性を向上させていく予定です。ベースライン エクスペリエンスを取得するには、Gradle 依存関係を最低限必要なバージョンに更新する必要があります。
対処方法
androidx.compose.foundation:foundation を最小バージョン 1.2 に更新します。詳細については、Compose バージョンのリリースノートを参照してください。
ヒント: Chromebook でアプリを使用するユーザーの 90% は、キーボードとマウスを使用しています。(出典: 2022 年 Google 内部データ*)
フィードバック
チームは、大画面向けの最適化に関するツールとドキュメントの改善を常に目指しています。このプロセスで重要なのは、Android Studio にデプロイされている lint ルールの正確性と有用性についてフィードバックをいただくことです。ルールに関するフィードバックを送信することで、この操作を行うことができます。Android Studio に lint ルールが表示されたら、[Provide feedback on this warning] をクリックします。次のようなダイアログが表示されます。提供された情報が正確で説明的であるほど、適切な変更を迅速に繰り返すことができます。
![Android Studio の [Provide Feedback] ダイアログ](https://developers.google.cn/chromeos/app-development/images/chromeos-lint-rules-in-android-studio-1.avif?hl=ja)