Android源代码目录结构

转载自http://www.cloudchou.com/android/post-136.html

Android源代码顶层目录结构如下所示:

../CyanogenMod/

  • ├──abi#应用二进制接口,不同的操作系统,应用二进制接口不同,因此linux上的二进制可执行文件在windows上无法执行
  • ├──android#存放了一些xml文件,用于描述工程路径及其对应的远程仓库地址,repo工具将使用这些信息同步代码
  • ├──bionic#bionic C库,Android没有使用标准的glibc库,而是自己重新实现了一套c/C++库,包括libc libdl libm libstdc++ libthread_db
  • ├──bootable# 包含两个工程,recovery和diskinstaller,刷机或者系统升级都是由recovery完成的,
  • ├──build#Android编译系统核心代码都存放在该目录,我们也将对该目录下的文件做详细分析
  • ├──cts#Android兼容性测试套件标准
  • ├──dalvik#dalvik JAVA虚拟机,Android用的java虚拟机和pc上用的jvm不一样
  • ├──development#应用程序开发工具 有eclipse开发用的formatter配置
  • ├──device#设备相关配置文件,存放规则 device/$vendor/$product
  • ├──docs#网站文档
  • ├──external#用到的第三方库 象busybox bash openssl等工具都存放在该目录
  • ├──filelist#使用godir命令生成的索引文件
  • ──frameworks#核心框架——java及C++语言,可生成framework.jar
  • ├──gdk#glass开发Sdk
  • ├──hardware#部分厂家开源的硬件适配层HAL代码
  • ├──kernel#内核源码目录 存放规则kernel/$vendor/$product
  • ├──libcore#一些有用的库 像xml Jason luni
  • ├──libnativehelper#Support functions for Android's class libraries
  • ├──Makefile#在顶层目录编译,利用的默认Makefile,它只是简单包含了build/core/main.mk
  • ├──ndk#ndk开发工具
  • ├──packages#Android apk程序所在目录,象settings,gallery等程序
  • ├──pdk#Platform Development Kit The goal of the PDK release is to help chipset vendors and OEMs to migrate to a new relelase
  • ├──prebuilt#x86和arm架构下预编译的一些资源
  • ├──prebuilts#有clang eclipse gcc misc ndk qemu-kernel sdk tools等子目录,交叉编译工具链所在目录
  • ├──sdk#sdk及模拟器
  • ├──system#核心代码,包含了最小化可启动的环境,还有底层调试及检查工具,adbd也在system/core目录
  • ├──tools#有子目录build和motodev,可能跟摩托罗拉有关
  • ├──vendor#设备制造商专用的配置存放目录,存放规则vendor/$vendor/$product,cm编写的apk也放在该目录






build子目录存放编译系统的核心代码,包含着138个makefile,15个shell脚本,19个python脚本,7个C文件,7个C++文件,16个头文件,因此如果想分析编译系统核心代码,使用的IDE需支持这些编程语言,推荐使用eclipse,安装一些插件就可以很方便地查看这些代码

build子文件夹的目录结构如下所示:

build/

  • ├── buildspec.mk.default#buildspec的模版文件,可定义一些变量比如TARGET_BUILD_VARIANT:=user,TARGET_BUILD_TYPE:=release
  • ├── CleanSpec.mk#增量编译时,会执行该文件里的命令,这些命令一般用于清除中间文件
  • ├── core#编译系统的核心文件放在该目录,主要是一些makefile
  • ├── envsetup.sh#编译时需先用source envsetup.sh设置好环境变量,该脚本提供了许多有用的命令,比如cout,croot,cgrep,在详细介绍Android编译步骤时会列出来
  • ├── libs#是一个C++模块,编译后可生成libhost.a静态库,里面的函数主要用于与编译主机交互
  • ├── target#包含编译目标相关的makefile,它有两个子文件夹 board和product,产品都在该目录下定义,比如generic,full产品,定义设备产品时,会从这里继承产品
  • └── tools#各种工具,多数使用python编写,工具有用于签名的signpak, 用于下载device配置的roomservice.py等,后续将详细介绍






我们在阅读build核心代码时,可能最头疼的就是变量,编译系统里有成百上千的变量,我们常常不知道其含义,容易一头雾水,为此我做了一个编译系统的参考手册供大家查阅, 可以很方便地检索变量,查看变量的意义,并有示例值。链接:android.cloudchou.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值