android体系架构
安卓底层是基于Linux内核的,上层还包括硬件抽象层。然后就是应用层模块包括Native层,Android运行时环境,JAVA API框架和系统和用户app。
JAVA层通过JNI技术与native层通讯,而native通过syscall系统调用与内核层通讯
Linux内核
linux内核主要的任务就是进行基本的内存管理,进程管理,系统初始化等等工作。
硬件抽象层(HAL)
硬件抽象层包含多个模块,框架API请求访问硬件时就会加载相应的模块,例如蓝牙/wifi等。
native层(系统库)
native主要是一些java层的依赖库,有点类似于windows平台的ntdll.dll,java层通过native与linux内核层通讯。
Android Runtime
Android runtime运行时主要包含android虚拟机(Dalvik/ART)和系统核心库。 在app进程空间中实际android虚拟机 与native的so库都在用户空间中不重叠。(android虚拟机可以理解在windows的exe映射空间,而native的so库相当于在windows的DLL映射空间中,而dex文件被android 虚拟机相当于数据一样加载到内存空间中,并解析对应的字节码并执行)。系统核心库是为java api frameword服务的,包含了对应的javaAPI 的JNI接口函数的实现。
Java API Framework层
framework框架层主要包含了通过java语言编写的API接口,这些API可以完成构建和使用android应用程序必须的一些组件,例如activity活动。例如:android/util/Log中实现的是一些日志打印JAVA接口,app应用程序在使用java编写的时候可以通过导入这个类并调用对应的Log接口函数,实际这个接口函数是一个native方法,其会通过JNI调用对应的JNI接口函数(在jni/android_util_Log.cpp中),然后此接口函数会通过syscall调用内核中对应的系统服务实现日志的相关操作。简言之,framework层相当于是一个第三方库,然后其对应接口JAVA API函数的实现都在native层(系统so库),当android 虚拟机在执行到对应接口 API方法时就会去对应的系统so库中寻找。
应用层
应用层包含系统应用和系统应用,这些应用都以apk的形式保存。