原文地址:http://developer.android.com/guide/practices/compatibility.html

android被设计成能够在多种不同的设备上执行的系统,为了达到这个目的,android系统提供了一个动态app框架,在这个框架中你能够在动态文件(为不同屏幕大小的不同xml布局文件)中提供详细的配置资源。android会依据设备配置载入适当的资源。

兼容性是什么意思?

有两种不同的适配:设备适配和app适配。

设备兼容:能够在android执行环境下正常执行应用程序。

作为一个app开发人员。你不须要是否一个设备是设备兼容的。可是你必须得考虑在这样潜在的设备配置下的app适配。

让你的应用对设备来说可用

一些特征是基于硬件的比方指南针传感器。一些是基于软件的不如app widgets,一些是基于平台版本号的.

为了实现你的应用程序的最大的用户群,你应该努力使用一个apk来支持越多的设备配置越好。在非常多情况下,你应该在执行时禁用可选的功能,为不同的配置提供应用程序资源的替代品(比方为不同的屏幕尺寸提供不同的布局文件),假设必须。你须要通过Google play的下面特征来限制你的应用程序的可用性:

1,设备特征

2.平台版本号

3.屏幕配置

设备特征

为了让你基于设备特征合适的管理你的app,android定义了featuresIds,比方说指南针传感器的featureid是FEATURE_SENSOR_COMPASS ,
app widgets的feature id是FEATURE_APP_WIDGETS.

假设必要的话,你能够保护安装你的app可是他们的设备没有提供在你的manifest文件里用<uses-feature> 声明的feature的用户.

比方说,你的app不会再一个缺少指南针传感器的设备上起作用,你能够这样在你的manifest文件里声明指南针传感器:

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

Google play 商店比較你app声明的feature和用户设备中上的feature,来决定你的app是否兼容每一个应用。若设备没有提供全部你的app须要的feature,用户就不能安装你的app.

可是,若你的app的主要作用不须要一个设备feature,你须要设置required属性为false并且在设备执行时检測设备feature,若你的app feature在当前设备不可用,你须要优雅的降解app feature,比方,你能够像这样通过调用hasSystemFeature()查询一个feature是否可用:

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

平台版本号

比方。 Calendar
Provider
 API是在API level 14之后加入的。假设你的app必须使用这个api,你能够这样声明你支持的最低版本号号是14:

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

targetSdkVersion 是重要的,由于它暗示系统你的app是否继承在新版本号中的行为改变。若你不把targetSdkVersion更新到最新版本号。这时系统假设在执行最新版本号sdk时,你的app须要的是先前兼容的行为。

若你的app使用一些在近期的sdk版本号中加入的api,可是不把他们作为主要功能,你应该在执行时检查API
levels,同一时候当API level太低时,优雅的减少符合的feature.这样的情况下,将能支持你app执行的最低的APIlevel赋值给minSdkVersion。然后比較当前系统版本号SDK_INT 与你想检查的符合的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为每一个设备定义了两种特征:屏幕尺寸(small, normal, large, and xlarge)和屏幕密度(mdpi
(medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high), and others.)。

默认情况下你的app是兼容全部尺寸和密度的。系统为每一个屏幕对你的UI布局和image资源做了合适的调整,可是你应该通过为不同尺寸的屏幕加入特殊的布局和为普通屏幕密度优化bitmap images来优化用户体验。

出于商业原因,控制应用程序的可用性 

你应该为了商业或法律的原因来限制你的app的可用性。不如一个展示伦敦地下列车表的应用不能在英国之外使用,对于这样的类型的情况。Google play在开发人员控制台提供了过滤选项来同意你控制你的应用在非技术方面的可用性。比方用户位置。

android设备兼容性的更多相关文章

  1. Android 设备兼容性(1)

    引用: Android官网 > 开发 > API 指南 > Introduction > Device Compatibility 1. 基本概念 Android被设计成能在各 ...

  2. 不同地区Android开发者使用哪些设备测试APP?

    我们的团队密切关注着移动世界的趋势,以便可以提供所有有关变化的最紧密和最重要的信息.春天恰好是对app进行新一轮测试并检查其与不同Android设备兼容性如何的最佳时机.下面让我们一起来看看全世界范围 ...

  3. android最佳实践之设备兼容性

    由于不同手机的尺寸大小,屏幕分辨率可能存在差异.在开发应用的时候,你或许遇到过这些的问题: 1, 为什么图片在另外的手机上显示的时候变小了,又或是缩小了? 2, 为什么在layout中定义好的格局在另 ...

  4. Android开发-API指南-设备兼容性

    Device Compatibility 英文原文:http://developer.android.com/guide/practices/compatibility.html 采集日期:2014- ...

  5. [Android文档翻译]设备兼容性

    原文地址:Device Compatibility Android设计于运行在多种不同类型的设备上,从手机.平板到电视.作为一名开发者,设备的涵盖范围为你的app提供了广大的潜在用户.为了让你的app ...

  6. Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

    指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...

  7. Android IOS WebRTC 音视频开发总结(七十)-- 移动端音视频技术优化的七个方向

    最近直播很火,很多朋友对背后的技术比较感兴趣,所以今天我们整理一篇关于移动端视频优化的文章,这篇文章是我朋友在一个技术大会上分享过的,更多内容请关注我们的微信公众号:rtcblacker 视频直播为什 ...

  8. Android manifest之manifest标签详细介绍

    AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...

  9. Android开发-API指南-<uses-feature>

    <uses-feature> 英文原文:http://developer.android.com/guide/topics/manifest/uses-feature-element.ht ...

随机推荐

  1. Linux命令----uname查看系统信息

    uname就是UNIXname的缩写 1.uname可以查询操作系统信息 [root@yuan ~]# uname Linux 2.uname -n显示系统的主机名 [root@yuan ~]# un ...

  2. Android : alsa-lib 移植

    一.官网下载lib源码 网址:http://www.alsa-project.org/main/index.php/Download#alsa-lib 左击:Stable Release列表中的[1. ...

  3. 2.15 C++常量指针this

    参考: http://www.weixueyuan.net/view/6346.html 总结: 在每一个成员函数中都包含一个常量指针,我们称其为this指针,该指针指向调用本函数的对象,其值为该对象 ...

  4. DevExpress ASP.NET v18.2新功能详解(三)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress ASP.NET Cont ...

  5. 软件工程项目程序:WC

    1:代码来源:http://yuncode.net/code/c_5087c8e4cd77190 2:Platform:Eclipse Language:Java 3:Bug:暂时没有 4. Func ...

  6. ios scrollView代理的用法

    // // ZQRViewController.m // 03-图片缩放 // // Created by apple on 17-08-25. // #import "ZQRViewCon ...

  7. ios读取plist文件:

    @property (nonatomic,strong) NSArray *imageData;//定义一个数组 //懒加载数据 -(NSArray *)imageDate { if(_imageDa ...

  8. ob_gzhandler — ob_start callback function to gzip output buffer

    <?php ob_start("ob_gzhandler"); ?><html><body><p>This should be a  ...

  9. 通过日志关键字检测判断obb程序是否工作正常

    C118+Osmocom-bb 多机 gsm sniff环境,经常发生工作一段时间后,某个手机监听的arfcn就不工作了. 检查日志发现,日志最后有连续的多条:TOA AVG is not 16 qb ...

  10. JAVA_全局配置文件(配置网址,url等等)_第二种方式

    @ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中 1.application-local.yml 配置文件 2.Service 3. ...