简介
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