当前位置:操作系统 > 安卓/Android >>

Android源代码结构分析

Android源代码结构分析

Google提供的Android包含了:Android源代码,工具链,基础C库,仿真环境,开发环境等,完整的一套。
第一级别的目录和文件如下所示:
[cpp] 
---------------- 
├── 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目录
[cpp]

|-- 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架构下工具链/预编译的一些资源
[cpp] 

|-- 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 补充:移动开发 , Android ,

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,