两种类型的兼容性:设备兼容性和应用兼容性。

设备的Android兼容性就是app能够正确运行的Android执行环境(Android execution environment)。Android执行环境的具体定义可参见Android compatibility program,并且每个设备都必须通过CTS(Compatibility Test Suite)的兼容性认证。

设备的Android兼容性主要目的是:

  1. 为程序开发者提供统一的程序环境和硬件环境。
  2. 为用户提供统一的程序体验。

作为一个应用开发者,我们不需要关心设备的Android兼容性,只需要关心app是否和不同厂商的设备兼容。因为Android运行的设备配置非常广泛,有些功能不是所有的设备都拥有的。比如有些设备可能没有罗盘传感器,而你的app核心功能正好需要罗盘传感器,这就会造成app与不同设备的兼容性问题。

app兼容不同设备

Android支持多种功能。有些功能是基于硬件的(比如罗盘传感器)、有些是基于软件的(比如app widget),还有一些是基于系统版本的。不是所有的设备都能支持所有的功能的,因此,需要基于app请求的功能来控制app的兼容性。

为了能够达到一个app适配不同设备的目的,结合上述Android的功能情景,app兼容不同设备可以通过一下三个方面:

  • Device features
  • Platform version
  • Screen configuration

Device features(设备功能)

Android为每一个硬件功能和软件功能都定义了功能ID。举例来说,罗盘传感器的功能ID是FEATURE_SENSOR_COMPASS,app widget的功能ID是FEATURE_APP_WIDGETS。

必要的话,可以在mainifest中声明<uses-feature>元素,阻止没有某一功能的设备用户安装app。例如:

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

然而,如果app的主要功能并非是请求某个设备功能,可以设置属性required为“false”并且在运行时检查这个设备功能,代码如下:

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

注意:有些system permissions会隐藏着要求一些设备功能。比如蓝牙权限BLUETOOTH就隐含着请求使用设备功能FEATURE_BLUETOOTH。更多的隐藏请求功能见Permissions that Imply Feature Requirements。

Platform version(平台版本)

不同的设备可能运行在不同的系统版本上。每个连续版本通常都会增加一些API,这些新增的API在旧版本中是不能用的。可以在manifest中使用<uses-sdk>标签和它的minSdkVersion属性,来声明app最低兼容的版本。

使用旧版本的API进行编码能够确保app前向兼容(兼容旧版本之后的),因此在使用API时务必要查看文档确定其API LEVEL。

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

  • minSdkVersion:声明app编译的最低版本。
  • targetSdkVersion:声明app优化的最高版本。

Screen configuration

Android运行在各种尺寸的设备上,从手机到平板再到电视等等。为了分别屏幕类别,Android为每个设备都定义了两个特点:屏幕尺寸(屏幕的物理大小)和屏幕密度(在屏幕上像素物理密度,被成为DPI)。

  • 四种广义尺寸:small, normal, large和xlarge。
  • 几种广义密度:mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high)和其它。

默认情况下,app是兼容所有屏幕尺寸和密度的,因为必要的时候,系统会给每个屏幕适当的调整UI布局和图片资源。但还是需要为每种屏幕配置优化用户体验。为不同的屏幕大小增加特定的布局,为共同的屏幕密度优化位图图片。

关于如何为不同屏幕创建可选资源和如何限定app使用某个屏幕大小,参见Supporting Different Screens。

更多相关文章

  1. Android Wear带你理解跨设备的Android 技术体系
  2. Android 时间同步功能 NTP NITZ
  3. Android 图表开源框架之MPAndroidChart LineChart折线图(六)实现翻
  4. android 仿微信聊天界面,以及语音录制功能
  5. Android获取设备信息
  6. Android中通过NTP服务器获取时间功能源码分析
  7. Android记事本NotePad应用功能拓展(四)

随机推荐

  1. 我用Python展示Excel中常用的20个操作
  2. 在 Node.js 中通过子进程操作标准输入/输
  3. Pandas也能修改样式?快速给你的数据换个St
  4. React 教程:React 快速上手指南 [每日前端
  5. Python办公自动化|自动整理文件,一键完成!
  6. 如何科学的从早起这里薅走一本书
  7. 多图+代码 | 详解Python操作Excel神器ope
  8. 如何使用print实现不换行打印
  9. 刺激!一行代码即可导出所有浏览记录
  10. 如何用Python快速优雅的批量修改Word文档