说明: 源码中包含很多有趣的实现和黑科技 比如 NDK, 能够利用 C/C++ 实现 java 实现不了或者 java 做起来效率很低的事情 比如 音频混合, 视频处理, 直播 等等—

  • Android Framework:包含了HAL层以上的所有层,指的是整个系统的框架。对应AOSP中的framework文件夹。
  • Application Framework:更多的指是API相关的,属于应用程序这边的框架。比如Activity、ActivityThread等,而不包含AMS

建议查看代码工具:
ubuntu: AndroidStudio
windows: Source Insight

1> 相关目录结构

  1. data@miPC:~/ROSP-Android$ ls
  2. Android.bp build developers hardware packages system
  3. art BUILD development kernel pdk test
  4. bionic compatibility device libcore platform_testing toolchain
  5. bootable cts external libnativehelper prebuilts tools
  6. bootstrap.bash dalvik frameworks Makefile sdk out

其中 external/ 存放着大量的 外部开源代码
在 packages/app 下 存放大量 系统级 应用程序
可以拿到这些应用程序代码分析、理解,编写出效率更高,性能更好的应用

  1. Launcher : Android 的桌面
  2. Browser: 浏览器

图片.png
package/providers/ 下存放 系统级 内容 提供器

lunch 选择的编译版本:

  1. eng: 工程版本
  2. user: 最终用户版本
  3. userdebug:调试版本
  4. tests: 测试版本

2> 映像文件解读

[1]> system.img:
android系统的文件系统
包含了android系统的应用程序(apk),系统用到的各种库(jar, so)和资源,配置文件(etc目录下),系统命令(bin,usr/bin, xbin)
该映像文件是由c``` 目录打包生成的<br />![图片.png](https://cdn.nlark.com/yuque/0/2021/png/12940199/1617269695146-369986aa-3e0a-46e1-9947-f021f1c27094.png#align=left&display=inline&height=73&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=145&originWidth=864&size=13776&status=done&style=none&width=432)<br />可以对 这个目录的 东西进行定制, for example---> 想要让 android 默认安装一个系统<br />把要安装的 apk 拷贝到out/target/product/`generic/system/app 目录下
[2]> userdata.img:
用户 数据 映像,
包含 程序安装信息, ex: windows系统的 C:/Program Files
AS 项目 导出 apk https://blog.csdn.net/qq_24349695/article/details/78540982
https://blog.csdn.net/qq_24349695/article/details/79975393

‘D:\Android\Env\workspace\Test\app\build\outputs\apk\debug\app-debug.apk’

[3]> ramdisk.img
内存磁盘映像

linux内核启动起来,要挂载一个文件系统作为自己的根文件系统,里面含有Linux内核启动过程中依赖的一些程序和配置文件
ramdisk.img就是一个最小化的根文件系统,它被加载到内存中作为Android的根文件系统
该映像是由out/target/product/generic/root目录打包生成的 || 就是 之后的 root 目录
userdata.img 和 system.img 在 linux 系统跑起来后 就被挂载到 ramdisk 下的 data/ 和 system/

3> Android-ROM 包解析

android 的 ROM 包 通常为 update.zip 文件, 主要由 上述的 system.img、boot.img、 userdata.img 组成
ROM 包内容:

  1. android-info.txt------> ROM 版本及 刷写配置信息
  2. boot.img--------------> Linux 内核 zImage ramdisk.img
  3. system.img------------> Android system 映像
  4. userdata.img----------> 用户数据 映像
  5. +
  6. 其它 映像

为了减少编译时间,

  1. make snod || 打包生成 system.img 不检查依赖关系
  2. make bootiamge || 打包生成 ramdisk.img
  3. mmm || 指定 编译 某个目录下的模块