Android源代码目录结构

2014/01/01

本文原创作者:Cloud Chou. 欢迎转载,请注明出处和本文链接

在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置。

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

¥打赏5毛

取消

感谢您的支持,我会继续努力的!

扫码支持
赏个5毛,支持我把

打开支付宝扫一扫,即可进行扫码打赏哦

本篇目录