Android官方文档—引言(设备兼容性)

设备兼容性

Android旨在运行在许多不同类型的设备上,从手机到平板和电视。作为开发人员,该系列设备为您的应用提供了巨大的潜在受众群体。为了使你的app能够在所用的设备上面取得成功,它应该适应一些功能可变性,并提供灵活的用户界面,以适应不同的屏幕配置。

为了促进您实现这一目标,Android提供了一个动态应用程序框架,您可以在其中提供静态文件中的特定于配置的应用程序资源(例如,针对不同屏幕大小的不同XML布局)。然后Android根据当前设备配置加载适当的资源。因此,通过对您的应用程序设计和一些其他应用程序资源的一些预见,您可以发布单个应用程序包(APK),在各种设备上提供优化的用户体验。

如有必要,您可以指定应用的功能要求,并控制哪些类型的设备可以从Google Play商店安装您的应用。此页面介绍了如何控制哪些设备可以访问您的应用,以及如何准备应用以确保它们能够覆盖适当的受众群体。有关如何使应用程序适应不同设备的更多信息,请阅读Supporting Different Devices

何为“兼容性”?


当您阅读更多有关Android开发的信息时,你可能经常会遇到“兼容性”一词。兼容性有两种类型:设备兼容性和应用程序兼容性。

因为Android是一个开源项目,任何硬件制造商都可以生产运行Android操作系统的设备。然而,只有当设备能够正确运行为Android执行环境编写的应用程序时,设备才是“Android兼容的”。Android执行环境的确切细节由Android兼容性程序定义,每个设备必须通过兼容性测试套件(CTS)才能被视为兼容。

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

但是,您需要考虑您的应用是否与每个潜在的设备配置兼容。因为Android可以在各种设备配置上运行,某些功能并非在所有设备上都可用。例如,某些设备可能不包括罗盘传感器。如果您的应用程序的核心功能需要使用指南针传感器,那么您的应用程序仅与包含指南针传感器的设备兼容。

控制应用程序对设备的可用性


Android支持您的应用通过平台API使用其各种功能,一些功能是基于硬件的(例如指南针传感器),一些是基于软件的(例如app小部件),一些功能依赖于平台。并非每个设备都支持所有功能,因此您可能需要根据应用程序所需的功能控制应用程序对设备的可用性。

为您的应用程序实现最大的用户群,您应该努力使用单个APK支持尽可能多的设备配置。在大多数情况下,您可以通过在运行时禁用可选功能并为不同配置提供备用应用程序资源(例如针对不同屏幕大小的不同布局)来实现此目的。但是,如有必要,您可以根据以下设备特征,通过Google Play商店限制应用对设备的可用性:

  • 设备特性
  • 平台版本
  • 屏幕配置

设备特性

为了让您根据设备功能管理应用的可用性,Android定义了可能并非在所有设备上都可用的任何硬件或软件功能的功能ID。例如,罗盘传感器的功能ID是FEATURE_SENSOR_COMPASS,应用程序窗口小部件的功能ID是FEATURE_APP_WIDGETS。

如有必要,您可以通过使用< uses-feature>应用程序清单文件中的元素来声明用户设备未提供给定功能时阻止用户安装应用。

扫描二维码关注公众号,回复: 3513531 查看本文章

例如,如果您的应用程序在缺少罗盘传感器的设备上没有意义,您可以根据需要使用以下清单标记声明罗盘传感器:

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

 Google Play商店会将您的应用所需的功能与每个用户设备上的功能进行比较,以确定您的应用是否与每个设备兼容。如果设备未提供您的应用所需的所有功能,则用户无法安装您的应用。但是,如果应用程序的主要功能不需要设备功能,则应将required属性设置为“false”,并在运行时检查设备功能。如果当前设备上的应用功能不可用,请正常降级相应的应用功能。例如,您可以通过调用hasSystemFeature()来查询功能是否可用,如下所示:

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device does not have a compass, turn off the compass feature
    disableCompassFeature();
}

 有关可用于通过Google Play商店控制用户应用程序可用性的所有过滤器的信息,请参阅Google Play上的过滤器文档。

注意:某些系统权限隐式要求设备功能的可用性。例如,如果您的应用请求访问BLUETOOTH的权限,则隐式需要FEATURE_BLUETOOTH设备功能。您可以根据需要禁用此过滤,通过在<uses-feature>标签中将所需属性设置为“false”,使您的应用可用于没有蓝牙的设备。有关隐式所需设备功能的更多信息,请阅读Permissions that Imply Feature Requirements 

平台版本

不同的设备可能运行不同版本的Android平台,例如Android4.0或Android4.4。每个连续的平台版本通常会添加以前版本中不可用的新API。要指示哪些API可用,每个平台版本都指定API级别。例如,Android 1.0是API级别1,Android 4.4是API级别19。

API级别允许您使用<uses-sdk>标记及其minSdkVersion属性,声明与您的应用兼容的最低版本。

例如,日历提供程序API已添加到Android 4.0(API级别14)中。如果你的应用程序在没有这些API的情况下无法运行,你应该将API级别14声明为应用程序的最低支持版本,如下所示:

<manifest ... >
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
    ...
</manifest>

minSdkVersion属性声明了与您的应用兼容的最低版本,而targetSdkVersion属性声明了您优化应用的最高版本。

Android的每个后续版本都为使用以前平台版本的API构建的应用程序提供了兼容性,因此您的应用程序在使用文档化的AndroidAPI时应该始终与Android的未来版本兼容。

注意:targetSdkVersion属性不会阻止您的应用程序安装在高于指定值的平台版本上,但它很重要,因为它向系统指示您的应用程序是否应该继承新版本中的行为变化。如果未将targetSdkVersion更新为最新版本,则系统会假定您的应用程序在最新版本上运行时需要一些向后兼容性行为。For example, among the behavior changes in Android 4.4, alarms created with the AlarmManager APIs are now inexact by default so the system can batch app alarms and preserve system power, but the system will retain the previous API behavior for your app if your target API level is lower than "19".

然而,如果您的应用程序使用在较新的平台版本中添加的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/drop features that use ClipboardManager APIs
    disableDragAndDrop();
}

屏幕配置

Android在各种尺寸的设备上面运行,从手机到平板和电视。为了通过它们的屏幕类型进行分类,Android为每个设备定义了两个特性:屏幕大小(屏幕的物理尺寸)和屏幕密度(屏幕上像素的物理密度,称为DPI)。为了简化不同的配置,Android将这些杂乱的配置概括为可以更容易标识的组:

  • 四种通用的尺寸:small, normal, large, and xlarge.
  • 还有几种广义密度:mdpi(中等),hdpi(hdpi),xhdpi(超高),xxhdpi(超高)和其他密度。

默认情况下,您的应用与所有屏幕尺寸和密度兼容,因为系统会根据每个屏幕的需要对UI布局和图像资源进行适当调整。但是,您应该为每种屏幕配置优化用户体验,方法是为不同的屏幕尺寸添加专门的布局,并为常见的屏幕密度添加优化的位图图像。

有关如何为不同屏幕创建替代资源以及如何在必要时将应用限制为特定屏幕大小的信息,请阅读Supporting Different Screens

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

除了根据设备特征限制应用程序的可用性之外,您可能还需要出于业务或法律原因限制应用程序的可用性。例如,显示伦敦地铁列车时刻表的应用程序不太可能对英国以外的用户有用。对于此类情况,Google Play商店会在开发者控制台中提供过滤选项,允许您出于非技术原因(例如用户的区域设置或无线运营商)控制应用的可用性。过滤技术兼容性(例如所需的硬件组件)通常基于APK文件中包含的信息。但是,出于非技术原因(例如地理区域设置)的过滤通常在Google Play开发者控制台中处理。

猜你喜欢

转载自blog.csdn.net/weixin_42703445/article/details/82855653