第一章 安卓开发整体介绍(启程)


文章目录

  • 第一章 安卓开发整体介绍(启程)
  • 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 系统架构

android开发数据结构 android开发详解_Java

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 外层

android开发数据结构 android开发详解_Java_02

  • 由上图可以看出两处的repositories都包含google()和jcenter(),这是我们声明要引用这些代码仓库的开源项目
  • 接下来dependencies处使用classpath声明了一个插件,是因为需要使用这样一个Android插件来利用Gradle构建项目(Gradle不是专为Android开发的)

3.5.2 内层

android开发数据结构 android开发详解_Java_03

3.6 AndroidManifest.xml

android开发数据结构 android开发详解_android开发数据结构_04

3.7 res资源文件

android开发数据结构 android开发详解_Java_05

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私有类