1.1 了解全貌——Android王国简介
1.1.1 Android系统架构
Android系统架构分为四层:
Linux内核层:Android系统基于Linux内核。 为Android硬件提供底层驱动,例如显示驱动,音频驱动,照相机驱动,蓝牙驱动,Wi-Fi驱动,电源管理等。
系统运行库层:通过C/C++库为Android系统提供特性支持如:SQLite库提供数据库支持,Webkit库提供浏览器内核支持。
该层还有Android运行时库,提供核心库,允许用Java语言开发Android应用。Android运行时库还包含Dalvik虚拟机(5.0后是ART运行环境),它使得每个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例,相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPI性能有限等情况做了优化处理。应用框架层:提供应用程序的各种API,Android自带的核心应用就是使用这些API完成的。
应用层: 手机中所有的应用程序属于应用层,如系统自带的联系人、短信等,或者其他第三方应用程序。
1.1.2 Android已发布的版本(截止201712)
<tr>
<th width=10%, bgcolor=yellow>版本号</th>
<th width=10%, bgcolor=yellow>API级别</th>
<th width=10%, bgcolor=yellow>发布日期</th>
<th width=10%, bgcolor=yellow>版本代号</th>
<th width=10%, bgcolor=yellow>CodeName(系统名称)</th>
</tr>
<tr>
<th>1.0</th>
<th>1</th>
<th>2008-09-23</th>
<th>阿童木</th>
<th>BASE</th>
</tr>
<tr>
<th>1.5</th>
<th>3</th>
<th>2009-04-17</th>
<th>纸杯蛋糕</th>
<th>Cupcake</th>
</tr>
<tr>
<th>1.6</th>
<th>4</th>
<th>2009-09-15</th>
<th>甜甜圈</th>
<th>Donut</th>
</tr>
<tr>
<th>2.0</th>
<th>5</th>
<th>2009-10-26</th>
<th>泡芙</th>
<th>Eclair</th>
</tr>
<tr>
<th>2.2</th>
<th>8</th>
<th>2010-05-20</th>
<th>冻酸奶</th>
<th>Froyo</th>
</tr>
<tr>
<th>2.3</th>
<th>9</th>
<th>2010-12-06</th>
<th>姜饼</th>
<th>Gingerbread</th>
</tr>
<tr>
<th>3.0</th>
<th>11</th>
<th>2011-02-24</th>
<th>蜂巢</th>
<th>Honeycomb</th>
</tr>
<th>4.0</th>
<th>14</th>
<th>2011-10-19</th>
<th>冰激凌三明治</th>
<th>Ice Cream Sandwich</th>
</tr>
<th>4.1</th>
<th>16</th>
<th>2012-06-28</th>
<th>果冻豆</th>
<th>Jelly Bean</th>
</tr>
<th>4.4</th>
<th>19</th>
<th>2013-09-03</th>
<th>奇巧</th>
<th>KitKat</th>
</tr>
<th>5.0</th>
<th>21</th>
<th>2014-10-15</th>
<th>棒棒糖</th>
<th>Lollipop</th>
</tr>
<th>6.0</th>
<th>23</th>
<th>2015-05-28</th>
<th>棉花糖</th>
<th>Marshmallow</th>
</tr>
<th>7.0</th>
<th>24</th>
<th>2016-05-18</th>
<th>牛轧糖</th>
<th>Nougat</th>
</tr>
<th>8.0</th>
<th>26</th>
<th>2017-8-22</th>
<th>奥利奥</th>
<th>Oreo</th>
</table>
- 我擦,CSDN不支持table表格吗,上截图了…
1.1.3 Android应用开发特色
四大组件
- Activity 活动
- Service 服务
- BroadCast Receiver 广播接收者
- Content Provider 内容提供者
丰富的系统控件
- SQLite数据库
- 强大的多媒体
- 地理位置定位
1.2 手把手带你搭建开发环境
工欲善其事,必先利其器
1.2.1 准备所需要的工具
- JDK1.8以上:Java语言的软件开发工具包(包含Java的运行环境,工具集合,基础类库等内容)
- Android SDK:Android开发工具包
- Android Studio:Android编译器
1.2.2 搭建开发环境
- 下载AndroidStudio:
- 官网:https://developer.android.google.cn/studio/index.html
- 开发者:http://www.androiddevtools.cn/
当前正式版最新版本为:3.0.1
1.3 创建你的第一个Android项目
Hello World
1.3.1 创建HelloWorld项目
1.3.2 启动模拟器
1.3.3 运行HelloWorld
当年花了大半天去搞得东西,如今几分钟,我想起那天夕阳下的奔跑…
1.3.4 分析你的第一个Android程序
Project下的目录结构
- .gradle和.idea: Android Studio自动生成的文件
- app: 项目中的代码,资源几乎都在放app目录下
- build:编译时自动生成的文件
- libs:放置第三方jar包
- androidTest:编写Android Test测试用例,项目自动化测试
- java:放置所有Java代码
- res:项目资源目录
- AndroidManifest.xml:Android项目配置文件
- test:编写Unit Test测试用例,项目自动化测试
- .gitignore:控制版本忽略文件
- app.iml:IntellJ IDEA自动生成的文件
- build.gradle:app模块的gradle构建脚本
- proguard-rules.pro:指定项目代码的混淆规则
- build: 项目编译时自动生成的文件
- gradle: 包含gradle wrapper的配置文件 ,使用gradle wrapper不需要提前将gradle下好,Android Studio会自动根据缓存情况决定是否需要联网下载。默认不启用gradle wrapper,可以通过File-Setting-Build-Execution-Deployment-Gradle进行配置更改
- .gitignore: 指定的目录或文件排除在版本之外
- build.gradle: 项目全局的gradle构建脚本
- gradle.properties: 全局的gradle配置文件,这里配置的属性影响项目中所有的gradle编译脚本
- gradlew和gradlew.bat: 命令行界面执行gradle命令 ,gradlew在Linux或Mac系统中使用 ,gradlew.bat 在Windows系统中使用
- HelloWorld.iml: 所有IntelliJ IDEA项目中都会自动生成的文件,用来标识这是一个IntelliJ.IDEA项目
- local.properties:指定本机中SDK路径,通常自动生成
- setting.gradle: 指定项目中所有引入的模块
1.3.5 详解项目中的资源
- drawable 存放图片
- mipmap 存放应用图标
- value 存放字符串,样式,颜色等配置
- layout 存放布局文件
1.3.6 详解build.gradle文件
AndroidStudio是采用Gradle来构建项目
1.最外层目录下:build.gradle
- jcenter:代码托管仓库
- classpath:Gradle插件版本
- classpath ‘com.android.tools.build:gradle:3.0.1’
- 因为Gradle并不是专门为构建android项目开发的,Java,C++都可以用Gradle构建
- classpath:Gradle插件版本
2.App目录下的:build.gradle
apply plugin(应用一个插件):
- com.android.application 应用程序模块,可直接运行
- com.android.library 库模块,只能作为代码库依附
android闭包(配置项目构建的各种属性):
- compileSdkVersion: 指定项目的编译版本
- bulidToolsVersion: 用于指定构建工具的版本
- defaultConfig 闭包:对项目的更多细节进行配置
- applicationId:指定项目的包名
- minSdkVersion: 指定项目最低兼容的系统版本
- targetSdkVersion: 在该目标版本上已经做了充分的测试,系统将为你的应用程序启用一些最新的功能和特性
- versionCode: 指定项目的版本号
- versionName: 指定项目的版本名
- bulidTypes 闭包: 指定生成安装文件的相关配置,通常只有两个子闭包
- debug:指定生成测试版安装文件的配置,可忽略不写
- release:指定生成正式版安装文件的配置
- minifyEnable: 指定是否对项目进行混淆
- proguardFiles: 指定混淆时使用的规则文件,这里指定两个
- proguard-android.txt是在AndrliodSDK目录下的,里面是所有项目通用的混淆规则
- proguard-rules.pro 当前项目的根目录下,编写当前项目特有的混淆规则,注意:通过androidStudio直接运行项目生成的都是测试版安装文件
dependencies闭包:指定当前项目所有的依赖关系
- compile fileTree 本地依赖:对本地的jar包或目录添加依赖关系
- implementation fileTree(include: [‘*.jar’], dir: ‘libs’)
- lib目录下所有jar后缀文件添加到项目构建路径中
- 库依赖: 对项目中的库模块添加依赖关系
- compile project(‘:helper’)
- 远程依赖:对jcenter库上的开源项目添加依赖关系
- implementation ‘com.android.support:appcompat-v7:26.1.0’
- com.android.support 域名部分:用于和其他公司库区分 appcompat-v7 组名称,区分同一公司不同库
- compile fileTree 本地依赖:对本地的jar包或目录添加依赖关系
1.4 前行必备-掌握日志工具的使用
android.util.Log
1.4.1 使用Android的日志工具Log
- Log.v():verbose 最小的日志
- Log.d():debug 调试信息,比verbose高一级
- Log.i():info 比较重要的信息,比debug高一级
- Log.w():warm 警告信息,比info高一级
- Log.e():error 错误信息,比warm高一级
1.4.2 为什么使用Log而不使用Systom.out
- Log:可控制打印信息,确定打印时间,能添加过滤器,日志有级别区分
- System.out满足不了
1.5 小结与点评
学习android的起点
本章总结
回头看看,这一章我还有很多说不出因果的点,比如android系统架构/build.gradle文件每个条目的相关情况,平时开发一般也没留意吧,知其然而不知其所以然,趁这回好好总结,在之后笔记中多写写自己的思考,触类旁通.
乱拳打死老师傅,怀着敬畏的心态去复习基础.前两天我司一个android开发跟架构争论为毛后台java接口加密用MD5不用非对称加密,架构大佬直接问:你知道MD5加密底层怎么实现的吗,它的位数长度是多少…顿时无言以对..技术的选择没有必然的好坏,但是跟别人讨论还是要提前做好准备吧,装逼有风险,就这些.