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

设备的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(设备功能)

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>

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

Android——兼容性的更多相关文章

  1. 【转】Android兼容性测试CTS --环境搭建、测试执行、结果分析

    原文网址:http://www.cnblogs.com/zh-ya-jing/p/4396918.html 为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体 ...

  2. Android兼容性测试CTS --环境搭建、测试执行、结果分析

    为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility Test S ...

  3. H5移动端IOS/Android兼容性总结,持续更新中…

    H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进 ...

  4. android 兼容性测试 CTS 测试过程(实践测试验证通过)

    source: http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明 ...

  5. 【转】android 兼容性测试 CTS 测试过程(实践测试验证通过)

    原文网址:http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明,官方 ...

  6. 简析Android 兼容性测试框架CTS使用

    一.什么是兼容性测试? 1)为用户提供最好的用户体验,让更多高质量的APP可以顺利的运行在此平台上 2)让程序员能为此平台写更多的高质量的应用程序 3)可以更好的利用Android应用市场 二.CTS ...

  7. Android兼容性测试CTS

     一.简介 为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility ...

  8. 【转】Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析

    原文网址:http://www.cnblogs.com/zh-ya-jing/p/4452675.html CTS Verifier算是CTS的一部分,需要手动进行,主要用于测试那些自动测试系统无法测 ...

  9. Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析

    CTS Verifier算是CTS的一部分,需要手动进行,主要用于测试那些自动测试系统无法测试的功能,比如相机.传感器等.由于硬件配置或其他原因,不同手机上部分测试项目被隐藏,也就是说CTS Veri ...

随机推荐

  1. ListCtrl使用指南

    http://blog.csdn.net/bqw2008/article/details/2047489 Windows ListCtrl使用技巧1. ListCtrl 风格       LVS_IC ...

  2. 关于vue项目报错:this relative module was not found

    VScode编辑器增加了一行代码import func from './vue-temp/vue-editor-bridge'; 删除即可

  3. [转]Windows钩子

    Windows钩子 Windows应用程序的运行模式是基于消息驱动的,任何线程只要注册了窗口类就会有一个消息队列来接收用户的输入消息和系统消息.为了取得特定线程接收或发送的消息,就要 Windows提 ...

  4. JZOJ100045 【NOIP2017提高A组模拟7.13】好数

    题目 题目大意 首先有一个定义: 对于一个数,如果和它互质的数可以组成一个等差数列,那么这个数叫"好数". 现在给你一个数列,有三种操作: 1.询问一段区间内的好数的个数. 2.将 ...

  5. 移动端video视频播放问题

    1.视频播放后自动全屏 video添加playsinline  webkit-playsinline属性 2.安卓暂停或播放完毕不能滑动 通过js判断机型,安卓去掉controls属性,ios保留co ...

  6. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  7. 安装配置flask环境

    安装 Flask 好的,让我们开始吧! 现在我们必须开始安装 Flask 以及一些我们会用到的扩展.我首选的方式就是创建一个虚拟环境,这个环境能够安装所有的东西,而你的主 Python 不会受到影响. ...

  8. numpy库数组属性查看:类型、尺寸、形状、维度

    import numpy as np   q = np.array([1,2,3,4],dtype=np.complex128)    print("数据类型",type(q))  ...

  9. HNOI 2019 多边形

    HNOI 2019 多边形 题意 小 R 与小 W 在玩游戏. 他们有一个边数为\(n\)的凸多边形,其顶点沿逆时针方向标号依次为\(1,2,3...n\).最开始凸多边形中有\(n\)条线段,即多边 ...

  10. Leetcode94. Binary Tree Inorder Traversal二叉树的中序遍历(两种算法)

    给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归: class So ...