了解Android | 青训营笔记

211 阅读3分钟

Android的五层架构

应用层

无论是手机预装的系统应用还是第三方应用,均位于该层级,与用户直接交互。

Java API 层

应用程序接口就是在此层级中提供的,应用层的应用调用这些API实现功能。

原生C/C++库和Android Runtime(系统运行库层)

原生C/C++库

开发者可以通过调用Java API Framework来使用原生库的功能,也可以用Android NDK直接调用原生库。

Android Runtime(ART)

ART的主要功能:
1、引入预先编译机制,增强应用的性能。
2、优化垃圾回收,增强应用的性能和稳定性。

硬件抽象层(HAL)

对内核驱动程序进行封装,向上提供接口,向下屏蔽具体实现细节。系统抽象层包含多个库模块,每个模块都为特定类型的硬件组件实现接口,例如相机、蓝牙模块。

Linux Kernel

Android基于Linux提供核心系统服务,例如安全、内存管理、进程管理、网络堆栈、驱动模型。除了标准的 Linux 内核外,Android 还增加了内核的驱动程序,如Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、WiFi驱动、蓝牙驱动、电源管理。

以下是误打误撞学到的,和当堂课联系不大,但学懂了还是觉得挺有收获的。

补充:1、ZIP格式分析

一般情况下:

[local file header + file data + data descriptor]{1,n} + central directory + end of central directory record

压缩源文件数据区:

[local file header + file data + data descriptor],这里保存了所有被压缩文件的内容,每一被压缩的文件、目录都由[]内的三部分构成,每一被压缩的文件、目录都是一条记录。

local file header:标识该文件的开始,记录了该压缩文件的信息。

file data:保存了对应压缩文件的内容

data descriptor:只用在不能对输出的 ZIP 文件进行检索时使用。所以磁盘上的ZIP文件一般没有这个数据描述符。

Central directory 核心目录:

记录了压缩文件的目录信息,在这个数据区中每一条纪录对应在压缩源文件数据区中的一条记录。

End of central directory record(EOCD) 目录结束标识:

目录结束标识位于整个ZIP包的结尾,用于标记压缩的目录数据的结束。每个压缩文件必须有且仅有一个EOCD记录。

图示:

image.png

补充:2、APK文件结构详解

APK文件格式概览:

image.png

向APK签名区中的ID-Value列表里面插入一个Item,可以对APK下载安装之后进行渠道归因。

APK构成

APK文件本质上是一个ZIP文件。

AndroidManifest.xml

这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面。包含activity、service、content provider、broadcast receiver(四个组件并不一定都存在)。 屏幕截图 2022-07-28 161145.png

class.dex:包含所有的Java、Kotlin代码

res目录:包含应用正常显示,播放的资源文件

lib目录:包含应用程序依赖的native库文件

META-INF目录:保存应用的签名信息,签名信息可以验证APK文件的完整性

resources.arsc:用来记录资源文件和资源ID之间的映射关系,用来根据资源ID寻找资源

这些目录并不一定存在每个APK中,一些APK还有更多的目录,例如:以下是抖音V21.8.0的APK的部分文件和目录。图示:

屏幕截图 2022-07-29 080538.png