Android是可以在许多不同类型的设备上运行,从手机到平板电脑和电视机。作为一名开发人员,设备的范围内提供为您的应用潜力巨大的受众。为了让你的应用是成功的在所有这些设备,就应该容忍一些功能变异,并提供适应不同的屏幕配置灵活的用户界面。
为了方便您的朝着这个目标努力,Android提供一个动态的应用程序框架,使您可以在静态文件(如不同的屏幕大小不同的XML布局)提供配置特定的应用程序资源。 Android的然后加载基于当前设备配置相应的资源。因此,与一些深谋远虑到您的应用程序的设计和一些额外的应用程序资源,可以发布单个应用程序包(APK),提供在各种设备上的优化用户体验。
如果有必要,但是,你可以指定你的应用程序的功能需求和控制哪些类型的设备可以安装谷歌Play商店您的应用程序。本页说明如何控制哪些设备可以访问你的应用程序,以及如何准备你的应用程序,以确保它们达到正确的受众。有关如何可以使您的应用程序适应不同设备的详细信息,请阅读支持不同的设备。
什么是“兼容性”呢?
当你阅读更多关于Android开发,你可能会遇到的各种情况,术语“兼容性”。有两种类型的兼容性:设备的兼容性和应用程序兼容性。
由于Android是一个开源项目,任何硬件制造商可以建立一个运行Android操作系统的设备。然而,一个设备的“Android兼容”只有当它能够正确运行Android的运行环境编写的应用程序。 Android的执行环境的具体细节由Android的兼容性PROG RAM定义,每个设备必须按顺序通过兼容性测试套件(CTS)被认为是兼容的。
作为应用开发者,你不必担心设备是否兼容Android的,因为只有那些的Android兼容设备包括谷歌Play商店。所以,你可以放心,谁安装你的应用程序从谷歌Play商店的用户使用的是Android兼容设备。
但是,你需要考虑你的应用程序是否与每个潜在的设备配置兼容。由于Android在多种设备配置的运行,某些功能并非适用于所有设备。例如,某些设备可以不包括指南针传感器。如果你的应用程序的核心功能需要使用罗盘传感器,那么你的应用程序只与包括指南针传感器设备兼容。
控制你的应用程序的可用性,以设备
Android支持多种功能,您的应用程序可以通过平台API利用。某些功能是基于硬件的(如一个指南针传感器),一些是(例如应用窗口小部件)基于软件的,有些是依赖于平台的版本。不是每个设备支持的所有功能,所以你可能需要控制你的应用程序的可用性根据您的应用所需的功能的设备。
为了达到最大的用户群可能您的应用程序,你要努力支持使用单个APK尽可能多的设备配置成为可能。在大多数情况下,你可以在运行时禁用可选功能,并提供应用资源,为不同的配置方案(如不同的屏幕大小不同的布局)这样做。如果有必要,但是,你可以限制你的应用程序的可用性,通过基于以下设备特性谷歌Play商店的设备:
设备功能
平台版本
屏幕配置
设备功能
为了让您能够根据设备功能管理自己的应用程序的可用性,Android的定义任何硬件或软件的功能,可能并不适用于所有设备的功能标识。例如,对于罗盘传感器的功能ID是FEATURE_SENSOR_COMPASS和应用小部件的功能ID是FEATURE_APP_WIDGETS。
如果有必要,可以阻止用户安装您的应用程序时,他们的设备不通过在应用程序的清单文件<用途特征>元素声明它提供给定功能。
例如,如果您的应用程序不缺乏指南针传感器的设备上的意义,你可以声明为需要具有以下明显标记的指南针传感器:
<manifest ... >
<uses-feature android:name="android.hardware.sensor.compass"
android:required="true" />
...
</manifest>
谷歌Play商店比较您的应用程序需要对每个用户的设备上可用的功能特性,以确定您的应用程序是否与每个设备兼容。如果设备不提供所有您的应用程序所需的功能,用户无法安装您的应用程序。
但是,如果你的应用程序的主要功能并不需要的设备功能,应设置必要的属性设置为“假”,并检查在运行时的设备功能。如果应用程序功能不可用当前设备上,优雅地降低了对应的应用程序功能。例如,您可以查询功能是否可用通过调用hasSystemFeature()所示:
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
// This device does not have a compass, turn off the compass feature
disableCompassFeature();
}
有关你可以使用你的应用程序的可用性控制用户通过谷歌Play商店,看到谷歌的过滤器播放的文件过滤器的信息。
注:一些系统权限隐含需要的设备功能的可用性。例如,如果你的应用程序请求允许访问蓝牙,这隐含要求FEATURE_BLUETOOTH设备功能。您可以通过设置在<使用特征>标签所需的属性为“假”基于此功能禁用过滤和使您的应用程序提供给设备,无需蓝牙。有关隐含所需的设备功能的详细信息,请阅读暗示功能要求的权限。
平台版本
不同的设备可以运行不同版本的Android平台,如Android 4.0或Android 4.4。每个连续的平台版本通常会加重以前的版本不提供新的API。为了表明这组API可用,各平台版本指定一个API级。例如,Android的1.0 API等级1和Android 4.4的API级别19。
API级别,您可以申报与您的应用程序兼容的最低版本,使用<使用-SDK>清单标签和它的minSdkVersion属性。
例如,在Android 4.0的(API级别14)加入日历提供商的API。如果您的应用程序不能没有这些API函数,你应该声明API级别14为这样你的应用程序的最低支持版本:
<manifest ... >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
...
</manifest>
中的minSdkVersion属性声明与您的应用程序兼容和targetSdkVersion属性声明上,你已经优化您的应用程序的最高版本的最低版本。
Android的后续版本的兼容性提供对于已使用API从以前版本的平台构建的应用程序,所以在使用Android的记录您的API应用程序应该总是compitible与Android的未来版本。
注:targetSdkVersion属性不会阻止你的应用程序被安装在比规定值更高的平台版本,但它是非常重要的,因为它向系统指示您的应用程序是否应该继承在新版本中的行为变化。如果不更新targetSdkVersion到最新版本,系统会认为你的应用程序的最新版本中运行时需要一些向后兼容的行为。例如,在Android 4.4系统行为的变化之中,与AlarmManager API创建的警报现在不精确默认情况下,这样系统可以批量应用的报警和保护系统电源,但如果你的目标API系统会保留以前的API行为您的应用程序电平比“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的推广这些变异成使它们更容易向目标群体:
广义的尺寸:小,中,大,XLARGE。
和几个广义密度:MDPI(中),华电国际(华电国际),xhdpi(超高),xxhdpi(超特高),等等。
默认情况下,您的应用程序与所有的屏幕大小和密度的兼容,因为系统让你的UI布局和图像资源进行适当调整,根据需要为每个屏幕。然而,你应该通过添加不同的屏幕尺寸和优化的位图图像常见的屏幕密度专业布局优化每个屏幕配置的用户体验。
有关如何在必要的时候,阅读支持不同的屏幕为不同的屏幕和如何限制你的应用程序特定的屏幕尺寸可替代资源的信息。
控制你的应用程序的可用性出于商业原因
除了根据设备特性限制您的应用程序的可用性,这是可能的,你可能需要限制你的应用程序的商业或法律原因可用性。例如,一个显示列车时刻表伦敦地铁的应用程序是不太可能有用到英国以外的用户。对于这种情况,谷歌Play商店提供了在开发者控制台,让您控制您的应用程序的非技术原因的可用性,如用户的区域或无线运营商过滤选项。
技术兼容性(如需要的硬件组件)过滤总是基于包含您的APK文件内的信息。但是,过滤非技术原因(如地理区域)在谷歌Play开发者控制台始终处理。