了解ninjia

简介

ninja是开源项目,有android编译版本,可以下载这个版本,也可以直接用源码中的prebuilts/build-tools/linux-x86/bin/ninja。

#这个是基于整编后的ninja编译配置文件,建议直接使用该配置文件,
#因为每次编译会有可能清除掉或者使得mm编译出的ninja配置文件
#需要重新生成或者检查,该过程比较耗时。
ninja -f out/combined-${TARGET_PRODUCT}.ninja 

ninja -d list
#debugging modes:
#  stats        print operation counts/timing info
#  explain      explain what caused a command to execute
#  keepdepfile  don't delete depfiles after they're read by ninja
#  keeprsp      don't delete @response files on success
#multiple modes can be enabled via -d FOO -d BAR


###比较常用的是explain,能看到更新了哪些编译成果物,这样方便自己清楚知道要推送哪些成果物到设备中。
ninja -f out/combined-${TARGET_PRODUCT}.ninja ${MODULE_NAME} -d explain

###keepdepfile可以打印出各warning,编译优化代码。
ninja -f out/combined-${TARGET_PRODUCT}.ninja ${MODULE_NAME} -d keepdepfile
简略命令
alias ninja-${TARGET_PRODUCT}="prebuilts/build-tools/linux-x86/bin/ninja -f out/combined-${TARGET_PRODUCT}.ninja"
alias findm="grep -rnws --include='*.[mb][kp]' 'LOCAL_MODULE\|LOCAL_PACKAGE_NAME\|name:'"

#参考ninja -f out/combined-${TARGET_PRODUCT}.ninja ${MODULE_NAME} -d explain打印出来的更新的成果物
alias mmp-base-service-${TARGET_PRODUCT}='croot && \
adb push out/target/product/${TARGET_PRODUCT}/system/framework/services.jar system/framework/services.jar && \
adb push out/target/product/${TARGET_PRODUCT}/system/framework/services.jar.prof system/framework/services.jar.prof && \
adb push out/target/product/${TARGET_PRODUCT}/system/framework/oat/arm64/services.art system/framework/oat/arm64/services.art && \
adb push out/target/product/${TARGET_PRODUCT}/system/framework/oat/arm64/services.vdex system/framework/oat/arm64/services.vdex && \
adb push out/target/product/${TARGET_PRODUCT}/system/framework/oat/arm64/services.odex system/framework/oat/arm64/services.odex'


function guide-ninja() 
{ 
	echo "How to build a module by ninja after a project complete build and no mk or bp changed:"
	echo -e "1.cd module path, use  \033[45;33mfindm\033[0m to findout module name"
	echo -e "2.croot"
	echo -e "3.\033[45;33mninja-${TARGET_PRODUCT}\033[0m  \033[45;33m'module name'\033[0m "
	echo -e "4.If this module build success and change one file cause it fail we just need to build this module related class dex."


	echo -e "\nFor example:"
	echo -e "cd framework/base"
	echo -e "findm"
	echo -e "ninja-${TARGET_PRODUCT} services"
	echo -e "modify vendor/${VENDOR_NAME}/framework/**/**/*.java"
	# This according to the print fail log
	echo -e "ninja-${TARGET_PRODUCT} out/soong/.intermediates/vendor/**/frameworks/**/services.**/android_common/javac/services.**.jar"
	echo -e "You can use \033[45;33m'mmp-base-service-${TARGET_PRODUCT}'\033[0m to push base service\n\n"
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值