• 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
    
    ##删除无用文件

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

  • 相关阅读:
    [剑指offer] 7. 斐波那契数列
    [剑指offer] 6. 旋转数组的最小数字
    [剑指offer] 5. 用两个栈实现队列
    [剑指offer] 4. 重建二叉树
    [剑指offer] 3. 从头到尾打印链表
    vue.js从输入中的contenteditable元素获取innerhtml
    CSS3 ------- object-fit属性
    mouseenter和mouseover区别
    元素scroll系列属性
    淘宝flexible.js源码分析
  • 原文地址:https://www.cnblogs.com/nottvlike/p/4649046.html
Copyright © 2020-2023  润新知