何十億人ものユーザーを対象としたデバイス機能

新規ユーザーを獲得するには、増え続ける多様な 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 の最小バージョンを設定します。 minSdkVersion を設定すると、古いバージョンのプラットフォームで利用できない可能性がある新しい API の不適切な使用が Android ビルドツールによって報告されます。こうすることで、不注意に下位互換性が損なわれないように保護を図ります。
  • Android ダッシュボード、アプリの Google Play Developer Console、ターゲット市場の業界調査を参照して、ターゲット ユーザーに基づいて対象とする Android のバージョンを判断します。

Android サポート ライブラリを使用する

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

Google Play 開発者サービスを使用する

  • Google Play 開発者サービスを使用することで、Android プラットフォームのバージョンとは独立して Google API を最大限に活用できます。Google Play 開発者サービスの機能を使用して、Android デバイスで最も効率的な Google エクスペリエンスを提供することを検討してください。
  • Google Play 開発者サービスには、GcmNetworkManager などの便利な API も含まれています。この API には古いバージョンの Android 用に Android 5.0 の JobScheduler API が多数用意されています。
  • Google Play 開発者サービスのアップデートは Google Play ストアから自動的に配信され、クライアント ライブラリの新しいバージョンは Android SDK Manager を通じて提供されます。

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

メモリはユーザー エクスペリエンスの隠れた主役です。メモリを適切に管理することで、アプリの安定性とパフォーマンスを改善できます。場合によっては、メモリの有効利用がアプリを利用するうえでの条件である可能性があります。ここでは、アプリでメモリを効果的に使用するための方法を紹介します。

低価格デバイスでのメモリ使用量の削減

  • メモリ フットプリントを動的に調整して、RAM 構成が異なるさまざまなデバイスとの互換性を確保します。
  • isLowRamDevice()getMemoryClass() などのメソッドは、ランタイム時にメモリの制約を判断するのに役立ちます。これらの情報に基づき、メモリ使用量を抑えることができます。たとえば、メモリの少ないデバイスでは低解像度の画像を使用するようにできます。
  • アプリのメモリの管理については、アプリのメモリの管理に関する Android トレーニングをご覧ください。

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

  • 長時間実行するプロセスはメモリに常駐し、デバイスの処理速度を低下させる可能性があります。多くの場合、アプリは特定のイベントによって起動し、データを処理した後、シャットダウンする必要があります。Firebase Cloud Messaging(FCM)GcmNetworkManager を使用して、長時間実行されるバックグラウンド サービスを回避し、デバイスのメモリ負荷を低減してください。

メモリ使用量のベンチマーク

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

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

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

Android(Go バージョン)搭載デバイス向けに最適化する

Android(Go バージョン)は、RAM が 1 GB 以下のエントリレベルのデバイス向けにエクスペリエンスを最適化したものです。Android Oreo(Go バージョン)から導入されています。 Android(Go バージョン)デバイスでアプリが適切に動作するように、次のガイドラインを考慮してください。

  • targetSdkVersion が Android の最新バージョンである必要があります。 Android(Go バージョン)デバイスでは、Android Oreo(API 27 以降)のみが実行されます。
  • RAM が 1 GB 以下のデバイスで、アプリがスムーズに実行される必要があります。 上述のメモリを効率的に使用するで説明したメモリの最適化に注意してください。また、Android Vitals を使用して、遅いレンダリングやフリーズしたフレームなどの動作不良を特定して修正してください。
  • ピクチャー イン ピクチャー(PIP)は、デバイスで無効になっている場合があります。アプリで PIP を使用する前に、hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) を呼び出して PIP が使用可能であることを確認してください。
  • デバイス上のアプリのサイズは 40 MB 未満にしてください。
  • アプリの RAM 使用量の Proportional Set Size(PSS)は 90 MB を超えないようにしてください。ゲームの場合、ゲームの RAM 使用量の PSS は 150 MB を超えないようにしてください。PSS の詳細については、RAM 使用量の調査のガイドをご覧ください。
  • アプリのスタートアップ時間は 5 秒未満にする必要があります。
  • RAM の少ない Android Go デバイスでは、 SYSTEM_ALERT_WINDOW(アプリが他のアプリの上にウィンドウを描画できる)が無効になることがあります。他のアプリの上に描画する前に、 Settings.canDrawOverlays() を呼び出して、この承認がアプリに付与されているかどうかを確認します。アプリが権限を取得できない場合は、グレースフル デグラデーションを行い、ユーザーがアプリを引き続き使用できるようにします。そのため、場合によっては SYSTEM_ALERT_WINDOW 権限を必要とする機能を無効にします。

ほとんどのデベロッパーには、すべての Android(Go バージョン)デバイスで利用可能な既存のアプリを最適化することをおすすめします。アプリの実行を高速で軽量にすることは、すべてのユーザーにとってメリットとなります。 Google Play Console のマルチ APK 機能を使用して、Android(Go バージョン)デバイス向けの特定の APK を配信できますが、機能の削除を避けるなどして、エクスペリエンスが損なわれないようにしてください。Android(Go バージョン)デバイスを対象とする APK では、<uses-feature android:name="android.hardware.ram.low" android:required="true"> を宣言し、API レベル 26 以降をターゲットとして、Go バージョン以外の APK よりも高いバージョン コードを指定する必要があります。

参考情報

さまざまなデバイスのサポートの詳細については、次のリソースをご覧ください。

ブログ投稿