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 ,