关闭

Android的兼容性

572人阅读 评论(0) 收藏 举报
分类:

引言

   可运行Android程序的并不是只有手机,还有平板和电视。并且Android手机和Apple手机不一样,由于Android的开源性,所以厂商很多。但是作为我们开发者而言,各种各样的设备都是我们应用的潜在用户,为了让我们的程序适应更多的设备,那么我们要根据各种设备的特性做一些相应的改变。并提供灵活的用户界面,适应不同的屏幕配置。

   其实呢,Android自己就已经想到了这个问题,所以它自己自带了一个适配框架。我们可以针对不同屏幕提供不同的xml布局。然后Android系统会根据当前所运行设备的配置选择合适的资源。

   不知道大家在下载应用程序的时候有没有注意到,有的时候应用商店会提醒用户当前的应用程序是否适合你当前的设备。其实这个设置也是由我们开发者来控制的。下面在细说一二。

“兼容性”是什么意思?

   在我们开发过程中,你肯定没少听过这个词。它包含两种情况:设备兼容性和应用兼容性。

   上面在引言中我有提到过,由于Android的开源性质,从而造就了有很多的硬件厂商都可以开发android设备。然而,只有当设备能够正确运行为Android设备编写的应用程序时,才算的上“Android兼容”,Android执行环境的确切细节由Android兼容性程序定义,每个设备必须通过兼容性测试套件(CTS)才能被认为是兼容的。

   但是我们作为开发者根本不需要去关心这个问题,这个问题自有硬件开发商去头疼。因为只有Android兼容的设备才可以去应用商城下载应用程序。当然了,考虑到为了能获得更多的潜在用户,我们也要多考虑下不同设备的问题,比如,我们的一款应用需要用到指南针的硬件功能,但是某些设备没有这个硬件功能,怎么办?

   在大多数情况下,让我们的应用在运行时尽量禁用可选功能,并为不同设备的手机提供多种替代方案。当然了,如果有必要我们可以直接通过应用商店把我们的应用限制在可用设备上。

   限制行为包括:设备功能,平台版本,屏幕配置

设备功能

   Android设备制造商为了使我们开发者更好的利用好他们的设备功能,会为设备上的所有功能定义一个功能ID,比如,指南针的传感器idFEATURE_SENSOR_COMPASS,应用小部件的功能IDFEATURE_APP_WIDGETS

如有必要,我们还可以通过在应用清单文件中使用<uses-feature>元素声明该应用时,防止用户在其设备未提供给定功能时安装您的应用。

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

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


  应用商店会将您的应用程式所需的功能与每个使用者装置上的功能进行比较,以判断您的应用程式是否与每个装置相容。

果设备未提供您的应用需要的所有功能,用户将无法安装您的应用。

但是,如果您的应用的主要功能不需要设备功能,则应将必需属性设置为“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();}


注意:某些系统权限隐含地要求设备功能的可用性。例如,如果您的应用程序请求访问BLUETOOTH的权限,则隐含地需要FEATURE_BLUETOOTH设备功能。您可以根据此功能停用过滤功能,并通过在<uses-feature>标记中将必需属性设置为“false”,将您的应用提供给没有蓝牙的设备。有关隐式必需的设备功能的详细信息。

平台版本

不同的设备可能运行不同版本的Android平台,如Android 4.0Android 4.4每个连续的平台版本通常添加在以前的版本中不可用的新的API为了指示哪一组API可用,每个平台版本指定API级别。例如,Android 1.0API级别1Android 4.4API级别19

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

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

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


minSdkVersion属性声明了您的应用程序兼容的最低版本,targetSdkVersion属性声明了您对应用程序进行了优化的最高版本。

每个连续版本的Android都提供了使用之前平台版本的API构建的应用的兼容性,因此您的应用应始终与使用已记录的Android APIAndroid版本兼容。

注意:targetSdkVersion属性不会阻止您的应用程序安装在高于指定值的平台版本上,但它很重要,因为它向系统指示您的应用程序是否应该继承新版本中的行为更改。如果不将targetSdkVersion更新到最新版本,系统会假定您的应用程序在最新版本上运行时需要一些向后兼容性行为。例如,在Android 4.4的行为更改中,使用AlarmManager API创建的报警默认情况下不正确,因此系统可以批处理应用程序报警并保留系统电源,但如果您的目标API电平低于“19”。

但是,如果您的应用程序使用在更新的平台版本中添加的API,但不需要它们的主要功能,则应在运行时检查API级别,并在API级别过低时适度降级相应的功能。在这种情况下,将minSdkVersion设置为应用程序主要功能的最低值,然后将当前系统的版本SDK_INTBuild.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将这些变体概括为使其更容易定位的组:

四个一般化大小:小,正常,大和xlarge

和几个广义密度:mdpi(中),hdpihdpi),xhdpi(超高),xxhdpi(超高)和其他。

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

除了根据设备特性限制您的应用的可用性之外,您可能还需要限制您的应用因为业务或法律原因而可用。 例如,显示伦敦地铁列车时刻表的应用程序不太可能对英国以外的用户有用。对于这种情况,应用商店在开发者控制台中提供了过滤选项,可让您根据非技术原因(例如用户的区域设置或无线运营商)控制应用的可用性。

过滤技术兼容性(例如所需的硬件组件)始终基于您的APK文件中包含的信息。 但非技术性原因(例如地理区域)的过滤总是在应用开发者控制台中处理。





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:27933次
    • 积分:405
    • 等级:
    • 排名:千里之外
    • 原创:13篇
    • 转载:0篇
    • 译文:1篇
    • 评论:63条
    文章存档
    最新评论