Android——兼容性
两种类型的兼容性:设备兼容性和应用兼容性。
设备的Android兼容性就是app能够正确运行的Android执行环境(Android execution environment)。Android执行环境的具体定义可参见 Android compatibility program,并且每个设备都必须通过CTS(Compatibility Test Suite)的兼容性认证。
设备的Android兼容性主要目的是:
- 为程序开发者提供统一的程序环境和硬件环境。
 - 为用户提供统一的程序体验。
 
作为一个应用开发者,我们不需要关心设备的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>
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。
Android——兼容性的更多相关文章
- 【转】Android兼容性测试CTS --环境搭建、测试执行、结果分析
		
原文网址:http://www.cnblogs.com/zh-ya-jing/p/4396918.html 为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体 ...
 - Android兼容性测试CTS --环境搭建、测试执行、结果分析
		
为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility Test S ...
 - H5移动端IOS/Android兼容性总结,持续更新中…
		
H5移动端IOS/Android兼容性总结,持续更新中… 1. IOS不识别日期 new Date("2018-07-01 08:00:00")在Android下正常显示可以直接进 ...
 - android 兼容性测试 CTS 测试过程(实践测试验证通过)
		
source: http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明 ...
 - 【转】android 兼容性测试 CTS 测试过程(实践测试验证通过)
		
原文网址:http://blog.csdn.net/jianguo_liao19840726/article/details/7222814 写这个博客的时候是为了记忆,建议大家还是看官方的说明,官方 ...
 - 简析Android 兼容性测试框架CTS使用
		
一.什么是兼容性测试? 1)为用户提供最好的用户体验,让更多高质量的APP可以顺利的运行在此平台上 2)让程序员能为此平台写更多的高质量的应用程序 3)可以更好的利用Android应用市场 二.CTS ...
 - Android兼容性测试CTS
		
一.简介 为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility ...
 - 【转】Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析
		
原文网址:http://www.cnblogs.com/zh-ya-jing/p/4452675.html CTS Verifier算是CTS的一部分,需要手动进行,主要用于测试那些自动测试系统无法测 ...
 - Android兼容性测试CTS Verifier-环境搭建、测试执行、结果分析
		
CTS Verifier算是CTS的一部分,需要手动进行,主要用于测试那些自动测试系统无法测试的功能,比如相机.传感器等.由于硬件配置或其他原因,不同手机上部分测试项目被隐藏,也就是说CTS Veri ...
 
随机推荐
- Vuejs之Component slot 插槽详解
			
Vuejs的component的数据进行了沙箱隔离,除js全局变量如Math, Date之类外无法访问用户自定义的变量,所以使用component写组件或嵌套组件时明白变量的访问非常重要 编译作用域 ...
 - NOIP2016提高A组 A题 礼物—概率状压dp
			
题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有n种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种礼物的喜悦值不能重复获得). 每次,店员会 ...
 - Jeecms之查询实现
			
现有一需求如下: 按时间段查询及留言状态(已回复,未回复,已审批)来查询留言. 当时的想法是这样子的,首先要把查询的条件通过页面传递到后台.于是在后台管理中找看有没有类似的功能,费了半 ...
 - 【DM642】ICELL Interface—Cells as Algorithm Containers
			
ICELL Interface—Cells as Algorithm Containers: DSP的算法标准(XDAIS)为算法提供了一个标准的接口.这样我们就可以使用第三方的算法.For tech ...
 - Spring-session整合到Redis
			
闲来无事,学习一下spring的session管理,作为一个初学者,我了解到了如下内容: 1.为何要用Spring-session 在传统单机web应用中,一般使用tomcat/jetty等web容器 ...
 - C#绘制渐变线条
			
Brush brush = , ), , ), Color.Blue, Color.White); e.Graphics.FillRectangle(brush, this.ClientRectang ...
 - Django--csrf跨站请求伪造、Auth认证模块
			
form表单中使用跨站请求伪造 { % csrf_token % } 会动态生成一个input框,内部的value是随机刷新的 如果不想校验csrf from django.views.decorat ...
 - input 输入框type='search'去掉×
			
input输入时,为了让ios键盘的前进会变为搜索,设置input的type='search'但是安卓输入框后面会出现个小叉,实际不需要这个× 解决办法: input[type=search]::-w ...
 - 关于dex 64K 引用限制
			
1.官方文档 https://developer.android.com/studio/build/multidex 主要内容: 什么是64K限制 编码时如何避免64K 限制 拆分dex避免64K 限 ...
 - 关于 linux 的 limit 的设置
			
以下内容参考链接 1.file-max系统最大打开文件描述符数 永久性:在/etc/sysctl.conf中设置 2.nr_open是单个进程可分配的最大文件数. 内核支持的最大file handle ...