虽然实际开发工作经常偏业务和应用层,但作为一个有追求的程序猿,对于技术还是要保留好奇和深入了解的习惯的。年轻就要多学习!不仅要知其然,还要知其所以然。故趁闲暇,博览大家,研究一下frameworks相关知识,提升自己。

Android四层架构


从高到低分别是应用层、框架层、运行库层、Linux内核层。

Android的本质是在标准的Linux系统上增加了Java虚拟机Dalvik/ART,并在Dalvik/ART虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。

各个层级的主要包含内容如下

这里说明一下运行时库的虚拟机:

相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

Android4.4版本以前是Dalvik虚拟机,4.4版本开始引入ART虚拟机(Android Runtime)。在4.4版本上,两种运行时环境共存,可以相互切换,但是在5.0版本以后,Dalvik虚拟机(简称DVM)则被彻底的丢弃,全部采用ART。

ART和Dalvik的区别:

  • Dalvik是运行时编译,ART是运行前编译,应用首次安装时就会将字节码编译成机器码
  • ART占用空间比Dalvik大(原生代码占用的存储空间更大),就是用“空间换时间”
  • ART减少编译,减少了CPU使用频率,使用明显改善电池续航
  • ART应用启动更快、运行更快、体验更流畅、触感反馈更及时

Android系统源码

Android系统源码:http://androidxref.com/

整体架构

Android7.0的根目录结构说明如下:

|– Makefile (全局Makefile文件,用来定义编译规则)
|– abi (应用程序二进制接口)
|– art (ART运行环境)
|– bionic (bionic C库)
|– bootable (启动引导相关代码)
|– build (存放系统编译规则及generic等基础开发包配置)
|– cts (Android兼容性测试套件标准)
|– dalvik (dalvik JAVA虚拟机)
|– developers (开发者目录)
|– development (应用程序开发相关)
|– device (设备相关配置)
|– docs (参考文档目录)
|– external (android使用的一些开源的模组)
|– frameworks (核心框架——java及C++语言)
|– hardware (部分厂家开源的硬解适配层HAL代码)
|– kernel
|– libcore (核心库相关文件)
|– libnativehelper (动态库,实现JNI库的基础)
|– ndk (NDK相关代码,帮助开发人员在应用程序中嵌入C/C++代码)
|– out (编译完成后的代码输出与此目录)
|– packages (应用程序包)
|– pdk (Plug Development Kit 的缩写,本地开发套件)
|– prebuilts (x86和arm架构下预编译的一些资源)
|– sdk (sdk及模拟器)
|– system (底层文件系统库、应用及组件——C语言)
|– tools (工具文件)
|– toolchain(工具链文件)
|– vendor (厂商定制代码)

应用层部分

应用层位于整个Android系统的最上层,开发者开发的应用程序以及系统内置的应用程序都位于应用层。源码根目录中的packages目录对应着系统应用层。

|– apps (核心应用程序)
|– experimental (第三方应用程序)
|– inputmethods (输入法目录)
|– providers (内容提供者目录)
|– screensavers (屏幕保护)
|– services (通信服务)
|– wallpapers (墙纸)

从目录结构可以发现,packages目录存放着系统核心应用程序、第三方的应用程序和输入法等等,这些应用都是运行在系统应用层的,因此packages目录对应着系统的应用层。

应用框架层部分

应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库以及硬件抽象层等进行衔接。 应用框架层的主要实现代码在/frameworks/base和/frameworks/av目录下,其中/frameworks/base目录结构如下:

|– api (定义API)
|– core (核心库)
|– docs (文档)
|– include (头文件)
|– libs (库)
|– media (多媒体相关库)
|– nfc-extras (NFC相关)
|– opengl 2D/3D (图形API)
|– sax (XML解析器)
|– telephony (电话通讯管理)
|– tests (测试相关)
|– test-runner (测试工具相关)
|– tools (工具)
|– wifi (wifi无线网络)
|– cmds (重要命令:am、app_proce等)
|– data (字体和声音等数据文件)
|– graphics (图形图像相关)
|– keystore (和数据签名证书相关)
|– location (地理位置相关库)
|– native (本地库)
|– obex (蓝牙传输)
|– packages (设置、TTS、VPN程序)
|– services (系统服务)

更多相关文章

  1. 分析android预装apk以及相关的实现手段
  2. Android(安卓)应用程序窗体显示状态操作(requestWindowFeature()
  3. Android中文翻译 - NFC基础
  4. android四层框架
  5. Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式
  6. 关于Android的自动化测试,你需要了解的5个测试框架
  7. Flutter 解决webview_flutter 插件Android端无法上传文件问题
  8. Android(安卓)Service相关知识
  9. Android的系统架构

随机推荐

  1. Android横竖屏切换生命周期你真的了解么?
  2. 史上最强劲之android模拟器命令详解
  3. Android技术积累汇总(4月28日更新)
  4. Android(安卓)通知栏自定义样式
  5. rk3288 Android(安卓)5.1root方法
  6. Android中的文件存储
  7. android studio3.1.4更新3.2.1版本问题汇
  8. Android控件 -- 设置组件所占比例
  9. ym——Android如何支持多种屏幕
  10. android之银行卡手机号码自动补齐空格