デバイスの適合性の概要

Android は、スマートフォン タブレット、テレビ幅広いデバイスに対応できるため、 アプリの対象ユーザーですアプリがすべてのデバイスで成功するには、以下の要件を満たす必要があります。 機能のばらつきを許容し、適応性に優れたユーザー インターフェースを 画面構成を変更できます。

デバイスの互換性を維持するため、Android には動的アプリ フレームワークが用意されています。 構成固有の値を指定できる アプリリソース(静的) XML レイアウトを画面サイズごとに調整することもできます。Android の場合は、 現在のデバイス構成に基づいて適切なリソースを読み込みます。アプリの設計と追加のアプリリソースに関する計画を事前に立てることで、さまざまなデバイスで最適化されたユーザー エクスペリエンスを提供する単一のアプリ パッケージ(APK)を公開できます。

ただし、必要に応じてアプリの機能要件を指定し、 Google Play ストアからアプリをインストールできるデバイスの種類を指定できます。 このドキュメントでは、アプリにアクセスできるデバイスを制御する方法と、適切なユーザーに表示できるようにアプリを準備する方法について説明します。

「適合性」とは

Android 開発に関しては、次の 2 種類の互換性があります。 デバイスの互換性アプリの互換性

Android はオープンソース プロジェクトなので、 Android オペレーティング システムを搭載したデバイスをビルドします。しかし、デバイスは 「Android 対応」アプリケーション用に作成されたアプリを適切に実行できる場合のみ、 Android 実行環境。Android 4.0 の 実行環境が定義されている Android 互換性プログラムをご覧ください。互換性があるとみなされるためには、各デバイスが互換性テストスイート(CTS)に合格する必要があります。

アプリ デベロッパーは、デバイスが動作しているかどうかを Android 対応。Android 互換のデバイスのみが、 Google Play ストア。そのため、Google Play ストアからアプリをインストールするユーザーは、Android 対応のデバイスを使用しています。

ただし、考えられるすべてのデバイス構成にアプリを対応させるかどうかについては検討する必要があります。Android はさまざまなデバイスで動作するため デバイスによっては一部の機能をご利用いただけない場合があります。たとえば、 デバイスによってはコンパス センサーが内蔵されていない場合があります。アプリのコア機能が コンパス センサーが必要な場合、アプリは 必要があります。

デバイスへのアプリの公開を管理する

Android は、アプリがプラットフォーム API を介して利用できるさまざまな機能をサポートしています。機能にはハードウェア ベースのもの(コンパス センサーなど)とソフトウェア ベースのもの(アプリ ウィジェットなど)があり、また、プラットフォームのバージョンに依存するものもあります。すべてのデバイスがすべての機能をサポートしているとは限らないため、アプリの アプリの必須機能に応じて、デバイスに表示するかどうかを選択できます。

アプリのユーザーベースを最大限まで拡大するには、できるだけ多くの 1 つの APK または AAB を使用してできる限り多くのデバイス構成を行うことができます。ほとんどの場合 そのためには、実行時にオプション機能を無効にして、 提供アプリ リソースのさまざまな構成の代替手段が用意されており、 さまざまな画面サイズに 対応できるようになります必要に応じて、以下のデバイス特性に基づいて、Google Play ストアを通じて特定のデバイスでのアプリの使用を制限することができます。

デバイスの機能

デバイスの機能に基づいてアプリの利用可否を管理するために、Android では 機能 ID: 有効ではないハードウェアまたはソフトウェアの機能の ID すべてのデバイスで利用できます。たとえば、コンパス センサーの機能 ID は、 FEATURE_SENSOR_COMPASS、 アプリ ウィジェットの機能 ID は FEATURE_APP_WIDGETS

必要に応じて、アプリのマニフェスト ファイル<uses-feature> 要素で必要な機能を宣言することで、デバイスがその機能を搭載していない場合にユーザーがアプリをインストールできないようにすることができます。

たとえば、コンパス センサーが搭載されていないデバイスでは適切に機能しないアプリの場合、次のマニフェスト タグでコンパス センサーが必要であることを宣言できます。

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

Google Play ストアは、アプリに必要な機能と ユーザーのデバイスで使用できる機能を調べて、アプリが 対応しています。アプリに必要な機能がデバイスに搭載されていない場合、ユーザーはそのアプリをインストールできません。

ただし、アプリの主な機能で 機能する場合は、 required 属性を "false" に追加して実行時にデバイスの機能をチェックします。 現在のデバイスでアプリの機能を使用できない場合は、グレースフル デグラデーション 対応するアプリ機能。たとえば、ある特徴がトレーニング済みかどうかを 呼び出して利用できます。 hasSystemFeature() 例:

KotlinJava
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature()
}
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device doesn't have a compass. Turn off the compass feature.
    disableCompassFeature();
}

在庫状況の制御に使用できるすべてのフィルタについては、 ダウンロード方法については、 Google Play でのフィルタ ご覧ください

プラットフォームのバージョン

デバイスが異なれば、Android プラットフォームのバージョンも異なります。 たとえば Android 12 や Android 13 などですプラットフォームの後継バージョンでは、以前のバージョンで使用できない API が追加されることがよくあります。使用可能な API を示すために、プラットフォームのバージョンごとに API レベルが指定されています。たとえば、Android 12 は API レベル 31、Android 13 は API レベル 33 です。

build.gradle ファイルに minSdkVersion 値と targetSdkVersion 値を指定する必要があります。

KotlinGroovy
android {
    defaultConfig {
        applicationId = "com.example.myapp"

        // Defines the minimum API level required to run the app.
        minSdkVersion(30)

        // Specifies the API level used to test the app.
        targetSdkVersion(33)
        ...
    }
}
android {
    defaultConfig {
        applicationId 'com.example.myapp'

        // Defines the minimum API level required to run the app.
        minSdkVersion 30

        // Specifies the API level used to test the app.
        targetSdkVersion 33
        ...
    }
}

build.gradle ファイルの詳細については、ビルドを設定するをご覧ください。

Android の各後継バージョンでは、ビルドしたアプリに対する互換性が 以前のプラットフォーム バージョンの API を使用しているため、アプリは 将来のバージョンの Android を引き続きリリースする必要があります。

ただし、最新のプラットフォーム バージョンで追加された API をアプリで使用する場合は、 主な機能にそれらが不要な場合は、API レベルを 対応する機能のグレースフル デグラデーションを行い、API レベルが 低すぎます。この場合、minSdkVersion をアプリの主要機能に対して設定可能な最小値に設定し、現在のシステムのバージョン(SDK_INT)を、確認する API レベルに対応する Build.VERSION_CODES のコードネーム定数と比較します。次の例をご覧ください。

KotlinJava
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop()
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag and drop features that use ClipboardManager APIs.
    disableDragAndDrop();
}

画面構成

Android は、スマートフォン、タブレット、テレビなど、さまざまなサイズのデバイスで実行されます。Android ではデバイスを画面のタイプで分類するために、画面サイズ(画面の物理サイズ)と画面密度(画面の物理的なピクセル密度。DPI と呼ばれます)という 2 つの特性をデバイスごとに定義します。さまざまな構成を単純化するために、Android ではこれらの構成をグループ分けして、ターゲットを設定しやすくしています。

  • 一般化された 4 つのサイズ: スモール、ノーマル、ラージ、エクストラ ラージ
  • 汎用的な密度: mdpi(中)、hdpi(高)、xhdpi(エクストラ (高)、xxhdpi(超超高)、その他

デフォルトでは、アプリはすべての画面サイズと画面密度に対応しています。これは、システムが各画面の UI レイアウトと画像リソースに対して適切な調整を必要に応じて行うためです。一般的な画面密度用に最適化されたビットマップ画像を用意します。

柔軟なレイアウトを可能な限り使用して、ユーザー エクスペリエンスを最適化します。縦向きと横向き、または大きなウィンドウ サイズと小さなウィンドウ サイズなど、構成の大きな変更に対応するレイアウトがある場合は、構成の細かい変更にも柔軟に対応できる代替レイアウトを提供することを検討してください。これにより、 タブレット、スマートフォン、折りたたみ式デバイスなどのフォーム ファクタでのユーザー エクスペリエンス。これは、 マルチ ウィンドウ モードでウィンドウ サイズが変わる場合にも有効です。

画面ごとに代替リソースを作成する方法と、必要に応じてアプリを特定の画面サイズに制限する方法については、画面互換性の概要大画面アプリの品質に関するガイドラインをご覧ください。

ビジネス上の理由でアプリを利用できるかどうかを管理する

デバイスに基づいてアプリの利用を制限することに加え、 ビジネスでのアプリの利用を制限する必要が生じる場合があります。 判断できます。このような場合のために、Google Play ストアでは、技術面以外の理由(ユーザーのロケールや携帯通信会社など)でアプリの使用を制限するためのフィルタ オプションを Play Console で提供しています。

技術的な互換性(必要なハードウェア コンポーネントなど)に基づくフィルタリングは、常に APK ファイルまたは AAB ファイルに含まれる情報に基づいて行われます。ただし、技術的な理由(地域や国など)でフィルタすると、 (常に Google Play Console:

関連ドキュメント:

アプリのリソースの概要
アプリリソースをアプリコードと区別するために Android アプリをどのような構造にするかに関する情報(特定のデバイス構成用の代替リソースの提供方法など)。
Google Play 上のフィルタ
Google Play ストアで、 アプリが別のデバイスにインストールされないようにできます。
Android での権限
アプリで特定の API を使用する場合にユーザーの同意を求める権限システムによって、Android でその API へのアプリからのアクセスを制限する方法。