设备兼容性概览

Android 设计为可在许多不同的设备上运行,例如手机、 平板电脑和电视丰富的设备类型带来了巨大的潜在 受众群体要让您的应用在所有设备上都取得成功,它必须 容忍功能变化,并提供灵活的用户界面, 不同的屏幕配置

为了帮助提升设备兼容性,Android 提供了一个动态应用框架 您可以在其中提供 静态中的应用资源 文件,例如针对不同屏幕尺寸的不同 XML 布局。Android 然后 用于根据当前设备配置加载适当的资源。包含 为应用设计和其他应用资源,您可以发布 单一应用软件包 (APK),可优化各种应用平台上的用户体验 。

不过,如有必要,您可以指定应用的功能要求和 控制哪些类型的设备可以从 Google Play 商店安装您的应用。 本文档介绍了如何控制哪些设备可以访问您的 以及如何让您的应用做好准备,以吸引合适的受众群体。

“兼容性”是什么意思?

关于 Android 开发,有两种类型的兼容性: 设备兼容性应用兼容性

由于 Android 是一个开源项目,因此任何硬件制造商都可以 打造搭载 Android 操作系统的设备。但设备 “与 Android 兼容”前提是它可以正确运行为 Android 执行环境。Android 由 Kubernetes 的 Android 设备 兼容性计划。每台设备都必须通过兼容性测试套件测试 (CTS) 才能被视为兼容。

作为应用开发者,您无需担心设备是否 与 Android 兼容,因为只有与 Android 兼容的设备才包括 Google Play 商店。因此,如果用户从 Google Play 商店安装了您的应用 使用 Android 兼容设备的用户。

不过,您需要考虑自己的应用是否兼容 潜在设备配置。因为 Android 在多种设备上运行 配置,但某些功能可能无法在部分设备上使用。例如,一些 设备可能不包含罗盘传感器。如果应用的核心功能 需要使用罗盘传感器,那么您的应用仅与符合以下条件的设备兼容: 添加该功能

控制应用在设备上的可用性

Android 支持您的应用可通过平台使用的各种功能 API。有些功能基于硬件,例如罗盘传感器;有些是 基于软件,例如应用微件;而有些依赖于平台版本。 并非所有设备都支持全部功能,因此您可能需要控制应用的 设备可用性。

为了尽可能扩大应用的用户群,请支持尽可能多的应用 尽可能使用单个 APK 或 AAB 来配置设备配置。在大多数情况下 为此,您可以在运行时停用可选功能 提供应用 以及用于不同配置的备用资源,例如不同的 调整应用布局如有必要,您可以限制 特定设备在 Google Play 商店中是否可用,具体取决于: 设备特征:

设备功能

为了根据设备功能管理应用的可用性,Android 定义了 功能 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() 如下所示:

Kotlin

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

Java

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 上的过滤器 文档。

<ph type="x-smartling-placeholder">

平台版本

不同的设备可能运行不同版本的 Android 平台,例如 与 Android 12 或 Android 13 相同每个后续的平台版本通常会添加 API 先前版本不可用。为了指明这是一组 每个平台版本都会指定 API 级别。 例如,Android 12 的 API 级别为 31,而 Android 13 的 API 级别为 33。

您必须指定 minSdkVersiontargetSdkVersion 您的 build.gradle 文件中的值:

Kotlin

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)
        ...
    }
}

Groovy

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 文件,请参阅 配置 build

每个后续版本的 Android 系统都为构建 使用之前平台版本的 API,这样您的应用就可以兼容 Android API 的未来版本。

<ph type="x-smartling-placeholder">

不过,如果您的应用使用的是较新平台版本中新增的 API,但 的 API 级别,请参阅 当 API 级别为 0.00 或 100 时, 过低。在这种情况下,请将 minSdkVersion 设置为最小值 然后比较当前系统的 版本, SDK_INT, 添加到代码名称常量中, Build.VERSION_CODES 对应于您要检查的 API 级别,如下所示: 示例:

Kotlin

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()
}

Java

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)。为了简化 Android 将这些变体归纳成多个组, 更易于定位:

  • 四种广义的尺寸:小、标准、大和超大
  • 多种广义密度:mdpi(中)、hdpi(高)、xhdpi(超 高)、xxhdpi(超超高)及其他

默认情况下,您的应用兼容所有屏幕尺寸和密度, 因为系统会调整界面布局和图片资源 每个屏幕所需的资源提供适用于通用屏幕的优化位图图像 各种不同密度的计算方法

尽可能使用灵活的布局来优化用户体验。 有适合大规模配置更改的布局,例如纵向和 或者是大窗口还是小窗口 这种布局可以灵活适应小幅配置变更。这样可以改善 平板电脑、手机和可折叠设备等外形规格设备上的用户体验。它 也有助于在多窗口模式下更改窗口大小。

如需了解如何为不同的应用创建备用资源, 以及如何在必要时将应用限制为特定的屏幕尺寸; 阅读 屏幕兼容性 概览并查看 大屏幕应用程序 质量指南

出于业务原因控制应用的可用性

除了根据设备限制应用的可用性之外 您可能需要限制应用面向企业提供 或法律原因。针对这种情况,Google Play 商店提供了 Play 管理中心内提供的过滤选项 - 供您控制应用的 出于非技术原因(例如用户语言区域或无线网络)而可用性 运营商。

根据技术兼容性(例如所需的硬件)进行过滤 组件)始终以 APK 或 AAB 中包含的信息为依据, 文件。但出于非技术原因(例如地理位置) 语言区域),始终在 Google Play 管理中心

其他资源:

应用资源概览
有关如何设计 Android 应用来分离应用的信息 包括如何为应用提供 特定设备配置的资源。
Google Play 上的过滤器
有关 Google Play 商店可能会通过哪些不同方式阻止您 避免应用安装到不同设备上
Android 中的权限
Android 如何通过权限系统限制应用对特定 API 的访问权限 需要用户同意您的应用才能使用这些 API。