Android 系统栈
下图是google 给出的android 系统栈,从图上看Apps 以下 Hal层以上都是framework 的scope。但是平常解决问题的时候多多少少也会涉及到hal层的问题。
-
简单来讲android系统完全基于linux系统,就像mac系统基于unix系统,个人感觉可以把android看成一个特殊的linux应用。
-
kernel以上android 有个hal层为了适配各个芯片厂商的定制化。
-
hal层往上有各种c 和 c++实现的lib支撑framework的业务。包括虚拟机ART 4.4之前版本是dalvik。ART
是个重要角色,它实现了android 中java程序的执行。这块可以参看老罗的vm和art对比 -
javaAPI framework提供了android各种功能的api,为实现各种应用提供了接口。
FrameWork相关业务介绍
有个图整理一下自己的思路,干了这么多年framework,所涉及的领域基本都在这个图里。这个是一时兴起想到的,或许后续还可以再补上点什么。可以持续更新。
- Android Boot flow
- SystemServer
- common base
- storage
- security
- recovery
- other process
以上涉及的方面,后续的blog重介绍完成。
从几方面开启踏进Android之门
最近项目兄弟们的技术背景都是c c++初级入门,强烈感觉需要一次android基础介绍的培训,这样就继续写写这篇文章。
如何给一位初学者介绍android系统,想了如下几个方面,希望诸位能够快速上道。
Android 栈架构
- Android是跑在linux上的一个特殊“应用”
- Android应用一般用java编写,所以必须有给虚拟机现在最新版本上是art,4.4之前还是 Dalvik不管怎样都是解析java语言为可执行语言,两者区别是:dvm 是jit(just in time),art是aot(ahead of time)
Android 系统启动过程
- 通过启动流程,基本的android守护进程和主要android进程都会牵涉出来。
Android 应用启动过程
- Android应用启动会带出android 4大组建以及我认为android最需要了解的架构App-binder-systemServer 架构 AndroidThread主线程和systemServer进程还有zygote进程进行的一系列通信。
JVM DVM ART
java很牛的一个特性就是跨平台,只要是用纯java写的代码,无论你是在windows linux macos上只要要安装 jvm java虚拟机就可以运行
DVM
Android 为了支持java语言,自己搞了一套虚拟机机制 Kitkat 4.4之前的叫Dalvik虚拟机( Dalvik Virtual Machine )KitKat的时候开始引入ART。
https://blog.csdn.net/weixin_42336002/article/details/80610555
.jar文件里面包含多个.class文件,每个.class文件里面包含了该类的常量池、类信息、属性等等。当JVM加载该.jar文件的时候,会加载里面的所有的.class文件,JVM的这种加载方式很慢,对于内存有限的移动设备并不合适。
而在.apk文件中只包含了一个.dex文件,这个.dex文件里面将所有的.class里面所包含的信息全部整合在一起了,这样再加载就提高了速度。.class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中,减少了I/O操作,提高了类的查找速度。
DVM中的应用每次运行时,字节码都需要通过即时编译器(JIT,just in time)转换为机器码,这会使得应用的运行效率降低。而在ART中,系统在安装应用时会进行一次预编译(AOT,ahead of time),将字节码预先编译成机器码并存储在本地,这样应用每次运行时就不需要执行编译了,运行效率也大大提升。
Android log分析方法
待续
Android 稳定性问题分析方法
待续
Android 性能问题分析方法
待续