设备兼容

Android 是被设计运行在多种类型设备上,如 手机,平板,电视。 作为一名开发人员,你的App在不同的设备都有潜在巨大的用户群。为了使你的App能够成功应用于所有类型设备中,它应该支持功能多样性,还有针对不同的图片配置选择灵活可变用户界面。

为了帮助开发人员实现目标,Android 提供了一个动态的app 框架,这个框架提供了静态文件用来配置指定类型的app 资源(例如: 不同的图片大小使用不同的xml layout)。 Android 根据当前设备的配置加载合适的资源文件。因此如果你的app和附加的资源文件采用了这种前瞻性设计,你就可以只发布一款应用apk 但可以在多种设备中享受到完美优化的用户体现。

如果有需要,你可以指定你的app 的功能需要,和控制哪种类型的设备可以从Google Play store上下载安装。 该篇讲述了你如何控制哪种类型设备有权下载你的应用,以及如何确保你的应用能被正确的用户下载到。

”兼容“ 是什么意思?

当你阅读Android 开发文档时,你可能在不同情况下遇到过”兼容“这个词。 共有两种类型的兼容 设备兼容和应用兼容。

因为Android 是开源项目,所以任何一个硬件厂商都可以开发一个运行Android 操作系统的设备。要是这个设备可以运行在Android执行环境中的App,那么这个设备就是Android 兼容的。 Android 执行环境的具体细节定义在Android compatibility program中,每个设备需要通过Compatibility Test Suite 才能被认为是可兼容的。

作为App的开发人员,不需要担心设备是否是Android 兼容的,因为只有Android兼容的设备才能安装Android play store.

不管怎么样,你需要注意的是你的app是否是兼容于各种潜在设备配置。因为Android 可以运行的设备配置很广,一些功能可能不起作用在所有的设备中。例如:一些设备可能不包含指南针的传感器,如果你的app核心功能需要使用这个指南针的传感器,那么你的app就受到局限,只能适用于包含传感器的设备。

控制你的App对设备的可用性

Android 支持多种特性,你的app可以通过平台API去调用。 一些特性是基于硬件的,如指南针传感器, 一些特性是基于软件, 如小部件,一些是基于平台版本号,不是所有的设备都支持所有的特性,因此需要你针对你的app所需的特性控制你的app对设备的可用性。

为了实现广大用户的需求,你应该争取使用一个apk尽可能支持多种设备配置。 在大部分情况下,你可以通过在运行时停用部分功能特性或者不同的配置提供不同的app资源(如,不同的layout 使用不同的图片大小)。 如果有必要,无论怎么样,你可以基于以下设备特性通过Google Play store 来限制你的app对设备的可用性。

  • 设备特性 - Device feature
  • 平台版本号 - platform version
  • 图片配置- screen configuration

设备特性-Device feature

你根据设备特性去管理你的App的可用性是合适的,因为Android 为每一个硬件或者软件特性都定义了feature ID,这些特性可能并不在所有设备上可用。 如指南针传感器的featureID 是FEATURE_SENSOR_COMPASS , the feature ID 是 FEATURE_APP_WIDGETS.

如果需要,当他们设备没有提供你的应用中所需的feature (这个feature 在App的manifest 文件中<uses-feature>元素进行声明),你可以禁止用户安装你的应用。

例如: 如果你的App在缺少指南针传感器的设备上不起作用,那么你可以按照以下mainfest声明指南针传感器

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

Google play store 将会把你的App所需的feature 与每个用户设备上支持的feature进行比较,以此来决定你的app是否能够安装在该设备中,如果该设备不支持所需的所有features,那么用户不能安装你的A pp。

然而,如果App主要功能的实现不需要依赖设备上某个功能feature,那么可以将required 属性设置成false, 并且在运行时检查设备。如果App的feature在设备上不起作用,那么可以适当降低在该app相关的功能(If the app feature is not available on the current device, gracefully degrade the corresponding app feature)

例如你可以通过调用hasSystemFeature()查询某个功能是否可用:

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

注意: 一些系统权限毫无疑问需要设备特性的可用性,例如,如果你的App需要访问蓝牙的权限,这是绝对需要设备支持FEATURE_BLUETOOTH.

平台版本- platform version

不同的设备可能运行的Android 平台版本号不同,如Android 4.0, 或者Android 4.4, 每一个连续的版本号可能添加新的API,这些新的API在之前版本并不起作用。为了明确指出那一套API是可用的,每个平台版本都制定了一个level id,如 Android 1.0 的平台号是 API level 1.  和Android 4.4 的平台号是API level 19.

The API level 可以用来声明你的app可以兼容的最低版本号,使用<user-sdk> 标记以及minSdkVersion属性。

例如:

 Calendar Provider APIs 被加在Android 4.0, if你的app没有这个API, 不能工作,你应该如下声明你的app 最低支持的sdk 版本号

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

minsdkVersion 属性声明你的app最低支持的sdk版本号,targetSdkVersion 指明了你的App完善的最高sdk版本号

每一个连续的Android 都提供了对上一个版本开发的app的兼容性,所以当你使用Android API时, 应该总是能够兼容Android的下一个版本。

targetSdkVersion属性并不能组织你的App安装到新的android version 上,但是他会向系统指出你的App是否继承了功能的变化在新的版本上,如果targetSdkVersion 属性没有更新到最新的版本,那么系统假设你的APP需要一些向后兼容性的操作当运行在最新的版本上时。例如:

在behavior changes in Android 4.4 之间,闹铃创建了AlarmManager API 默认情况是不精确的,因此,系统能够分批处理App的闹钟并且保持系统电量, 但是如果API Level 低于19, 系统将保持上一个API 功能

不管怎样,如果你的应用使用了在最近平台版本上添加的API, 但是在主要功能里不需要他们,你应该 在运行时检查API level,并且当API 级别太低时,减少一些相关功能。 在这种情况下为你的app的主要功能设置minSdkVersion 为可能的最低版本号, 通过Build.VERSION_CODES 你可以检查你想要的API level, sdk_INT. 例如:

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 APIsdisableDragAndDrop();
}

图片配置

Android 运行的设备大小不一样,从手机到平板再到电视,为了通过图片类型来区分设备,Android 为各自的设备定义了两个特性: 图片的大小(图片物理大小) 和图片像素密度(图片物理像素密度); 为了简化变量,Android 概括并将这些变量分组以方便区分:

四个概括大小:小,正常,大,特大

四个概括的密度: 中,高,超高,超超高。

默认情况下,你的App是兼容所有的图片大小和密度,因为系统必须为每个屏幕的布局和图片资源选择最合适的。你应该通过给每一个不同大小的屏幕添加各自特别的布局来优化针对不同的屏幕配置的用户体验。

设备兼容性 -Device Compatibility相关推荐

  1. Android API 指南

    Android API 指南 最好的 Android 学习资料非官方 API 指南莫属. 众所周知,Android开发者有中文网站了,API 指南一眼看去最左侧的菜单都是中文,然而点进去内容还是很多是 ...

  2. AndroidManifest.xml 文件详解

    AndroidManifest.xml 文件详解 AndroidManifest.xml 文件详解 概述 文件特性 包名和应用ID(application ID) 应用程序组件(App compone ...

  3. Failed to install XXXX.apk on device '5358baa3': timeout

    eclipse连入真机测试的时候老是安装不上.出现一下情况: [2015-03-24 09:50:10 - XXXX] Android Launch! [2015-03-24 09:50:10 - X ...

  4. 1、一、Introduction(入门): 0、Introduction to Android(引进到Android)

    一.Introduction(入门) 0.Introduction to Android(引进到Android) Android provides a rich application framewo ...

  5. Android API Guides 安卓API指导----第一部分:Introduction(介绍)

    第一部分: Introduction(介绍) 目录包含:APP  Fundamentals     (应用程序基础) Device   Compatibility(设备兼容性) System Perm ...

  6. Android文档-开发者指南-第一部分:入门-中英文对照版

    发布的博客,排版太不行了,整理下发在百度盘上了: 第一部分:Introduction(入门) 0.Introduction to Android(引进到Android) 1.Application F ...

  7. arcore_如何使用ARCore和Android Studio构建增强现实Android应用

    arcore by Ayusch Jain 通过Ayusch Jain 如何使用ARCore和Android Studio构建增强现实Android应用 (How to build an Augmen ...

  8. OpenHarmony开源项目

    项目介绍 OpenHarmony是开放原子开源基金会(OpenAtom Foundation)旗下开源项目,定位是一款面向全场景的开源分布式操作系统. OpenHarmony在传统的单设备系统能力的基 ...

  9. 华为鸿蒙2.0 pc,华为鸿蒙工具下载-华为鸿蒙v2.0正式电脑下载 - 91单机网

    华为鸿蒙作为定制化的系统这两天应该霸屏了各个新闻专栏当中,作为华为自己的系统并且涉及到了方方面面,从手机到各类智能设备将全部的普及这个智能系统,并且在5G的加持之下真正的让万物进行互联,而不但仅之时智 ...

最新文章

  1. LruCache缓存机制
  2. LeetCode Gray Code(回溯法)
  3. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )
  4. python numba jit加速使用方法
  5. python语言的类型是_Python语言类型
  6. gcc编译器命令使用详解
  7. Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数...
  8. go语言 error
  9. Kubernetes详解(五)——Kubernetes核心对象
  10. 第三次作业 词频统计
  11. ad gerber文件生成_Gerber竟然可以倒转PCB文件!!!
  12. oracle之三 自动任务调度
  13. PhotoShop如何给字体添加下划线
  14. 解决Adobe Flash Player已不再受支持的问题
  15. OSChina 周六乱弹 —— 舔狗是没有好下场的
  16. 亮温模型--相关概念
  17. Canal的安装与使用(直接食用)--监控数据库binlog日志 实现实时操作
  18. 树莓派3B网线连接笔记本电脑以及安装ubuntu16
  19. Spark 读取CSV文件为RDD
  20. 【Unity3D】3D 视图操作 ( 视图基本元素 | 导航器 | 栅格 | 天空盒 | 3D 视图操作 | 视图旋转 | 视图缩放 | 视图平移 | 导航器操作 | 恢复方向 | 顶、右、前视图 )

热门文章

  1. oracle12520,一次意外的ORA-12520
  2. java延迟加载 dbutils_Lettuce
  3. springboot研究九:lettuce连接池很香,撸撸它的源代码
  4. 基于海思H3520DV400和QT5.9设计的车载终端DVR控制平台
  5. PPC版QQ掉线问题解决方法
  6. mysql连接数详解_查看mysql当前连接数的方法详解
  7. 百度智能云×北大图书馆丨管理精细服务精准,数字化图书馆新体验
  8. Photoshop自动导出各尺寸Android和Iphone图标,支持新版Android Studio
  9. 我用计算机写作文,用计算机写作文
  10. win7回收站恢复方法