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设备兼容性的更多相关文章
- Android 设备兼容性(1)
引用: Android官网 > 开发 > API 指南 > Introduction > Device Compatibility 1. 基本概念 Android被设计成能在各 ...
- 不同地区Android开发者使用哪些设备测试APP?
我们的团队密切关注着移动世界的趋势,以便可以提供所有有关变化的最紧密和最重要的信息.春天恰好是对app进行新一轮测试并检查其与不同Android设备兼容性如何的最佳时机.下面让我们一起来看看全世界范围 ...
- android最佳实践之设备兼容性
由于不同手机的尺寸大小,屏幕分辨率可能存在差异.在开发应用的时候,你或许遇到过这些的问题: 1, 为什么图片在另外的手机上显示的时候变小了,又或是缩小了? 2, 为什么在layout中定义好的格局在另 ...
- Android开发-API指南-设备兼容性
Device Compatibility 英文原文:http://developer.android.com/guide/practices/compatibility.html 采集日期:2014- ...
- [Android文档翻译]设备兼容性
原文地址:Device Compatibility Android设计于运行在多种不同类型的设备上,从手机.平板到电视.作为一名开发者,设备的涵盖范围为你的app提供了广大的潜在用户.为了让你的app ...
- Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)
指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...
- Android IOS WebRTC 音视频开发总结(七十)-- 移动端音视频技术优化的七个方向
最近直播很火,很多朋友对背后的技术比较感兴趣,所以今天我们整理一篇关于移动端视频优化的文章,这篇文章是我朋友在一个技术大会上分享过的,更多内容请关注我们的微信公众号:rtcblacker 视频直播为什 ...
- Android manifest之manifest标签详细介绍
AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...
- Android开发-API指南-<uses-feature>
<uses-feature> 英文原文:http://developer.android.com/guide/topics/manifest/uses-feature-element.ht ...
随机推荐
- python笔记1-基础概念、python安装使用配置
Python 1.基础概念 一.什么是python? python是一种面向对象.解释型的计算机语言,它的特点是语法简洁.优雅.简单易学.在1989诞生,Guido(龟叔)开发.这里的python并不 ...
- Ubuntu16.04 安装Tensorflow-CPU
最近我开始学习深度学习框架Tensorflow,一开始在windows平台下的anaconda下安装,由于anaconda安装几次后navigator打开老是出现闪退的问题,所以决定换个ubuntu下 ...
- mybatis学习(一)----入门
一.Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...
- GD2模块-图像处理
GD2模块-图像处理 1.图像处理模块的主要功能: a) 验证码 b) 加盖水印 c) 缩略图 d) 帖子图片签名 e) 在线LOGO制作 2确认PHP是否支持图像处理 检测PHPINFO文件中是否存 ...
- 九、编写led驱动
led.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #i ...
- Vuejs 用$emit 与 $on 来进行兄弟组件之间的数据传输
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Java学习笔记32(IO:序列化流)
对象中的数据 ,以流的形式,写入到文件中保存,过程称为写出对象,对象的序列化 ObjectOutputStream将对象写到序列中,实现序列化 在文件中,以流 的形式,将对象读取出来,过程称为读取对象 ...
- Python 数据结构--查找
1 顺序查找O(n) def sequential_search(a_list, item): pos = 0 found = False while pos < len(a_list) and ...
- 中国顶级黑客X档案
sunwear QQ:47347 微博: http://t.qq.com/sunwe4r 博客:http://hi.baidu.com/patricksunwear 好像不用了 日娃哥.EST核心成员 ...
- JAVA将单词首字母大写方法
public class FirstLetterUppercase { public static void main(String[] args){ System.out.println(new F ...