原文地址: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. translclude

    .transclude:true 启用transclude,启用以后,有两个地方会发生变化: ①.使用指令的元素内部的所有内容都会被保存起来.不妨先把这一段内容称为一坨. 比如指令元素是这样的: &l ...

  2. background低版本安卓浏览器不支持复合属性,要分开写

    background:url("http://..../xxx.jpg") no-repeat center/cover; 这种复合形式在有些低端安卓浏览器中不支持,最好分开写: ...

  3. python学习 day01 基础介绍

    一.编程的目的 1.什么是语言?编程语言又为何? 语言是一种事物与另外一种事物沟通的介质.编程语言是程序员和计算机沟通的介质. 2.什么是编程? 程序员把自己想要计算机做的事用编程语言表达出来,编程的 ...

  4. TensorFlow随机值函数:tf.random_uniform

    tf.random_uniform 函数 random_uniform( shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name ...

  5. python 基础-爬虫-数据处理,全部方法

    生成时间戳 1. time.time() 输出 1515137389.69163 ===================== 生成格式化的时间字符串 1. time.ctime() 输出 Fri Ja ...

  6. 字体图标Font Awesome 的使用

    下载地址:http://fontawesome.dashgame.com/ 将下载下来的压缩包解压,然后解压,将下载的整个文件夹复制到你的项目中,在你需要用字体图标的html中引入“font-awes ...

  7. shell 中变获取值及运算的几种方法

    num=$(tail ./image/1.txt -n 1) num=$(($num+1))

  8. 第四十二课 KMP算法的应用

    思考: replace图解: 程序完善: DTString.h: #ifndef DTSTRING_H #define DTSTRING_H #include "Object.h" ...

  9. IDEA激活

    https://blog.csdn.net/qq_34273222/article/details/78810799 目测这个服务器可用:http://idea.iteblog.com/key.php

  10. todolist待办事项

    使用html/css原生js实现待办事项列表: 支持添加待办事项,删除待办事项,切换待办事项的状态(正在进行,已经完成) 支持对正在进行以及已经完成事项编辑(单击内容即可编辑) 源代码:链接:http ...