一个Android开发的学习Flag记录贴

1,459 阅读5分钟

前言

本篇文章只是作为本人学习Android操作系统知识和架构的总览记录贴,主要作用是立下目标,给自己一个方向和激励,当每完成一个部分,我都会来这里更新和总结,也希望自己能一直坚持下去。

正文

作为一个工作了好几年的Android应用层开发者,我准备在工作之余干一件事情,那就是学习Android系统知识,为什么要做这个决定呢,理由如下:

  1. 在Android应用层开发进阶

这个说起来并非易事,可能在很多人的认知里,Android开发就是主要用来实现UI和交互,但是现在小程序和混合开发大行其道,真正留给Android开发的工作量可能会越来越少。

而对于复杂的Android应用来说,最大的问题就是性能,所以对于Android应用层进阶来说,就是不仅在实现业务需求的时候,还需要掌握各种性能优化、插件化等技能。

对于大厂常用的插件化或者热修复来说,理解其原理至少要明白Android组件的启动流程、Hook技术、IPC通信等;

而对于性能优化来说就更多了,拿我们最常用的卡顿优化来说,首先就是卡顿监控的方法,这里有消息队列、插桩、集成Linux的atrace等方法;然后就是监控帧率和组件生命周期耗时等,这些就需要了解Android系统的绘制和组件的运行原理;再然后还需要监控线程、进程的使用,这里要学会看懂各种Linux的性能数据;最后还要使用各种工具分析监控结果,比如保存卡顿线程、获取Java层和native层的堆栈信息等。

就这一个卡顿优化,就可以贯穿各种线程、Linux、native、Framework等知识,所以想在Android应用层开发更进一步,了解Android系统知识必不可少。

  1. 利于转型Android系统开发

不知何时起,单纯的Android应用层开发越来越少了,主流技术演变也越来越快,从之前的rxjava到如今的协程,从之前MVC到如今的MVVM,还有Flutter、Compose等技术,可以说是日新月异。当我们在使用这些技术时,通常会犯一个毛病,那就是使用简单,深入困难。随便新技术,可能几天就上手了,但是没有深入理解,时间久了,就容易欠下许多技术债。

这里我提到了转到Android系统开发,也并非是一定的好方向,只是觉得可以多一条路而已,毕竟有很多相通之处。在Android系统中,涉及的知识更多,从充当基石的Linux,到各种C++库的native层,再到我们熟悉的Java Framework层,还包括虚拟机、驱动等,这里关联的知识非常多,更适合个人能力提升和沉淀。

所以在以后的技术路上,还需要多积累、多思考,给自己多一个方向选择。

基本方向

说完了理由之后,这里开始立Flag了,首先就是Android系统的架构,官方经典图给上:

image.png

从下到上分别是:

  1. Linux内核:Android平台的基础是Linux内核,Android虚拟机依靠Linux内核来执行底层功能,比如线程和底层内存管理。同时基于Linux内核可以让Android系统更加稳定,并且允许设备制造商为著名的内核开发硬件驱动程序。

  2. 硬件抽象层(HAL):为特定类型的硬件提供标准的接口,比如相机和蓝牙模块,这样各个硬件厂商就可以按需开发驱动程序。

  3. Android Runtime:这个便是Java代码运行需要的虚拟机,现在一般都是ART虚拟机,ART虚拟机可以执行DEX文件来运行Java代码。

  4. 原生C/C++库(native层):许多核心Android系统组件和服务都是用C/C++代码编写,比如OpenGL ES等,而Java和Native由JNI技术打通。

  5. Java Framework层:这里就是我们经常使用的一些Java API,包括各种服务,比如AMS、WMS等,也是Android framework开发最常修改的部分。

  6. APP层:这里就是我们平时开发的APP所在的层级,这里就更侧重前面说的性能优化和各种黑科技了。

上面大致列了Android系统的层级,这里就要对每个层级所需要的相关知识做如下列举,后续会继续补充和完善。

语言方向

  1. 学习C/C++

系统方向

  1. 学习Linux操作系统

# Linux | 欢迎来到Linux世界

# Linux基础学习 | 文件目录

# Linux基础学习 | 软链接和硬链接

# Linux基础学习 | 文件基本属性

系统启动系列

  1. init进程
  2. zygote进程
  3. system_server进程
  4. servicemanager进程
  5. app进程

# framework | Android系统架构

# framework | init进程流程分析

# framework | Zygote进程流程分析

# framework | SystemServer进程流程分析

Android进程系列

  1. Android进程创建
  2. 四大组件启动和运行过程
  3. Contenxt理解

# framework | Activity启动流程(android-31)

图形系统系列

  1. WMS相关
  2. SurfaceFlinger相关
  3. Choreographer相关

系统稳定系列

  1. Android ANR机制
  2. Native进程的Trace原理
  3. 崩溃原理
  4. 分析工具

通信系列

  1. AIDL原理
  2. Binder原理
  3. Handler在Java和native层原理
  4. JNI技术原理分析

# framework | 一文搞定JNI原理

虚拟机系列

  1. 常见虚拟机分析
  2. 内存布局和GC算法

插件化系列

  1. 热修复原理
  2. Hook技术
  3. 插件化原理

等等。

总结

上面只是罗列了很少一部分,后续会继续补充,而且每一个点讲明白都需要非常多的精力,后续关于这部分的文章,每更新一篇,都会来这个下面做记录和更新,加油!