安卓从入门到进阶第二篇(框架流程)

安卓从入门到进阶第二篇(框架流程)_第1张图片
image

安卓从入门到进阶第一篇(环境搭建)

1.4 目录结构

1.4.1 主目录结构

abi 应用程序二进制接口

art ART虚拟机

bionic Android移植的C库

bootable 引导程序以及recovery

build 存放系统编译规则及generic等基础开发包配置

cts Android兼容性测试套件标准

dalvik dalvik虚拟机

developers 开发者目录

development 应用程序开发相关

device 项目配置相关内容

docs 参考文档

external 三方开源库

frameworks 应用程序框架层,Android应用开发核心代码,由Java和C++编写

hardware 硬件抽象层代码

libcore 核心库相关文件

libnativehelper 动态库,实现JNI库的基础

ndk NDK相关库和代码

out 编译过程和结果输出目录

packages 应用程序包,Settings/Dialer等系统应用都在这里

pdk Plug Development Kit 的缩写,本地开发套件

platform_testing 平台测试

prebuilts 预编译的一些资源,参与编译过程

sdk sdk和模拟器

system 底层文件系统库、应用和组件

toolchain 工具链文件

tools 工具文件

Makefile 全局Makefile文件,用来定义编译规则

kernel Linux内核

vendor 厂商定制部分,比如MTK/展讯三方客制化部分

1.4.2 out目录结构

out/ 编译输出目录

out/host/ 主机可执行文件,作为工具使用

out/target/product/product 目标文件

boot.img Android启动映像(Linux内核+根FS)

system.img Android核心支撑镜像

userdata.img Android开发应用程序和数据库,挂载在data分区

root/ 编译到ramdisk.img且合并到boot.img

system/ 整体打包成system.img

obj/ 中间对象文件

include/ 来自组件的已编译包含文件

lib/ 引用的库文件

STATIC_LIBRARIES/ 每个子目录显示对应的静态库生成过程文件

SHARED_LIBRARIES/ 每个子目录显示对应的动态库生成过程文件

EXECUTABLES/ 每个子目录显示对应的可执行文件生成过程文件

APPS/ 每个子目录显示对应的APK文件生成过程文件

out/target/common/obj/APPS

symbols/ 所有目标二进制代码的符号,在出现native异常时候使用addr2line工具定位代码位置

1.4.3 手机目录结构

init.rc 初始化配置文件

dev/ 驱动节点

proc/ 虚拟节点,存储进程相关的内容

sys/ 系统/内核配置,可以通过此处驱动节点,读写驱动数据

sbin/ 系统启动二进制代码(ADB后台程序;只读

system/ 来自system.img(读-写)

– bin/ Android系统二进制代码

– lib/ Android系统库

– xbin/ 非必要二进制代码

– framework/ Android框架组件(Java)

– app/ Android应用程序(Java)

– priv-app/ 系统级别的应用程序

– etc/ Android配置文件

– etc/permissions 权限信息

– etc/wifi wifi配置信息

– etc/bluetooth蓝牙配置信息

  • vendor 方案公司的相关框架内容

  • media 铃声和开关机动画资源

  • fonts 字体相关

  • tts 语音播报资源

recovery/ 放置进入recovery模式的相关配置及应用

sdcard/ SD卡挂载点

data/

– app/ 用户安装的Android应用程序

– tombstones/ Android崩溃日志

  • anr/ 出现anr时出现的目录

1.5 框架流程

安卓从入门到进阶第二篇(框架流程)_第2张图片
image

第一个阶段,bootloader。

系统在上电的时候,系统会从固定的地方加载一段代码进入内部ram进行运行。

这段代码通常是使用汇编语言编写,主要进行硬件的简单初始化,创建一个c语言所需要的堆栈区域,然后加载c的代码运行。c的代码完成更多的硬件设置,然后加载kernel,进入操作系统初始化。

2操作系统初始化

当我们将kernel加载进入内存,从它的入口点进行继续初始化系统。第一阶段将硬件的状态准备就绪,操作系统进行初始化所有配置的驱动代码,完成硬件驱动任务。然后在这个阶段,将管理内存,网络,以及进程等等,完成了这些内容后,将启动第一个进程。

3init进程

当系统整个环境OK之后,就开始进入init进程,此进程进行挂载一些目录,解析init.rc配置脚本,创建一些守护进程,在这些进程里面,主要的便是zygter,因为它是我们Android上层架构的入口。

zygter进程

这个进程完成了Android JAVA虚拟机的构建,同时通过JNI配置,将本身zygter的c系统进行关联,将系统预置的资源,以及动态库进行加载,然后创建我们Android的系统服务进程。

系统服务进程,zygter完成了虚拟机的创建后,这时候就要进入Android的系统服务进程。系统服务进程将我们应用开发的所需的服务启动起来,这里有AMS,WMS,PMS等一系列服务。

启动完所有服务之后,这个时候就需要进入我们的桌面了,从此后我们就可以在桌面点击各个应用入口,去看到各种各样的信息。

这里再放上几张图,看不清楚的话微信联系明哥,发你高清版。

安卓从入门到进阶第二篇(框架流程)_第3张图片
image
安卓从入门到进阶第二篇(框架流程)_第4张图片
image
安卓从入门到进阶第二篇(框架流程)_第5张图片
image
安卓从入门到进阶第二篇(框架流程)_第6张图片
image
安卓从入门到进阶第二篇(框架流程)_第7张图片
image
安卓从入门到进阶第二篇(框架流程)_第8张图片
image

后续会进行语音视频讲解,感兴趣的可以加星球(长按下方图片进入星球),更快速的成长。

安卓从入门到进阶第二篇(框架流程)_第9张图片
image

退出那些无效的群

年轻,就要多做一些事情

不惧风霜

你可能感兴趣的:(安卓从入门到进阶第二篇(框架流程))