Android源码解析之——2、系统架构和源码目录

185 阅读2分钟

一、Android系统架构

image.png

详情请参考 source.android.google.cn/devices/arc…

虚拟机与运行环境

  • 虚拟机的作用:提供 Java 代码的运行环境。

  • DVM/ART 虚拟机

    • DVM(Dalvik Virtual Machine) :早期 Android 使用的虚拟机,采用 JIT(Just-In-Time)编译技术。
    • ART(Android Runtime) :从 Android 5.0 开始引入,采用 AOT(Ahead-Of-Time)编译技术。ART 在应用安装时将 Java 字节码翻译为机器码,提升运行效率。

常用命令

  1. 查看文件夹占用空间

    du -sh .
    
    • 显示当前文件夹占用的内存大小。
  2. 查看 CPU 信息

    cat /proc/cpuinfo
    
    • 显示 CPU 的详细信息。
  3. 全局搜索

    • 快捷键:Ctrl + Shift + N
  4. 查看磁盘使用情况

    df -h
    
    • 显示磁盘分区的使用情况。
  5. 查看目录结构

    tree -L 1 root
    
    • 显示 root 目录的一级子目录结构。

厂商与分区

  1. 厂商类型

    • ODM(Original Design Manufacturer) :贴牌厂商,负责设计和生产设备。
    • OEM(Original Equipment Manufacturer) :代工厂商,负责制造设备。
  2. Treble 项目

    • 从 Android 8.0 开始引入,旨在将 Android 系统框架与硬件驱动分离,便于系统升级。
  3. Android 分区

    • root:提供顶层框架,规定 Android 根目录结构,生成 ramdisk.img
    • system:挂载到 root/system 节点,生成 system.img
    • vendor:挂载到 root/vendor 节点,生成 vendor.img
    • data:挂载到 root/data 节点,生成 userdata.img
  4. 镜像文件

    • 将文件夹打包成特定格式的文件,如 system.imgvendor.img 等。
  5. misc 分区

    • 用于 BootLoader 与 Android 通信。
    • 例如,恢复出厂设置时,Android 向 misc 分区写入数据,重启后 BootLoader 读取 misc 分区并进入恢复模式。

启动流程

  1. uboot 阶段

    • uboot 将 kernel 和 ramdisk 进行重定向。
    • kernel 挂载 ramdisk 为根文件系统。
  2. init 进程

    • init 是 Android 的祖先进程。
    • 读取 init.rc 文件,挂载 systemvendor 和 userdata 分区。
    • 启动 zygote 进程(位于 /system/bin)。
  3. 动态链接器

    • Android 使用 /system/bin/bootstrap/linker64 加载可执行程序。
    • 传统 Linux 使用 ld 加载。

image.png

image.png