NOSDK--一键打包的实现(三)

1.3 编译及拷贝资源的脚本介绍

  这一节介绍编译及拷贝资源的shell脚本,即:

  • tools:                                             //保存通用的功能脚本
    •   build_native.sh               //cocosd-x自带脚本,用于编译
    •   resource_copy.sh          //cocosd-x自带脚本,用于拷贝资源;

这两个脚本都是cocos2d-x自带的脚本,这里我们会简单介绍下指令的功能,还有我们修改过的一些地方。

  下面先来看看build_native.sh脚本,脚本按照功能大致可划分为五个部分,其中第一部分中的APPNAME变量和APP_ANDROID_NAME变量是游戏名和包名,SDK_ROOT变量和NDK_ROOT变量是设置编译环境的路径,其实我可以将它们移植到platform_path.sh脚本中,这个以后再说; 第二部分的内容主要是脚本自己介绍自己的用法及用户输入的处理(可以尝试cd到脚本目录,然后执行./build_native.sh -h 看看);第三部分是查看编译环境相关的变量是否设置还有定义了一些路径相关的变量;第四部分是调用ndk进行编译,其中的-j4参数需要注意下,-j4能 够开启多核编译,加速编译过程(-j4就是4核编译);第五部分是我们加的,很多时候sdk会自带一些assets和so库,我将他们放在工程的 backup文件夹中,打包的时候自动拷贝到相应的文件夹里,这个我在介绍统一接入的时候会重点说。

APPNAME="mygame"
APP_ANDROID_NAME="org.nosdk.main"
SDK_ROOT="$HOME/Documents/program/android-sdk-macosx"
NDK_ROOT="$HOME/Documents/program/android-ndk-r9d"

# options

buildexternalsfromsource=

usage(){
cat << EOF
usage: $0 [options]

Build C/C++ code for $APPNAME using Android NDK

OPTIONS:
-s    Build externals from source
-h    this help
EOF
}

while getopts "sh" OPTION; do
case "$OPTION" in
s)
buildexternalsfromsource=1
;;
h)
usage
exit 0
;;
esac
done

# paths

if [ -z "${NDK_ROOT+aaa}" ];then
echo "please define NDK_ROOT"
exit 1
fi

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# ... use paths relative to current directory
COCOS2DX_ROOT="$DIR/../../.."
APP_ROOT="$DIR/.."
APP_ANDROID_ROOT="$DIR"

echo "NDK_ROOT = $NDK_ROOT"
echo "COCOS2DX_ROOT = $COCOS2DX_ROOT"
echo "APP_ROOT = $APP_ROOT"
echo "APP_ANDROID_ROOT = $APP_ANDROID_ROOT"

echo "#############################"
echo "$*"

if [[ "$buildexternalsfromsource" ]]; then
    echo "Building external dependencies from source"
    "$NDK_ROOT"/ndk-build -j4 -C "$APP_ANDROID_ROOT" 
        "NDK_MODULE_PATH=${COCOS2DX_ROOT}:${COCOS2DX_ROOT}/cocos2dx/platform/third_party/android/source"
else
    echo "Using prebuilt externals"
    "$NDK_ROOT"/ndk-build -j4 -C "$APP_ANDROID_ROOT" 
        "NDK_MODULE_PATH=${COCOS2DX_ROOT}:${COCOS2DX_ROOT}/cocos2dx/platform/third_party/android/prebuilt"
fi

if [ -d "$APP_ANDROID_ROOT"/backup/libs ]; then
    cp -R "$APP_ANDROID_ROOT"/backup/libs/ "$APP_ANDROID_ROOT"/libs/
fi

  接下来我们看下资源拷贝的脚本,这个脚本按照功能同样划分为五个部分,其中一二三部分的功能和上一个脚本的相同,我们就不赘述了,第四部分是从Resources目录中拷贝资源到assets目录中(会先删除assets目录,这也是创建backup文件夹的原因),如果我们想要排除一些资源文件(比如只有ios需要的 icon资源)可以改这里的代码,排除一些文件夹;第五部分是拷贝sdk自带的资源(backup里的assets目录中的内容)到assets目录中, 后面会考虑将这几行代码换个位置。

APPNAME="mygame"
APP_ANDROID_NAME="org.nosdk.main"
SDK_ROOT="$HOME/Downloads/android-sdk-macosx"
NDK_ROOT="$HOME/Downloads/android-ndk-r8d"

# options

buildexternalsfromsource=

usage(){
cat << EOF
usage: $0 [options]

Build C/C++ code for $APPNAME using Android NDK

OPTIONS:
-s    Build externals from source
-h    this help
EOF
}

while getopts "sh" OPTION; do
case "$OPTION" in
s)
buildexternalsfromsource=1
;;
h)
usage
exit 0
;;
esac
done

# paths

if [ -z "${NDK_ROOT+aaa}" ];then
echo "please define NDK_ROOT"
exit 1
fi

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# ... use paths relative to current directory
COCOS2DX_ROOT="$DIR/../libs"
APP_ROOT="$DIR/.."
APP_ANDROID_ROOT="$DIR"

echo "NDK_ROOT = $NDK_ROOT"
echo "COCOS2DX_ROOT = $COCOS2DX_ROOT"
echo "APP_ROOT = $APP_ROOT"
echo "APP_ANDROID_ROOT = $APP_ANDROID_ROOT"

# make sure assets is exist
if [ -d "$APP_ANDROID_ROOT"/assets ]; then
    rm -rf "$APP_ANDROID_ROOT"/assets
fi

mkdir "$APP_ANDROID_ROOT"/assets

# copy resources
for file in "$APP_ROOT"/Resources/*
do

if [ -d "$file" ]; then
    cp -rf "$file" "$APP_ANDROID_ROOT"/assets
fi

if [ -f "$file" ]; then
   cp "$file" "$APP_ANDROID_ROOT"/assets
fi

done

if [ -d "$APP_ANDROID_ROOT"/backup/assets ]; then
    cp -R "$APP_ANDROID_ROOT"/backup/assets/ "$APP_ANDROID_ROOT"/assets/
fi

##删除无用文件

  讲到这里这一节就结束了,下一节我们介绍自动打包及签名的脚本。

原文地址:https://www.cnblogs.com/nottvlike/p/4649046.html