一、引言
前两篇文介绍了Android开发的IDE——AS和AS安装时需要准备的工具包。某种程度上来说,已经可以建工程,然后开发了。
但是实际项目中,往往会涉及到一个问题,你开发的App能否运行在目标设备上,你的App与目标机器是否兼容。假设我目标是一款塞班系统的老年机,然后我装个AS开发一款安卓App,那最后结果就是浪费时间,白白开发了一款App,因为目标设备根本跑不了该程序。当然这个例子比较极端,稍微有点经验的工程师也不会做出这种傻事。但是,如果你对目标机器不了解,并且你对开发环境也不了解,只是凭感觉去做,往往或多或少会出现兼容性问题。
我这次的目标机器是一款安卓系统的智能手表,系统是Android 10.7。在我正式开发之前,我想要知道我的环境开发出来的App能否运行在该系统的智能手表上。如果不能,应该对环境做一些怎样的改动。当然,最靠谱的方式就是将App开发出来,然后装在目标机器上运行看看。但显然前期不具备该条件。当前阶段,只能在理论上判断能否正常运行起来。
初步了解下来,我需要对平台版本、SDK版本、API级别这些概念有所理解,然后可以大致确认兼容性。
二、概念学习
1. 平台版本
平台版本,其实就是安卓系统的版本。
在项目中,就是目标设备上运行的安卓系统版本。打开手机,在系统参数中也可以看到,不过一般只讨论大版本,比如Android 10、Android 9之类的。至于小版本,如10.1、10.2,不太会有人关心,就和软件版本一样,小版本往往是针对大版本打些补丁,改改bug,大版本的主要特性已经定下来了。
所以版本这个概念,一般不会有大问题,开发前,看看目标设备的系统信息就好了。
2. API级别
在了解Android的API级别之前,先得知道API是啥。
写代码的都知道,API就是编程接口(全称Application Programming Interface,取各单词首字母,简称API)。
API简介:
程序员与程序员之间协作,往往通过API。
假设我找人帮忙写代码实现一个功能,那个人哗哗哗写了几千行代码,难道我调用这个功能的时候,还得把几千行代码拷到我程序里,然后编译运行?(当然,这也可以对吧,但实际情况一般不会这么干)如果发现运行结果不对,我还得改这堆代码。
在实际情况中,往往是受委托人写了一大堆代码,然后封装起来(编成库之类的),然后提供给你一个调用的函数(Func(p1,p2,p3…)),这个函数呢有一些参数,你可以通过传入这些参数来控制调用。然后一般配个函数说明的文档,告诉你每个参数是干什么的,返回值是干嘛的(如果有)。
这样对于使用方来说,面对的就是一个函数调用,而不是几千行代码了。那API就是这个函数调用了,就像下图一样:
API的好处很明显,屏蔽实现细节,你只管调用就完事了。
Android系统也提供了大量API,你可以通过调用这些API来与Android系统进行交互。Android系统诞生之初就提供了框架级的API(说框架级是因为这些API不是零散的,而是由组织架构的),在之后的每个版本都会对该API进行更新升级。
API级别就是一个用于标识API框架版本的整数,它由某个版本的Android平台提供。比如,Android平台1.0,对应的API等级为1。而后每个较大版本的安卓系统更新都会对API等级进行升级,表现为API等级加1。下面是一张摘自菜鸟教程上的平台与API等级的对应表,不过只到Android5.1,完整的可以去网上找找。
平台版本 | API等级 | 版本号 |
---|---|---|
Android 5.1 | 22 | LOLLIPOP_MR1 |
Android 5.0 | 21 | LOLLIPOP |
Android 4.4W | 20 | KITKAT_WATCH KitKat for Wearables Only |
Android 4.4 | 19 | KITKAT |
Android 4.3 | 18 | JELLY_BEAN_MR2 |
Android 4.2, 4.2.2 | 17 | JELLY_BEAN_MR1 |
Android 4.1, 4.1.1 | 16 | JELLY_BEAN |
Android 4.0.3, 4.0.4 | 15 | ICE_CREAM_SANDWICH_MR1 |
Android 4.0, 4.0.1, 4.0.2 | 14 | ICE_CREAM_SANDWICH |
Android 3.2 | 13 | HONEYCOMB_MR2 |
Android 3.1.x | 12 | HONEYCOMB_MR1 |
Android 3.0.x | 11 | HONEYCOMB |
Android 2.3.4 Android 2.3.3 | 10 | GINGERBREAD_MR1 |
Android 2.3.2 Android 2.3.1 Android 2.3 | 9 | GINGERBREAD |
Android 2.2.x | 8 | FROYO |
Android 2.1.x | 7 | ECLAIR_MR1 |
Android 2.0.1 | 6 | ECLAIR_0_1 |
Android 2.0 | 5 | ECLAIR |
Android 1.6 | 4 | DONUT |
Android 1.5 | 3 | CUPCAKE |
Android 1.1 | 2 | BASE_1_1 |
Android 1.0 | 1 | BASE |
API等级的提升意味着什么?
每次对API等级进行提升,都是基于之前的系统API的,大多数API更改都是新增一些功能,一般不会影响老API使用(API升级的模式是向后兼容的,所以新的API仍然兼容早期的API版本。极少数情况下,也会移除或修改老的API)。API等级的更新是谷歌针对系统安全和易用性方面的改进。通过更新系统,可以增加一些功能,修补一些漏洞。对于新增的功能,安卓会增加新功能的API接口,以供开发者运用到自己的App中;对于一些漏洞病毒,谷歌也会进行封堵,开发者可以遵循新的框架API进行软件适配,从而规避风险。
3. SDK版本
SDK版本是与平台API等级是对应的。我在AS的SDK管理器中,选中了Android 10.0进行下载安装,下面是弹出的安装信息。
所以API等级可以认为就是SDK版本。
包括在新建一个工程前,向导程序会让你选择一个最小SDK版本,此时右侧下拉列表框里出现的也是API等级和平台版本。你选的版本越高,能适配的设备就越少。显然,最小SDK表示你的App支持的最低Android版本。
各API版本的设备分布还是会不定期(定期)更新的,还是蛮有意思的。