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 ...
随机推荐
- Android : 获取声卡信息的测试代码
完整的编译包(android平台): 链接:http://pan.baidu.com/s/1qXMTT7I 密码:2bow /* * ALSA parameter test program * * C ...
- Oracle创建database link(dblink)和同义词(synonym)
同一个数据库不同用户之间建立dblink和synonym 1.建立dblink 实现在A用户下通过dblink访问B用户下的数据库表,需要在A用户下创建访问B库的dblink连接 --创建远程连接db ...
- 初始化集合的花样new HashMap<String, String>{ {put("str1":"abc");} }(转)
Map集合的普通初始化方法: Map<String, String> map = new HashMap<String, String>(); map.put("Na ...
- 杭电多校第三场 A Ascending Rating
Problem Description Before the start of contest, there are n ICPC contestants waiting in a long queu ...
- <顺序访问><随机访问><HDFS>
Overview 如果你了解过HDFS,至少看过这句话吧: HDFS is a filesystem designed for storing very large files with stream ...
- 2019-02-25 EST 科技文翻译
The Definition of Theme and Rheme The point of departure is equally presented to the speaker and to ...
- synchronized(三)
package com.bjsxt.base.sync003; /** * 对象锁的同步和异步问题 * @author alienware * */public class MyObject { pu ...
- WIFI探针 搞定
- ubuntu安装nodejs,npm live-server
sudo apt-get install curl 先安装的是curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/in ...
- 2019-03-22-day017-re模块
讲在课前 严格的执行每天的内容 学习的方法 记笔记 课上记框架 画思维导图 常用模块 30分钟 复习 翻笔记 2h 把课上的例子跟着都敲一遍 遇到不会的 自己研究5分钟 还不会 问问同学 再不会 问问 ...