1.专栏介绍
该专栏介绍Android系统入门开发知识,让学习者成为Framework初级开发工程师
- 环境搭建:获取Android源码编译,通过虚拟环境来运行Android编译镜像,实际工作都会在物理主板上跑Android系统
- Android开发基础:prop属性 settings数据库 智能指针 线程类 进程间通信 线程间同步 IO编程等
- Android系统结构:分析Android系统各个层级的功能和关系,也包括系统分区、OTA升级
- 启动流程:启动流程主要分析CPU上电 —> bootloader —> kernel —> android系统
- 编译原理:编译主要分析Android如何让编译构建的,分析编译生成物和打包过程
- bug分析:通过日志、linux trace、android trace、tombstones来分析
- 实战:Android系统如何点灯 定制logo和开机动画 binder/hwbinder通信demo 板载IC控制 JNI等
note:以上内容都是简单罗列,更多内容后续会不断更新,欢迎关注学习!!!
2.Android开源项目
Android Open Source Project简称AOSP
- AOSP官方网址
- Android系统是开源的,google官方在Android 开源项目 (AOSP) 代码库提供Android系统源码
- 我们可以从AOSP官方网址获取官方文档来学习Android系统以及开发
- AOSP首页有开发文档,源码仓库跳转地址,还有至关重要的Android系统架构分析
3.什么是Android系统?
官方架构介绍
看一下AOSP官网给的架构图:
- Kernel:Andoird采用Linux内核,内核运行在所有进程共享的内核空间,管理所有硬件资源,内核提供系统调用作为访问接口,一般应用层都是通过c库来访问内核
- Native and Libraries:Native指的是无ART虚拟环境,直接运行C/C++代码,该层有init logd等守护进程,还有大量so库,比如libc
- Hal:Hal层从8.0版本后都是以进程的方式存在,8.0以前是编译成so库。一般厂家在hal层封装硬件的一些操作,该层可以隐藏厂家的实现,上层控制硬件可以通过Hal层,也可以直接访问内核暴露的用户节点来控制
- ART:调用Android运行时是运行Java的虚拟机环境,也就是在该层之上的应用就是Java应用了,可以通过JNI来实现Java和C++的相互调用
- SystemServices:系统服务就是就是提供一些特殊功能的后台线程,都运行在Systemserver进程中。app可以通过获取服务,发起远程调用来获得对应的功能
- Android Framework:Android框架层一般管理系统服务、Native层服务,这一层不是具体服务的实现,他是实现服务调用的管理,为Android API实现提供接口
- System API:Android系统API,app可以通过这些接口来获取Android系统提供的功能
- App:内置app、厂家app、三方app等
- 总结:Android系统就是以Linux内核为基础,实现了一系列的Native进程和ART进程,运行的APP也是一个ART进程,它可以通过API访问系统服务功能,也可以JNI直接进入到Native层实现对应的功能
4.如何学习Android Framework?
Android系统本质就是基于Linux的应用编程
- 语言基础:C/C++/JAVA
- 系统基础:学习操作系统知识,了解内核如何管理硬件资源的,比如cpu调度、进程管理、内存管理、文件系统、虚拟文件系统、进程间通信、内核驱动模块
- Linux应用:熟悉多进程 多线程 进程间通信 线程间同步 文件操作(Linux中一切皆文件)
- Android架构:Android系统本质上就是一堆进程的集合,Android架构主要就是管理这些进程,以及提供接口给app来访问这些进程提供的功能
5.工作中Framework开发在做什么?
- Android系统下层是Linux内核,一般公司会有bsp组来做内核的开发,涉及硬件功能适配就要配合bsp组调试确保硬件能正常工作,然后才能调试上层
- Android系统最上层就是app,一般公司会有app组来开发系统独有的app,比如设置等,向app一般需要提供特殊接口,可以是jar、so库、JNI接口
- Native/Hal层:实现维护板载硬件的各种功能,比如各种总线设备(gpio uart iic spi usb iis等),将这些功能封装成接口,进一步就会深入Android各种模块框架,比如input子系统、audio子系统、camera子系统、tv子系统、wifi子系统、bluetooth子系统、显示子系统,学习这些框架,定位相关问题
- ART虚拟机:工作在虚拟机的主要是各种系统服务、SystemUI、Launcher。通常要实现维护SystemUI,这个主要是设备的特色部分,包含了通知、底部栏、状态栏等。Launcher就是Android设备的桌面,这个也是主要部分。通常也会在系统服务AMS ATMS WMS等作克制化修改
- 总结:打包提供系统镜像,在Native层 ART层实现维护服务,维护API,做客制化需求定位解决框架内的问题