第一章 安卓开发整体介绍(启程)
文章目录
- 第一章 安卓开发整体介绍(启程)
- 1. 简介
- 1.1 系统架构
- 1.1.1 Linux内核层
- 1.1.2 硬件抽象层(HAL)
- 1.1.3 系统运行库层
- ART特性
- 1. 预编译
- 2. 垃圾回收算法
- 3. 64 位
- 1.1.4 应用框架层(Java API框架)
- 1.1.5 应用层
- 1.2 Android应用开发特性
- 2. 开发工具
- 3. 资源文件
- 3.1 无需过多关心的文件
- 3.2 .gitignore
- 3.3 local.properties
- 3.4 app
- 3.5 build.gradle
- 3.5.1 外层
- 3.5.2 内层
- 3.6 AndroidManifest.xml
- 3.7 res资源文件
- 4. 使用日志
1. 简介
1.1 系统架构
1.1.1 Linux内核层
- 允许写底层硬件驱动
- 依靠Linux执行底层功能,例如线程和低层内存管理
1.1.2 硬件抽象层(HAL)
- 为特定类型硬件实现界面,例如相机和蓝牙模块。在API框架层要访问该硬件时,Android系统就是向API框架层提供此界面。
1.1.3 系统运行库层
- 本层中系统组件等(例如ART和HAL)使用到的是C/C++库提供的特性支持。例如SQLite提供的数据库,OpenGL ES 提供的2D/3D绘图,Webkit提供的浏览器内核。
如果在应用层需要使用到C/C++的代码,则需要Android NDK来访问这些原生库。 - 除了上述的库,还有Android运行时库。Android的核心库中可提供Java API框架的大部分功能,我们也可以使用Java语言编Android应用。此外,Android还包含了一款虚拟机——ART(Android Runtime),在Android 5.0前使用的是Dalvik,现在的ART是Dalvik的改进版。ART使得每一个应用都能运行在独立的进程中。
- ART 编写执行 DEX 文件,DEX可以在低内存设备上运行多个虚拟机,其是一种专为 Android 设计的字节码格式,经过优化,使用的内存很少。其中编译工具链(例如 Jack))将 Java 源代码编译为 DEX 字节码,使其可在 Android 平台上运行。
ART特性
1. 预编译
Dalvik 中的应用每次运行时,字节码都需要通过即时编译器 JIT 转换为机器码,这会使得应用的运行效率降低。在 ART 中,系统在安装应用时会进行一次预编译(AOT,Ahead-Of-Time),将字节码预先编译成机器码并存储在本地,这样应用就不用在每次运行时执行编译了,运行效率也大大提高。
2. 垃圾回收算法
在 Dalvik 采用的垃圾回收算法是标记-清除算法,启动垃圾回收机制会造成两次暂停(一次在遍历阶段,另一次在标记阶段)。而在 ART 下,GC 速度比 Dalvik 要快,这是因为应用本身做了垃圾回收的一些工作,启动 GC 后,不再是两次暂停,而是一次暂停,而且 ART 使用了一种新技术(packard pre-cleaning),在暂停前做了许多事情,减轻了暂停时的工作量。
3. 64 位
Dalvik 是为 32 位 CPU 设计的,而 ART 支持 64 位并兼容 32 位 CPU,这也是 Dalvik 被淘汰的主要原因。
1.1.4 应用框架层(Java API框架)
- 提供构建程序的各种API框架,Android系统自身会用到,我们开发应用也会用到
1.1.5 应用层
- 本层包括系统自身的应用,也包括我们开发或者下载安装的应用。就是手机软件,是对使用者最直观的体现。
1.2 Android应用开发特性
- 四大组件
Activity: 程序的页面
Service:后台服务,例如后台闹钟,自动定位
Broadcast Receiver:接收来自各处的广播
Content Provider:使得程序之间可以共享数据,例如读取电话簿的联系人
- 各种系统控件,例如按钮输入框啥的
- SQLite数据库,也可借用第三方库(LitePal)更容易上手
- 多媒体,使用程序控制音乐、视频等
- 定位,可借用定位开发很多功能
2. 开发工具
- 现在的Android studio 已经更新到4的版本了,界面相比以前更美观,多了许多功能等,实际上手体验即可
3. 资源文件
3.1 无需过多关心的文件
- .gradle 和.idea
- build
- gradle:支持gradle自下载
- gradle.properties
- gradlew/gradlew.bat:第一个mac/Linux系统的,第二个win系统的
- xxx.iml:IDEA自生成
- setting.gradle
3.2 .gitignore
- 在这可指定啥目录不关联到git
3.3 local.properties
- 本机的Android SDK路径,我之前把sdk安装到了d盘,那么这里就需要更改一下路径
3.4 app
- build:不用理
- libs:使用到第三方jar包的时候放这
- androidTest:可在此对项目编写一些自动化测试
- main/java:所有java代码
- main/res:各种资源目录
- main/AndroidManifest.xml:项目的配置文件,四大组件、各种权限都要在这里注册
- test:另一种自动测试
- .gitignore:和上边的作用一样
- app.xml:IDEA自生成
- build.gradle
- proguard-rule.pro:指定代码的混淆规则,如果不希望代码被破解者容易阅读的话
3.5 build.gradle
- AS是采用Gradle来构建整个项目的
3.5.1 外层
- 由上图可以看出两处的repositories都包含google()和jcenter(),这是我们声明要引用这些代码仓库的开源项目
- 接下来dependencies处使用classpath声明了一个插件,是因为需要使用这样一个Android插件来利用Gradle构建项目(Gradle不是专为Android开发的)
3.5.2 内层
3.6 AndroidManifest.xml
3.7 res资源文件
4. 使用日志
按升序的log级别
- Log.v():verbose级别
- Log.d():debug级别
- Log.i():info级别
- Log.w():warn级别
- Log.e():error级别
- 小tips
可以使用logd+Tab/Enter,快捷编写日志打印
可以在外部使用lodt+Tab/Enter,快捷编写String TAG私有类