Android aosp 编译系统基础相关命令
源码管理
找到原有的.git 删除后 添加自己的git
find ./ -name '.git' | xargs rm -rf
常用命令
gettop 函数 获取当前编译环境的work_directory目录 如下所示,适用于在深层目录中 跳转其他目录
(aosppy2) aosp@ubuntu:~/android/android5.1$ cd packages/apps/gifaLibs/common/
(aosppy2) aosp@ubuntu:~/android/android5.1/packages/apps/gifaLibs/common$ cd $(gettop)
(aosppy2) aosp@ubuntu:~/android/android5.1$ cd packages/apps/gifaLibs/common/
(aosppy2) aosp@ubuntu:~/android/android5.1/packages/apps/gifaLibs/common$ cd $(gettop)/packages
(aosppy2) aosp@ubuntu:~/android/android5.1/packages$ pwd
/home/aosp/android/android5.1/packages
(aosppy2) aosp@ubuntu:~/android/android5.1/packages$
croot 指令 输入后 直接回到当前编译环境的work_directory
m :make的缩写 -jx 参数-j 表示job 后面的x:表示工作的线程数
mm : 表示编译当前目录的mk文件
MMM : 标识编译指定目录下的mk文件,例如当修改common文件后,编译其他目录的App应用
(aosppy2) aosp@ubuntu:~/android/android5.1/packages/apps/gifaLibs/common$ mmm ../../gifaApps/test1/
jgrep :只在java文件中查找 指定的字符串 示例: jgrep "Activity"
cgrep :只在C/C++文件中查找指定的字符串 示例: cgrep "Activity"
resgrep 只在res资源文件中查找指定的字符串
godir 查找加跳转指令 示例 godir ctgmath 找到这个文件所在的目录 并且跳转进去
godir 会在第一次执行的时候,在编译根目录建立filelist索引文件,若在其他文件夹下执行,只会将所在目录下的文件建立索引,因此当找不到文件时,可以将根目录的“filelist”文件删除,再到编译根目录执行一次
make snod :当编译部分模块完成后,输入此命令标识重新生成img镜像文件
emulator & :运行当面环境下的配置的模拟器 参数“&” 标识后台运行
./build.sh -u 将编译好的内容打包成update.img固件升级包
make -j32 && ./mkimage.sh && ./build.sh -u 编译,生成镜像并且打包
工作目录说明
- build/目录
- core/ aosp整个编译过程中核心编译规则文件目录
- envsetup.sh 编译环境初始化脚本
- target / Android自带模拟器的一些makefile文件目录
- tools 编译过程中使用的shell及python编写的一些脚本
- packages/ 一些常用系统APP存放目录,电话、日历等
- framworks 公共库
-
- av/ 多媒体相关的native目录
- webview/ 浏览器内核源码目录
- native/ power、input、binder等服务native实现目录
- base
- core | framework.jar framework-res.apk libandroid_runtime.so等源文件
- native | libandroid.so的源代码目录 java api的native实现 比如looper、assetmanager
- media | 多媒体相关的javaapi及jni文件目录
- package | settingProvider、SystemUI等不在桌面直接启动的App源码目录
- service | services.jar、libandroid_services.so的源文件目录
- WIFI | wifi服务相关的javaAPI、wifiManager、wifiService等
-
- devices/<vendor_name>/<product_name> | 跟硬件厂商相关的内核,硬件配置等
- vendor/<vendor_name>/<product_name> | 厂商对AOSP修改或者定制、放在vendor目录下。包括不限于framework层新增API、APP等业务需求,目前谷歌更推荐放在devices目录下
AndroidBuildSystem说明 aosp 构建 编译系统
Androld Build 系统用来编译 Androld 系统Androld SDK以及相关文档。
该系统主要由如 make 文件, shell 脚本以及 Python 脚本组成,在编译时能够支持面向不同的硬件设备,不同的编译类型,且提供面向各个厂商的定制扩展。
什么是makefile
makefile 是一些有特定语法,可供make命令读取并执行的脚本性质的配置文件,作用就是定义编译相关属性,对哪些源文件进行编译,怎么编译,怎么处理他们之间的依赖关系
makefile可以定义变量,函数,调用系统命令, shen / python脚本,管理module 之间的依赖,整个Android Build系统中的make文件分成三类
1 . Build 系统核心 Makefile
这类Makefile定义了整个 Build 系统的框架,而其他所有make文件都是在这个框架的基础上编写出来的。位于 build/Core 目录下.
2 .针对某个产品的 Makefile
这类 makefile是针对某个产品 Make文件这些文件通常位于 device/< vendor_name>/< product_name 》 目录下。
3 .针对某个模块的 Makeflle - Android.mk
第三类是针对某个徽块的 Moke 文件。 AOSP中,不会针对某一个文件进行编译,每一个编译单位都是一个模块,
每个模块由一个名为“ Android.mk ”的 makefile 来声明。该文件中定义了如何编译当前模块。