在Settings开发中用到的相关编译命令及编译流程

常用编译命令:
编译6.0版本需要openjdk-7,不能使用java-jdk
m 编译整个 android 工程
mm 编译当前目录下的模块
mmm path 编译指定目录下的模块
mma 编译当前路径下所有模块,且包含依赖
mmma [module_path] 编译指定路径下所有模块,且包含依赖
make [module_name] 无参数,则表示编译整个Android代码
make clean 执行清理,等同于rm –rf out
make sdk 编译出android的SDK
make clean-sdk 清理SDK的产物
make update-api 更新API
make dist执行 Build,并将 MAKECMDGOALS 变量定义的输出文件拷贝到 /out/dist 目录。
make all 编译所有内容,不管当前产品的定义中是否包含
make snod 从已经编译出的包快速重建系统镜像,等同于make systemimage-nodeps(nodeps表示忽略依赖关系)
make libandroid_runtime编译所有JNI framework内容
make framework 编译所有java framework内容
make services 编译系统服务和相关内容
make <local_target> 编译一个指定的模块
make dump_products 显示所有产品的编译配置信息
make bootimage\recoveryimage\userdataimage\cachaimage 生成boot.img等
make –dontwarn 编译时忽略一些错误
make –jx x代表数字,代表几核编译,视情况而定
经过make编译后的产物,都位于/out目录,该目录下主要关注下面几个目录:
/out/host:Android开发工具的产物,包含SDK各种工具,比如adb,dex2oat,aapt等。
/out/target/common:通用的一些编译产物,包含Java应用代码和Java库;
/out/target/product/[product_name]:针对特定设备的编译产物以及平台相关C/C++代码和二进制文件;
在/out/target/product/[product_name]目录下,有几个重量级的镜像文件:
system.img:挂载为根分区,主要包含Android OS的系统文件;
ramdisk.img:主要包含init.rc文件和配置文件等;
userdata.img:被挂载在/data,主要包含用户以及应用程序相关的数据;
boot.img: 编译内核源代码生成的内核映像
recovery.img: 恢复模式的映像文件

主要make文件:

main.mk:最主要的 Make 文件,该文件中首先将对编译环境进行检查,同时引入其他的 Make 文件。另外,该文件中还定义了几个最主要的 Make 目标,例如 droid,sdk,等(参见后文“Make 目标说明”)。
help.mk:包含了名称为 help 的 Make 目标的定义,该目标将列出主要的 Make 目标及其说明。
pathmap.mk将许多头文件的路径通过名值对的方式定义为映射表,并提供 include-path-for 函数来获取。例如,通过 $(call include-path-for, frameworks-native)便可以获取到 framework 本地代码需要的头文件路径。
envsetup.mk配置 Build 系统需要的环境变量,例如:TARGET_PRODUCT,TARGET_BUILD_VARIANT,HOST_OS,HOST_ARCH 等。当前编译的主机平台信息(例如操作系统,CPU 类型等信息)就是在这个文件中确定的。
另外,该文件中还指定了各种编译结果的输出路径。
combo/select.mk根据当前编译器的平台选择平台相关的 Make 文件。
dumpvar.mk在 Build 开始之前,显示此次 Build 的配置信息。
config.mk整个 Build 系统的配置文件,最重要的 Make 文件之一。该文件中主要包含以下内容:
定义了许多的常量来负责不同类型模块的编译。
定义编译器参数以及常见文件后缀,例如 .zip,.jar.apk。
根据 BoardConfig.mk 文件,配置产品相关的参数。
设置一些常用工具的路径,例如 flex,e2fsck,dx。
definitions.mk最重要的 Make 文件之一,在其中定义了大量的函数。这些函数都是 Build 系统的其他文件将用到的。例如:my-dir,all-subdir-makefiles,find-subdir-files,sign-package 等,关于这些函数的说明请参见每个函数的代码注释。
distdir.mk针对 dist 目标的定义。dist 目标用来拷贝文件到指定路径。
dex_preopt.mk针对启动 jar 包的预先优化。
pdk_config.mk顾名思义,针对 pdk(Platform Developement Kit)的配置文件。
${ONE_SHOT_MAKEFILE} ONE_SHOT_MAKEFILE 是一个变量,当使用“mm”编译某个目录下的模块时,此变量的值即为当前指定路径下的 Make 文件的路径。
${subdir_makefiles}各个模块的 Android.mk 文件的集合,这个集合是通过 Python 脚本扫描得到的。
post_clean.mk在前一次 Build 的基础上检查当前 Build 的配置,并执行必要清理工作。
legacy_prebuilts.mk该文件中只定义了 GRANDFATHERED_ALL_PREBUILT 变量。
Makefile被 main.mk 包含,该文件中的内容是辅助 main.mk 的一些额外内容。

修改framework:
修过添加了API的话(Api记录在目录frameworks/base/api),需要先make clean-framework,然后make update-api,make framework ,make systemimage将system.img刷到手机上就可以用了
修改了服务,要在framework/base下mm –B,将out/target/product/xxx/system/framwork下生成的services.jar,拷贝到手机
修改了framework其他内容,在framework/base下 mm –B,就会在out/target/product/xxx/system/framwork下生成framework.jar、ext.jar,导入手机的system/framework
修改了framework/base/packages/SystemUI,编译后会在out/target/product/xxx/system/priv-app/下生成对应apk



刷img文件:

Adb reboot bootloader->fastboot format cache 清除缓存->fastboot format userdata 清除用户数据->fastboot system 路径/systemimage其他同理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BlueGoDisplay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值