一、什么是Android?
Android是由谷歌公司开发的一种基于Linux的开源的操作系统。
——源码地址1: https://android.googlesource.com/
——源码地址2:http://androidxref.com/
起初专为移动设备开发的一个操作系统,如手机,平板电脑,车载系统,智能电视等。
Android第一个版本2008年11月发布,至今有超过10年的历史,几乎每一年都会更新一个版本,下一个版本Anroid Q计划于今年10月23日发布。 API版本
二、Android系统分层
应用层
JAVA API Framework
Lib库及Android运行环境
HAL层
Linux内核
三、Android应用开发
需要具备哪些知识?
开发参考手册:https://developer.android.google.cn/
IDE:Android Studio 或者Eclipse
语言:JAVA
基本知识点
四、Android四大组件
Activity: 通常一个activity指的就是一个屏幕
屏幕或者窗口需要布局,布局通常在Android manifest.xml中设置
生命周期
Service
Service又叫服务,主要处理较长时间的任务
运行不依赖用户界面,在后台运行
生命周期及用法
启动类型的服务: onCreate()- >onStartCommand()->Service running--调用context.stopService() ->onDestroy()
绑定类型的服务: onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()
Broadcast Receiver: 翻译过来就是广播接收器,用于消息传递
当事件触发时发送广播,注册了广播的对象就能接收到消息
注册广播分为动态注册及静态注册
静态注册在Android manifest.xml中注册,动态在代码中注册
Content Provider
内容提供者
通过content provider为不同的应用提供数据存储和读取
通过Uri来标识唯一的访问入口
Content Provider通常会跟数据库(Sqlite)一起使用,也有网络、文件、XML的形式。
Android自带的Content Provider包括:Browser、CallLog、Contacts、MediaStore、Settings等
五、Android进程间通信
六、Context
Context是个抽象类,而Activity、Service、Application等都是该类的一个实现。在面向对象语言里面绝大多数的操作需要以对象为基础,这个时候就需要context。
七、JAVA API Framework
SystemServer:是framework中最重要的一个进程,它是在虚拟机启动后运行的第一个java进程,SystemServer启动其他系统服务,这些系统服务都是以一个线程的方式存在于SystemServer进程中。
最常用的几个服务介绍:
ActivityManagerService :AMS,管理Acvitity生命周期和事件处理
PackageManagerService :PMS,程序安装及包管理
WindowManagerService:WMS,窗口管理包括显示、View、尺寸等
Telephony Manager :通话管理
八、Android Runtime & Library
library路径:/system/lib/
So库一般是由C/C++编译成的动态库,上层的Java程序通过JNI调用
主要包含:Lib c ,OpenGL,SSL ……
Android应用都是用JAVA语言开发的,JAVA是一门解释性语言,它需要运行在虚拟机的环境下, Android Runtime和Dalvik都是解释器,Dalvik是Android 4.4以前的版本使用,ART是4.4以后的版本。
九、Android 代码是怎么执行的?
在 Android 中,Java 类被转换成 DEX 字节码。DEX 字节码通过 ART 或者 Dalvik runtime 转换成机器码。这里 DEX 字节码和设备架构无关。 Dalvik 使用 JIT(Just in time)编译而 ART 使用 AOT(Ahead of time)编译。
十、HAL层
HAL:HARDWARE ABSTRUCT LAYER,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现。
部分硬件厂商不愿意将自己硬件相关一些核心的东西开源出去,假如将对自己硬件的驱动程序全部放入内核空间驱动程序实现,那么必须遵循GPL协议,是必需开源的。有了HAL层之后,他们可以把一些核心的算法之类的东西的实现放在HAL层,而hal层位于用户空间,不属于linux内核,和android源码一样遵循的是appache协议,这个是可以开源或者不开的。
十一、Linux内核
Android驱动包含两部分,一部分是HAL层,另一部分是linux内核驱动 HAL层提供上层调用的接口,同时对接Linux内核,采用IOCTRL或者一些框架的形式来访问内核驱动 Linux内核提供各种驱动:USB,COM,WIFI,BT,CAMERA,AUDIO,FLASH
十二、AP和BP
通常来说一个Android手机包含两个处理器AP和BP
AP:Application Processor,运行操作系统和应用数据处理
BP:Baseband Processor,无线通信,信道调制,编码,包括通话,语音,短信数据业务,在此芯片上进行。