Android 适用于众多类型的设备,例如手机、平板电脑和电视。丰富的设备类型带来了巨大的潜在 受众群体要让您的应用在所有设备上都取得成功,它必须 容忍功能变化,并提供灵活的用户界面, 不同的屏幕配置
为了帮助实现设备兼容性,Android 提供了一个动态应用框架,供您在静态文件中提供特定于配置的应用资源,例如针对不同屏幕尺寸的不同 XML 布局。然后,Android 会根据当前设备配置加载适当的资源。包含 为应用设计和其他应用资源,您可以发布 单一应用软件包 (APK),可优化各种应用平台上的用户体验 。
不过,如有必要,您可以指定应用的功能要求和 控制哪些类型的设备可以从 Google Play 商店安装您的应用。 本文档介绍了如何控制哪些设备可以访问您的应用,以及如何准备您的应用以覆盖合适的受众群体。
“兼容性”是什么意思?
关于 Android 开发,有两种类型的兼容性: 设备兼容性和应用兼容性。
由于 Android 是一个开源项目,因此任何硬件制造商都可以 打造搭载 Android 操作系统的设备。不过,设备“兼容 Android”的前提是它可以正常运行针对 Android 执行环境编写的应用。Android 执行环境的具体细节由 Android 兼容性计划定义。每台设备都必须通过兼容性测试套件测试 (CTS) 才能被视为兼容。
作为应用开发者,您无需担心设备是否兼容 Android,因为只有与 Android 兼容的设备才会附带 Google Play 商店。因此,如果用户从 Google Play 商店安装了您的应用 使用 Android 兼容设备的用户。
不过,您需要考虑您的应用是否与每种可能的设备配置兼容。因为 Android 在多种设备上运行 配置,但某些功能可能无法在部分设备上使用。例如,一些 设备可能不包含罗盘传感器。如果应用的核心功能需要罗盘传感器,那么应用只能与带有该功能的设备兼容。
控制应用在设备上的可用性
应用可通过平台 API 利用 Android 支持的各种功能。有些功能基于硬件,例如罗盘传感器;有些是 基于软件,例如应用微件;而有些依赖于平台版本。 并非每台设备都支持所有功能,因此您可能需要根据应用所需的功能控制应用在设备上的可用性。
为了尽可能让您的应用获得最庞大的用户群体,请使用单个 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()
如下所示:
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 上的过滤器 文档。
<ph type="x-smartling-placeholder">平台版本
不同的设备可能会运行不同版本的 Android 平台,例如 Android 12 或 Android 13。每个后续的平台版本通常会添加之前版本中不可用的新 API。为表明可用的 API 集,每个平台版本都会指定 API 级别。例如,Android 12 的 API 级别为 31,而 Android 13 的 API 级别为 33。
您必须指定
minSdkVersion
和
targetSdkVersion
您的 build.gradle
文件中的值:
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
文件,请参阅
配置 build。
每个后续版本的 Android 都为使用之前平台版本的 API 构建的应用提供兼容性,因此您的应用在使用已记录的 Android API 时,与未来版本的 Android 兼容。
不过,如果您的应用使用的是较新平台版本中添加的 API,但其主要功能并不需要这些 API,则应在运行时检查 API 级别,并在 API 级别过低时适当降级相应的功能。在这种情况下,请将 minSdkVersion
尽量设置为适用于应用主要功能的最低值,然后将当前系统的版本 SDK_INT
与 Build.VERSION_CODES
中对应于您要检查的 API 级别的代号常量进行比较,如以下示例所示:
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)。为了简化 Android 将这些变体归纳成多个组, 更易于定位:
- 四种广义的尺寸:小、标准、大和特大
- 多种广义密度:mdpi(中)、hdpi(高)、xhdpi(超 高)、xxhdpi(超超高)及其他
默认情况下,您的应用兼容所有屏幕尺寸和密度, 因为系统会调整界面布局和图片资源 每个屏幕所需的资源提供适用于通用屏幕的优化位图图像 各种不同密度的计算方法
尽可能使用灵活的布局来优化用户体验。 如果布局针对较大的配置更改(例如纵向和横向,或大窗口与小窗口),或者针对较小的配置更改(例如屏幕方向),请考虑提供可灵活适应配置中较小更改的备用布局。这有助于提升平板电脑、手机和可折叠设备等设备的用户体验。它 也有助于在多窗口模式下更改窗口大小。
如需了解如何为不同的应用创建备用资源, 以及如何在必要时将应用限制为特定的屏幕尺寸; 阅读 屏幕兼容性 概览并查看 大屏幕应用程序 质量指南。
出于业务原因控制应用的可用性
除了根据设备限制应用的可用性之外, 您可能需要限制应用面向企业提供 或法律原因。针对这种情况,Google Play 商店提供了 Play 管理中心内提供的过滤选项 - 供您控制应用的 出于非技术原因(例如用户语言区域或无线网络)而可用性 运营商。
根据技术兼容性(例如所需的硬件)进行过滤 组件)始终以 APK 或 AAB 中包含的信息为依据, 文件。但是,出于非技术原因(如地理语言区域)的过滤始终在 Google Play 管理中心中处理。
其他资源:
- 应用资源概览
- 介绍了 Android 应用如何采用将应用资源与应用代码分开的结构,包括如何为特定设备配置提供备用资源。
- Google Play 上的过滤器
- 介绍了 Google Play 商店阻止您的应用安装在不同设备上的不同方式。
- Android 中的权限
- Android 如何通过权限系统来限制应用访问某些 API,该系统要求应用必须先征得用户同意,才能使用这些 API。