Android.mk编译学习,指定模块编译,并指定编译结果的生成路径.

先说一下目标:

1,对修改的特定模块进行编译.

2,编译结果(bin,so)存放到制定目录.

难点:

1,修改的目录很多,想要一一找到,并且不能遗漏.但又不想每次添加,

2,想要一键编译,但希望这次编译的只有修改的模块.

 

尝试的做法:

1,修改文件后,在Android.mk中,新添加LOCAL_MODULE为ids-的模块,将LOCAL_MODULE_PATH := ids-core/out/ .

2,使用find -name Android.mk | xargs -i grep -l "ids-core" {}命令,找到所有包含ids-core的Android.mk,并进行编译.

find -name Android.mk | xargs -i grep -l "ids-core" {}  意思是find指定文件内容的文件.效率远高于单纯的grep.shell真的有必要好好学习.

|awk -F/ 'OFS="/"{$NF="";print}' 这条加到上一条后面,可以把需要编译的目录都找到.

 

最终结果:

以init这个bin文件,还有libsurfaceflinger.so为例.介绍一下如何改动的.

1,init

###############################################################
include $(CLEAR_VARS)
LOCAL_MODULE := ids-init                 ##LOCAL_MODULE不能重名,只能后面脚本批量处理
LOCAL_MODULE_CLASS := EXECUTABLES           ##好像可以删除了,以前尝试prebuilt时留下的.
LOCAL_MODULE_PATH := ids-core/out/root                                  ##指定编译结果生成的位置,相对于Android主目录的路径.
LOCAL_SRC_FILES :=../../../$(TARGET_ROOT_OUT)/init             ##指定源文件路径,相对于当前编译目录的路径.
include $(BUILD_RAW_EXECUTABLE)                                           ##加个RAW,就不会去进行EXECUTABLE的编译校验了.

###############################################################
include $(CLEAR_VARS)
LOCAL_MODULE := ids-libsurfaceflinger          ##还好现在版本低,不会自动在前面加上lib.
LOCAL_MODULE_PATH := ids-core/out/lib         ##指定路径
LOCAL_MODULE_TAGS := optional                                           ##eng,user.....都会编译.
LOCAL_SRC_FILES :=../../../../$(TARGET_OUT_SHARED_LIBRARIES)/libsurfaceflinger.so ##指定源so的路径.
include $(BUILD_SHARED_LIBRARY)                                       ##会自动添加.so,在考虑,是不是换一个会更好.
 

再加一个shell脚本,制作一键编译
##get modify dir
cd ${idsAHome}/product/${androidVendor}
echo "start mk ${androidVendor}"
idsCorePath=$(find -name Android.mk | xargs -i grep -l "ids-core" {}|awk -F/ 'OFS="/"{$NF="";print}')

##mk file
cd ${idsAHome}/${androidVendor}
echo $PWD
source build/envsetup.sh
lunch wing_k10x6-eng

for path in $idsCorePath
    do
    i=$path
    echo "mma $i"
    cd ${idsAHome}/${androidVendor}/$i
    mma 1>/dev/null 2>&1
    done
echo "mk end"

你可能感兴趣的:(android,ids)