标签:
所谓一键打包,包含五个流程:
所有与打包相关的脚本,都放在目录projects/main/build_android中,下面是目录及文件介绍:
1.1 shell脚本执行流程介绍
platform_input.sh定义了脚本的基本指令:
你可以cd到build_android目录中,执行
./build_all.sh -a 或者 ./build_all.sh -b mk 或者 ./build_all.sh -c icon 或者 ./build_all.sh -p 或者 ./build_all.sh -b mk -c icon -p
你也可以cd到build_android/platform目录中,执行
./build_noplatform.sh -a 或者 ./build_noplatform.sh -b mk 或者 ./build_noplatform.sh -c icon 或者 ./build_noplatform.sh -p 或者 ./build_noplatform.sh -b mk -c icon -p
脚本的执行流程,简单来说,上述指令将build_android/tools/platform_refresh.sh,build_android/tools/build_native.sh,build_android/tools/icon_copy.sh,build_android/tools/resource_copy.sh,build_android/tools/platform_package.sh这五个脚本拷入到目标工程所在的目录,根据指令来执行相应的脚本。
首先,我们先来看看build_noplatform.sh:
############################################## ##平台数据,需要更改 ############################################## PLATFORMHONE_CHILD=() SDKDIR="game_xx" BUILDDIR="build_android" LIBRARYDIR="nosdk_xx" TOOLSDIR="tools" PlatformTarget="libcocos2dcpp" # PlatformName="PLATFORM_XX" PlatformGameName=( "NAME_MYGAME" ) if [ "$ALL" != "1" ] && [ "$ALL" != "0" ]; then source ../tools/platform_path.sh
ISBUILD_SET="0"
ISREFRESHMK_SET="0"
ISCOPYRESOURCE_SET="0"
ISCOPYICON_SET="0"
ISPACKAGE_SET="0" ##使用自定义设置 PLATFORMHONE_CHILD=( # "DEBUG" ##编译模式 ) fi source platform_input.sh $* source platform_param.sh
PLATFORMHONE_CHILD变量存贮了平台所需的宏字符串,在未使用统一接入之前,区分不同平台主要依靠宏来实现,比如PLATFORM_XX,添加PlatformGameName变量是为了处理子包分包(同一平台,通过宏更改游戏登录背景,游戏名称等)。
接下来的四个dir,SDKDIR/BUILDDIR/LIBRARYDIR/TOOLSDIR,
通过ALL这个变量,可以区分究竟是执行了build_android/build_all.sh脚本还是build_android/platform的单个平台平台脚本,凡是类似build_all.sh这种脚本,都需要在脚本开头设置ALL=1,由于两种脚本目录的不同,需要分开处理。
#全局统一配置,针对一键编译 ALL="1" #通用宏设置 PLATFORMHONG=( #"DEBUG" ##编译模式 #"NO_SHARE" ##微信分享 #"TEST_APP" ##app测试 ) ## source ./tools/platform_path.sh source platform_input.sh $* ##app source ./platform/build_noplatform.sh ##xx source ./platform/build_xx.sh
这里我们可以看到,平台脚本会先执行build_path.sh来设置PATH,初始化功能变量,然后通过platform_input.sh来处理输入,设置功能变量,功能变量有5个:
接下来,让我们看看build_param.sh脚本文件,build_param.sh是一个中间脚本,用来处理目录和宏的问题
if [ "$ALL" != "1" ] && [ "$ALL" != "0" ]; then SOURCEDIR="../../proj.android" SDKDIR="../project_android/$SDKDIR" BUILDDIR2="../$BUILDDIR" BUILDDIR="../$BUILDDIR/platform" TOOLSDIR="../$TOOLSDIR" ExternalDir="../auto_android_src_dir" SRCDIR="../proj.android/src/" ALL="0" else SDKDIR="../project_android/$SDKDIR" BUILDDIR2="../$BUILDDIR" BUILDDIR="../$BUILDDIR" TOOLSDIR="./$TOOLSDIR" ExternalDir="../auto_android_src_dir" SRCDIR="../proj.android/src/" SOURCEDIR="../proj.android" fi if [ "$ALL" == "1" ]; then ##使用全局设置 for data in ${PLATFORMHONG[@]} do PLATFORMHONE_CHILD+=( ${data} ) done fi # #####不用更改 # PLATFORMHONE_CHILD+=( # "$PlatformName" ##平台类型 # ) for data in ${PlatformGameName[@]} do PLATFORMHONE_CHILD+=( "$data" ##平台类型 ) done echo "#############################################" echo -e "\033[31;1mbuild platform --$SDKDIR...\033[0m" echo "############" for data in ${PLATFORMHONE_CHILD[@]} do echo ${data} done echo "############" source "$TOOLSDIR"/build_platform.sh "$SDKDIR" "$BUILDDIR" "$TOOLSDIR" "$BUILDDIR2" "$SOURCEDIR"
通过ALL变量来设置目录,这个我们之前说过,主要是为了切换目录用的,然后设置宏,将平台相关的宏全都保存在PLATFORMHONE_CHILD中。
那么,现在到了build_platform.sh脚本了,这是脚本流程的最后一个环节,功能是拷贝5个脚本到目标文件夹,cd过去,执行对应脚本,然后再cd回来。
#执行刷新mk,编译,拷贝资源 cp "$3"/build_native.sh "$5"/ cp "$3"/resource_copy.sh "$5"/ cp "$3"/platform_refresh.sh "$5"/ cp "$3"/platform_package.sh "$5"/ cp "$3"/platform_copy.sh "$5"/ cp "$3"/icon_copy.sh "$5"/ cp "$3"/platform_property.sh "$5"/ cd "$5" #### 注意 == 两边必须有空格 #刷新Android.mk if [ "${ISREFRESHMK_SET}" == "1" ]; then if [ -f "./platform_refresh.sh" ]; then echo -e "\033[31;1m开始刷新 Android.mk\033[0m" source "./platform_refresh.sh" fi fi #编译 if [ "${ISBUILD_SET}" == "1" ]; then if [ -f "./build_native.sh" ]; then echo -e "\033[31;1m开始编译libcocos2dcpp.so\033[0m" source "./build_native.sh" >> null fi fi #拷贝资源 if [ "${ISCOPYRESOURCE_SET}" == "1" ]; then if [ -f "./resource_copy.sh" ]; then echo -e "\033[31;1m开始拷贝资源\033[0m" source "./resource_copy.sh" >> null fi fi #打包 if [ "${ISPACKAGE_SET}" == "1" ]; then if [ -f "./platform_package.sh" ]; then echo -e "\033[31;1m开始打包\033[0m" source "./platform_package.sh" "$1" "$2" "$3" "$4" "$5" >> null fi fi if [ "${ISCOPYICON_SET}" == "1" ]; then if [ -f "./icon_copy.sh" ]; then echo -e "\033[31;1m开始拷贝icon\033[0m" source "./icon_copy.sh" "$1" "$2" "$3" "$4" "$5" >> null fi fi # source "./icon_copy.sh" "$1" "$2" "$3" "$4" echo -e "\033[31;1m$SDKDIR build finished \033[0m" echo "#############################################" cd "$2"
这一节到这里就结束了,下一节将主要介绍mk刷新这一块的代码
标签:
原文地址:http://www.cnblogs.com/nottvlike/p/4603778.html