Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

何十億人ものユーザーに受け入れられる端末の機能

新規ユーザーを獲得するには、増え続ける多様な Android プラットフォームのバージョンと端末の仕様をサポートする必要があります。また、ユーザー エクスペリエンスを向上させるため、一般的な RAM 設定、画面のサイズ、解像度に合わせて最適化することが求められます。

複数の画面サイズをサポートする

何十億人ものユーザーに受け入れられる優れたユーザー エクスペリエンスを提供するには、アプリがさまざまな画面サイズや解像度をサポートしている必要があります。このセクションでは、それを行うためのいくつかの方法について説明します。

密度非依存ピクセル(dp)を使用する

  • レイアウトの寸法をピクセルで定義すると、うまくいきません。画面によって画素密度は異なるため、端末が異なると同じピクセル数が異なる物理サイズになる場合があるからです。
  • この問題に対処するため Android では密度非依存ピクセル(dp)をサポートしています。これは、160 dpi(mdpi 密度)でのピクセルの物理サイズに相当します。
  • dp を使用してレイアウトを定義すると、端末にかかわらずユーザー インターフェースの物理サイズを均一にすることができます。密度非依存ピクセル使用時のベスト プラクティスについては、複数の画面のサポートに関する Android ガイドをご覧ください。

テキストとグラフィックを ldpi / mdpi の画面密度でテストする

  • 特に低コストの端末では低密度(ldpi)および中密度(mdpi)画面がよく使われる密度であるため、それらの画面でテキストとグラフィックが適切に表示されることをテストします。低密度の画面で詳細が表示されないため不明瞭になっているテキストがないかどうか注意深く探します。
  • 低密度の画面を搭載した端末では、ハードウェアが低スペックという傾向があります。これらの端末でアプリが快適なパフォーマンスを維持するには、アニメーションや遷移といった負荷のかかるグラフィック処理を削減または削除してみてください。
  • さまざまな密度のサポートについては、さまざまな密度のサポートに関する Android トレーニングで詳細をご覧ください。

小サイズおよび中サイズの画面でレイアウトをテストする

  • 小さい画面でテストを行い、レイアウトが縮小することを検証します。画面サイズが小さい場合はスペースが限られるため、表示する UI 要素を慎重に検討する必要があります。
  • マテリアル デザイン ガイドラインでは、画面密度に応じてレイアウトのサイズを変更するためのメトリクスとキーラインについて説明しています。
  • さまざまな画面サイズのサポートについては、さまざまな画面サイズのサポートに関する Android トレーニングで詳細をご覧ください。

下位互換性を提供する

すべてのユーザーが最新バージョンの Android プラットフォームを搭載した端末を使用しているわけではありません。ここでは、可能な限り多くの人にアプリを利用してもらえるように下位互換性を改善する方法についていくつか説明します。

targetSdkVersionminSdkVersion を適切に設定する

  • さまざまな端末で最新の動作を実現するには、アプリを最も新しいバージョンの Android を対象にしてビルドする必要があります。これにより、旧バージョンへの下位互換性も確保されます。API レベルのターゲットを適切に設定する方法について、ベスト プラクティスをご紹介します。
    • targetSdkVersion には、最新バージョンの Android を指定する必要があります。最新バージョンをターゲットにすることで、アプリが新しいバージョンの Android を実行するときに新しいランタイムの動作を継承できます。targetSdkVersion を更新するときは、アプリの動作に影響する可能性があるため、必ず新しいバージョンの Android でアプリをテストしてください。
    • minSdkVersion には、サポートする Android の最小バージョンを設定します。Android 4.0(API レベル 14: Ice Cream Sandwich)または Android 4.1(API レベル 16: Jelly Bean)を使用してください。これらのバージョンは、最新の端末に最も幅広く対応しています。minSdkVersion を設定すると、旧バージョンのプラットフォームで使用できない可能性がある新しい API が誤って使用されている場合に、Android ビルド ツールで報告されます。これにより、不注意で下位互換性を失うのを防ぐことができます。
  • ターゲットにする Android のバージョンを見定めるには、Android ダッシュボード、アプリの Google Play Developer Console、またターゲット市場での業界の調査結果を参照し、対象ユーザーに基づいて判断してください。

Android Support Library を使用する

  • 各 OS 間でアプリが一貫したエクスペリエンスを提供できるようにするには、Android Support Library を使用します。このライブラリは下位互換バージョンの Android フレームワーク API を提供しているほか、AppCompatActivity やマテリアル デザイン サポート ライブラリなど、このライブラリ API を通してのみ利用可能な機能も提供しています。
  • 主な機能には次のようなものがあります。
  • 使用可能なサポート ライブラリの詳細については、Android デベロッパー サイトでサポート ライブラリの機能のセクションをご覧ください。

Google Play サービスを使用する

  • Google Play サービスは、Android プラットフォームのバージョンに影響されることなく、最高の Google API を提供します。最適化された Google の操作感を Android 端末で実現するには、Google Play サービス機能の使用をご検討ください。
  • Google Play サービスには便利な API も含まれています。たとえば、GcmNetworkManager は Android 5.0 の JobScheduler API のような機能を旧バージョンの Android 向けに提供します。
  • Google Play サービスのアップデートは Google Play ストアから自動的に配信され、クライアント ライブラリの新しいバージョンは Android SDK Manager を経由して提供されます。

メモリを効率的に使用する

メモリはユーザー エクスペリエンスの隠れたヒーローです。メモリを適切に管理するとアプリの安定性とパフォーマンスが向上します。場合によっては、メモリを効率的に使用して初めてアプリが使い物になるということもあります。ここでは、アプリでメモリを賢く利用する方法をいくつか紹介します。

低価格の端末でメモリ使用量を削減する

  • メモリ使用量を動的に調整して、RAM の構成が異なるさまざまな端末間で互換性を確保するようにします。
  • isLowRamDevice()getMemoryClass() などのメソッドは、実行時にメモリ制限を判別する際に役立ちます。この情報に基づき、メモリの使用を抑えることができます。たとえば、メモリの少ない端末では低解像度の画像を使用するようにできます。
  • アプリのメモリの管理については、アプリのメモリの管理に関する Android トレーニングで詳細をご覧ください。

長時間実行するプロセスを避ける

  • 長時間実行するプロセスはメモリに常駐し、端末の処理速度を低下させることがあります。多くの場合、アプリは指定されたイベントによって起動し、データを処理して、シャットダウンしなければなりません。Firebase Cloud Messaging (FCM)GcmNetworkManager を使用して長時間実行するバックグラウンド サービスを回避し、ユーザーの端末でメモリを圧迫しないようにしてください。

メモリの使用をベンチマーク テストする

Android Studio のメモリのベンチマーク テストおよびプロファイリング ツールを使用して、実行時のメモリの使用を測定できます。アプリのメモリ使用のベンチマーク テストを実施すると、アプリの複数のバージョンにわたってメモリの使用を監視できます。これにより、意図しないメモリ使用量の増加を特定できます。Memory Profiler ツールを使用して次のことを確認します。

  • 望ましくないガベージ コレクション(GC)イベントのパターンによってパフォーマンスの問題が発生する可能性がないか。
  • 予期せず、または不必要に取得または割り当てられたままのオブジェクト型がないか。
  • コード内に問題が発生しそうな場所がないか。

メモリ使用のベンチマーク テストの詳細については、Memory Profiler を使用して Java ヒープとメモリ割り当てを表示するをご覧ください。

Android(Go エディション)で稼働する端末向けの最適化

Android(Go edition)は RAM が 1 GB 以下のエントリレベルの端末向けに最適化されたエクスペリエンスで、Android Oreo(Go エディション)から始まりました。アプリを Android(Go エディション)端末で快適に実行できるようにするため、次に挙げるガイドラインを考慮に入れる必要があります。

  • targetSdkVersion には最新バージョンの Android を指定する必要があります。Android(Go エディション)端末は Android Oreo(API 26 以上)のみを実行します。
  • アプリは RAM が 1 GB 以下の端末でもスムーズに動作する必要があります。前述のメモリを効率的に使用するに列挙されているメモリの最適化を念頭に置き、Android vitals を使用して遅いレンダリングやフリーズしたフレームなどの不適切な動作を識別して修正してください。
  • ピクチャ イン ピクチャ(PIP)は、搭載 RAM の小さい端末では無効になっていることがあります。アプリで PIP を使用する前に hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) を呼び出して PIP が使用可能であることを確認してください。
  • 端末上のアプリサイズは 40 MB 未満にする必要があります。
  • アプリの RAM 使用量の Proportional Set Size(PSS)は 50 MB を超えてはなりません。ゲームの場合、ゲームの RAM 使用量の PSS は 150 MB を超えてはなりません。PSS の詳細については、RAM の使用状況を調査することに関するガイドをご覧ください。
  • アプリのスタートアップ時間を最小にし、5 秒未満にします。

ほとんどのデベロッパーの皆さまには、既存のアプリをすべての Android(Go エディション)端末で利用可能なように最適化することをおすすめします。アプリの動作を高速で軽量にすることはすべての対象端末に対してメリットがあるからです。Play Console の 複数 APK 機能を利用して Android(Go エディション)端末用の特定の APK を配布することができますが、その場合はエクスペリエンスを犠牲にする(たとえば機能を削除する)ことを避けてください。Android(Go エディション)端末を対象にする APK では、<uses-feature android:name="android.hardware.ram.low" android:required="true"> を宣言し、最低でも API レベル 26 を対象にして、Go エディション以外の APK よりも高いバージョンのコードを使用する必要があります。