android设备兼容性

原文地址: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设备兼容性

时间: 2024-10-20 15:20:23

android设备兼容性的相关文章

Android 设备兼容性(1)

引用: Android官网 > 开发 > API 指南 > Introduction > Device Compatibility 1. 基本概念 Android被设计成能在各种不同类型的设备上运行,比如手机.平板和电视.对于开发者而言,数量庞大的设备为你的应用提供了巨大潜在受众.为了让你的应用能成功的在这些设备上运行,你的应用应该能够容忍某些硬件特性的差异,并提供灵活的能适配不同屏幕配置的用户界面. 兼容特征限制(google play store): 设备特性(Device f

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

原文地址:Device Compatibility Android设计于运行在多种不同类型的设备上,从手机.平板到电视.作为一名开发者,设备的涵盖范围为你的app提供了广大的潜在用户.为了让你的app能在这些设备上成功运行,它应该容许一些特性差异,并提供灵活的UI来适配不同的屏幕配置. 为了促进你的努力能达到目标,Android提供了动态应用框架,可以让你在静态文件中放入指定配置的应用资源(比如对应不同屏幕尺寸的XML布局文件).Android会根据当前的设备配置来加载适当的资源.所以,预先想好

android最佳实践之设备兼容性

由于不同手机的尺寸大小,屏幕分辨率可能存在差异.在开发应用的时候,你或许遇到过这些的问题: 1, 为什么图片在另外的手机上显示的时候变小了,又或是缩小了? 2, 为什么在layout中定义好的格局在另外的手机上变形了? 3, 为什么自己自定义的控件尺寸显示不正常了? ................ 这些都是android中比较常见的设备兼容性相关的问题,其实解决这类问题也不难,只要掌握了一些基本概念和android内部处理兼容性问的机制,这些问题都可以迎刃而解. 下边收集了一些关于尺寸兼容性问

浅析Android 5.0中多媒体相关的新特性

本文来源于本人在所属公司内部分享的一次培训内容,由于100%是AOSP开源内容,所以应该可以分享出来给大家. Android L是在今年2014年6月的Google I/O开发者大会上正式推出的,其中包含了诸多改进,包括新的Material Design交互设计,卡片式风格的通知栏,对64位和ART的支持等等,本文则重点关注一些多媒体相关的新特性. 由于Android L发布的时间仅有半年,无论国内还是国外的相关资料比较匮乏,很多内容本人只能是在Android developer网站中对L版本的

Android 简介

要了解应用的工作原理,请从应用基础知识开始入手. 要立即开始编码,请仔细阅读构建您的第一个应用. Android 提供了一个内容丰富的应用框架,支持您在 Java 语言环境中为移动设备开发创新应用和游戏.在左侧导航窗格列出的文档中,提供了有关如何使用各种 Android API 开发应用的详细信息. 如果您是 Android 应用开发新手,则需了解以下有关 Android 应用框架的基本概念,这一点至关重要: 应用提供多个入口点 Android 应用都是将各种可单独调用的不同组件加以组合开发而成

Android知识体系梳理笔记三:动态代理模式---插件加载机制学习笔记

静态代理模式 静态代理模式就是我们常说的代理设计模式,我们采用一个代理类调用原有的方法,且对产生的结果进行控制:举个例子:我们现在在玩一款网络游戏,需要打怪升级:太累就找个代理吧,一觉醒来就会发现我们已经当上CEO,迎娶白富美,天下第一了! 本来我们只能打怪,打怪-,但经过代理类增强,我们不仅可以打怪,还可以升级拿装备.就这样子了! 上代码: * 同一功能接口 public interface PlayNetGame { String beatMonster(); } 1 2 3 4 1 2 3

Android API Guides---OpenGL ES

OpenGL ES Android包含高性能2D和3D图形开放图形库(OpenGL?的).详细而言,OpenGL ES的API支持. OpenGL是一个跨平台的图形API.用于指定的3D图形处理硬件标准的软件接口. ES是用于嵌入式设备的OpenGL规范的味道??. Android支持OpenGL ES的API的几个版本号: 的OpenGL ES 1.0和1.1 - 本API规范是由Android 1.0及更高版本号支持. OpenGL ES 2.0的 - 这个API规范由Android 2.2

Android资源文件之创建与访问

资料来源于官方api文档 Android资源文件之创建与访问 Android适配之创建别名资源 如果你想将某一资源用于多种设备配置(但是不想作为默认资源提供), 则无需将同一资源放入多个备用资源目录中.相反,可以(在某些情况下)创建备用资源,充当保存在默认资源目录下的资源的别名. 注: 并非所有资源都会提供相应的机制让你创建指向其他资源的别名.特别是, xml/目录中的动画资源.菜单资源.原始资源以及其他未指定的资源均不提供此功能. 例如,加入你有有一个应用图片icon.jpg, 并且需要不同区

Android Google官方文档解析之——Device Compatibility

Android is designed to run on many different types of devices, from phones to tablets and televisions. As a developer, the range of devices provides a huge potential audience for your app. In order for your app to be successful on all these devices,