Android源代码结构分析

本文详细分析了Android源代码的结构,包括build、prebuilt、bionic、frameworks、system等关键目录,同时阐述了Android在目标平台上的移植步骤,如驱动移植、文件系统挂载和调试控制台设置。还探讨了解除Android系统耦合的方法,如将Dalvik与bionic和硬件驱动分离,使其支持标准库和优化。
摘要由CSDN通过智能技术生成

Android源代码结构分析


Google提供的Android包含了:Android源代码,工具链,基础C库,仿真环境,开发环境等,完整的一套。

第一级别的目录和文件如下所示:

----------------
├── Makefile            全局的Makefile
├── build               系统编译规则和配置所需要的脚本和工具
----------------
├── prebuilt		各种平台编译工具链
├── bionic              基础C库源代码
----------------
├── frameworks *        Android应用程序的核心框架层(java及C++语言)
├── system     *        底层文件系统/库/应用及组件(C语言)
├── dalvik              JAVA虚拟机
├── external            android使用的一些额外开源库
├── libcore             与媒体播放框架代码相关
----------------
├── packages            各种应用程序实例
├── development         程序开发所需要的实例/模板/工具
----------------
├── ndk
├── sdk
├── cts                 Android CTS兼容性规范测试用例
----------------
├── vendor     *        厂商定制代码
├── device     *        厂商定制代码
├── hardware   *        一些与硬件相关的库,部分厂家开源的硬解适配层HAL代码
├── kernel     *        Linux源代码
├── bootable            引导加载器
├── recovery            与目标的恢复功能相关
----------------


android的移植按如下流程:

(1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来。
(2)正确挂载文件系统,确保内核启动参数和 android 源代码 system/core/rootdir 目录下的 init.rc 中的文件系统挂载正确。
(3)调试控制台,让内核启动参数中的 console 参数以及 android 源代码 system/core/init/init.c 中的console_name 设置和硬件保持一致
(4)打开 android 相关的驱动(logger,binder 等),串口输入 logcat 看 logger 驱动起来,没有的话调试logger 驱动。


解决底层问题方法:解除Android系统的耦合l
1 将Dalvik于bionic以及硬件驱动剥离开
2 修改Dalvik以支持标准glibc和GNU/Linux
3 把Dalvik当作普通应用程序
4 Dalvik可被单独优化和改进


build目录

.
|-- envsetup.sh    是一个在使用仿真器运行的时候,用于设置环境的脚本
|-- core          (核心编译规则,以mk为结尾的文Makefile件,被顶层目录的Makefile引用)
|-- history       (历史记录)
|-- libs                                
|   `-- host       (主机端库,有android “cp”功能替换)
|-- target            (目标机编译对象,包含board和product两个目录,为目标所需要文件)
|   |-- board          (开发平台)
|   |   |-- emulator        (模拟器)
|   |   |-- generic         (通用)
|   |   |-- idea6410        (自己添加的)
|   |   `-- sim              (最简单)
|   `-- product        (开发平台对应的编译规则)
|       `-- security        (密钥相关)
`-- tools             (编译中主机使用的工具及脚本)
    |-- acp             (Android "acp" Command)
    |-- apicheck         (api检查工具)
    |-- applypatch       (补丁工具)
    |-- apriori           (预链接工具)
    |-- atree            (tree工具)
    |-- bin2asm            (bin转换为asm工具)
    |-- check_prereq     (检查编译时间戳工具)
    |-- dexpreopt         (模拟器相关工具,具体功能不明)
    |-- droiddoc          (?作用不明,java语言,网上有人说和JDK5有关)
    |-- fs_config         (This program takes a list of files and directories)
    |-- fs_get_stats    (获取文件系统状态)
    |-- iself            (判断是否ELF格式)
    |-- isprelinked     (判断是否prelinked)
    |-- kcm             (按键相关)
    |-- lsd            (List symbol dependencies)
    |-- releasetools   (生成镜像的工具及脚本)
    |-- rgb2565        (rgb转换为565)
    |-- signapk        (apk签名工具)
    |-- soslim         (strip工具)
    `-- zipalign           (zip archive alignment tool)


prebuilt 目录


x86和ARM架构下工具链/预编译的一些资源
.
|-- android-arm   (arm-android相关)
|   |-- gdbserver   (gdb调试器)
|   `-- kernel    (模拟的arm内核)
|-- android-x86   (x86-android相关)
|   `-- kernel    (空的)
|-- common    (通用编译好的代码,应该是java的)
|-- darwin-x86    (drawin x86平台)
|   `-- toolchain   (工具链)
|       |-- arm-eabi-4.2.1
|       |-- arm-eabi-4.3.1
|       `-- arm-eabi-4.4.0
|-- darwin-x86_64   (drawin x86 64bit平台)
|-- linux-x86    (linux x86平台)
|   `-- toolchain   (工具链,我们应该主要用这个)
|       |-- arm-eabi-4.2.1
|       |-- arm-eabi-4.3.1
|       |-- arm-eabi-4.4.0
|       `-- i686-unknown-linux-gnu-4.2.1 (x86版编译器)
|-- linux-x86_64   (linux x86 64bit平台)
|-- windows    (windows平台)
`-- windows-x86_64 (64bit windows平台)


bionic 目录

基础C库源代码
.
|-- Android.mk
|-- libc      (C库)
|-- libdl     (libdl实现,dl是动态链接,提供访问动态链接库的功能)
|-- libm      (libm数学库的实现)
|-- libstdc++ (C++实现库libstdc++)
|-- libthread_db  (多线程程序的调试器库)
`-- linker     (动态链接器)


frameworks 目录

核心框架--java及C++语言
.
|-- base    (基本内容
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值