自学郭霖《第一行代码》第二版一个月,发现这确实一本非常适合小白的书,从安装Android Studio到创建第一个活动最后写下第一行Android代码,上面写的都非常清楚。以为这样按着书本内容学下去,不求能变成什么大神(不现实),最起码能在Android项目上有一定自学能力,遇到问题能找到方法去解决,能看懂别人写的代码,这是我梦寐以求想得到的能力。刚起步这个开始是贼痛苦也是很迷茫的,也不知道这个过程什么时候能够结束,而我自己能做得就是把握好当下每一天,自己天天有进步就好。还有最重要的一点:每天提醒自己不能懒惰,不能放纵自己。
《第一行代码》这本书我了头三章,现在在看第四章碎片的部分。本以为这样按部就班能把整部书这样循环渐进地学习下去,但是我人生第一个Android项目来临了。这是一个关于打印机的项目,就是扫码支付然后打印出小票,看似我们生活息息相关的一幕,却难倒了我。哪能怎办,硬着头皮上呗,我同事告诉我技术就是让逼出来的。不会的东西只能自己去查,出现错误自己研究。没人能帮你只能靠你自己。所以今天开始结合项目地去学习。首先我拿到需求看了一下,需求1:基于安卓4.2.2系统做应用开发。看到这个需求我隐约记得书上第一章讲到过,于是赶紧去翻书,找到了app目录下的build.gradle文件对android闭包所有内容又重新看了一遍,刚开始以为是要改这个地方
后来发现这里的 25表明用Android7.1系统的SDK编译。然后去一个Android交流群问了一下,
人告诉我有两个问题:第一,你只是在4.2.2系统上运行(实际项目根本不会这么做)。第二还是最低兼容4.2.2版本以上版本都好使。我看到这个问题第一想到的是在创建项目的时候会有一个选项,让你选择最低兼容版本。当然你也可以事后改,所要改的地方是在:
minSdkVersion用于指定项目最低兼容的Android系统版本,这里指定成15表示最低兼容到Android4.0(他们告诉我现在最低兼容4.4)。targetSdkVersion指定的值表示你在该目标版本上已经做过了出充分的测试,系统将会为你的应用程序启用一些最新的功能和特征。比如说Android6.0系统中引入运行时权限这个功能,而如果你将targetSdkVersion指定成23或者更高,那么系统就会为你的程序启用运行时权限功能,而如果你将targetSdkVersion指定成22,那么就说明你的程序最高只在Android 5.1系统上做过充分的测试,Android6.0系统中引入的新功能自然就不会启动了。这时候我就想问了这里的15、25是代表什么意思?其实这里的15、25代表的是API等级。那么API等级又是什么?API级别是一个整数值,它唯一标识了一个具体版本的Android平台,及其框架的API的版本。
Android平台提供了一套框架API,使得应用程序可以与系统底层进行交互。该框架API由以下模块组成:
一组核心的包和类
清单(manifest)文件的XML元素和属性声明
资源文件的XML元素和属性声明及访问形式
各类意图(Intents)
应用程序可以请求的各类授权,以及系统中包含的授权执行
每个Android平台的后续版本会包括它提供的更新的Android应用程序框架的API。
该框架的API的更新设计,使高版本的API与早期版本兼容。也就是说,在新版本API中大多数都是新增功能,和引进新的或替代的功能。作为API的部分升级,老的替换的部分已过时,但不会从新版本中删除,使得已有的应用程序仍然可以使用它们。在极少数情况下,旧版本API的部分可能被修改或删除,通常这种变化是为了保障API的稳定性及应用程序或系统的安全。所有其他早期版本的API将不做修改的保留。
一个Android平台提供的框架API,被指定一个整数标识符,称为“API级别”。每一个版本的Android平台只支持有一个API级别,虽然该支持是隐含地包括了所有早期的API级别(一直到API级别1级)。Android平台的最初版本提供的框架API级别是1级,随后的版本依次递增。
应运API 等级的意义:
API级别标识为保证用户和应用程序开发者的最佳体验,起了关键作用:
它让Android平台可以描述它支持的框架API的最高版本
它让应用程序可以描述它需要的框架API版本
它使得系统可以在硬件设备上安装应用程序时能够检查版本是否匹配,使得版本不兼容的应用程序不会被错误安装在设备之上.
每个版本的Android平台都在其内部存储了自己的API级别标识。
应用程序可以用框架API提供的清单文件元素—来描述该应用程序可以运行的最小和最大API级别,以及应用程序开发者设计期望运行的平台版本。三种属性分别描述如下:
android:minSdkVersion—指明该应用程序可以运行的API最低版本。默认是“1”。
android:targetSdkVersion—指明该应用程序设计时期望运行的目标API版本。在某些情况下,这允许应用程序使用目标API级别下定义的清单元素或行为,而不是只限于使用最低API级别定义的内容。(译者注:android之targetsdkversion的理解---兼容性问题)
android:maxSdkVersion—指明该应用程序可以运行的最高API级别。重要声明:使用该属性之前请阅读文档。
比如,要指明一个应用程序能够运行的最低API级别,应当在该应用程序的清单文件的元素中加入android:minSdkVersion属性。android:minSdkVersion的值是一个正整数,对应的是该应用程序能够运行的最低平台的API级别标识。
用户尝试安装一个应用程序,或者在系统升级后重验证应用程序的时候,Android系统首先会检查应用程序的清单文件中的属性,将其与系统内部API级别对比。系统只有在满足下列情况时才允许进行应用程序安装:
如果声明了android:minSdkVersion属性,其属性值必须小于或等于该系统的API级别对应的整数值。如果未声明,系统会默认该应用程序运行需要的最低API级别是1。
如果声明了android:maxSdkVersion属性,其属性值必须等于或大于该系统的API级对应的整数值。如果未声明,系统会默认该应用程序没有最高API级别限制。请通过阅读文档以获得系统如何处理该属性的更多信息。
应用程序清单文件中声明该属性后,元素看起来应类似于下面的例子:
这样做的主要原因是,应用程序会通过android:miniSdkVersion声明的API级别来告知系统——该应用程序使用的API是指定引入的API级别。假如没有这种属性声明,一个应用程序如果因为某些不知名的原因被安装在低级别API系统之上,那么该应用程序会在运行时因为尝试访问不存在的API而崩溃。为此,Android系统通过不允许应用程序被安装在不满足其最低API级别要求的目标硬件上来防止此类结果发生。
例如,android.appwidget类包是在API级别3中开始引入的。如果一个应用程序使用了这个API,就必须通过指明android:minSdkVersion属性为3来声明运行的最低要求。于是,该应用程序就可以在Android 1.5(API级别3级)、Android 1.6 (API级别4级)等平台上安装,但是在Android 1.1 (API级别2级)和Android 1.0平台(API级别1级)上却是无法安装的。如下是平台版本和API等级对应关系表:
Android 4.4W 20 仅限 KitKat for Wearables
Android 2.3.3 10
Android 2.3.1 9
Android 2.3 9
Android 1.0 1