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: $ [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=
;;
h)
usage
exit
;;
esac
done # paths if [ -z "${NDK_ROOT+aaa}" ];then
echo "please define NDK_ROOT"
exit
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: $ [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=
;;
h)
usage
exit
;;
esac
done # paths if [ -z "${NDK_ROOT+aaa}" ];then
echo "please define NDK_ROOT"
exit
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 ##删除无用文件
讲到这里这一节就结束了,下一节我们介绍自动打包及签名的脚本。
NOSDK--一键打包的实现(三)的更多相关文章
- 前端资源多个产品整站一键打包&包版本管理(三)—— gulp分流
问题: 当我们一个工作台里面有好几个项目的时候,我们要为项目的前端资源进行打包,但是,gulpfile只有一个,如果我们把所有的打包都放在同一个文件里面,首先文件会越来越大,而且不便于管理,这时,我们 ...
- NOSDK--SDK一键打包及统一接入的实现(前言)
前言 一,一键打包的实现 1.1 shell脚本执行流程介绍 1.2 自动刷新mk文件的脚本介绍 1.3 编译及拷贝资源的脚本介绍 1.4 打包及签名的脚本介绍 1.5 mac下的脚本环境配置及脚本的 ...
- cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程)
链接地址:http://www.cocoachina.com/bbs/read.php?tid=333937 cocos2d-x3.9利用cocos引擎一键打包Android平台APK(C++小白教程 ...
- 使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理
本章将和大家简单分享下如何使用VS中自带的一键打包功能将我们的ASP.NET Core类库打包并将程序包(类库)发布到NuGet平台上进行管理. 一.注册并登录NuGet平台 NuGet官网:http ...
- Nuget一键打包上传以及高级应用
Nuget是什么不用多说,大家应该也没少用过Nuget, 不少人也应该使用过工具打Nuget包,接下来先一步步说明如何使用脚本完成Nuget一键打包 Nuget一键打包 配置Nuget环境 下载地址: ...
- 前端资源多个产品整站一键打包&包版本管理(四)—— js&css文件文件打包并生成哈希后缀,自动写入路径、解决资源缓存问题。
问题: 当我们版本更新的时候,我们都要清理缓存的js跟css,如何使得在网页中不需要手动清理呢? 答案: 生成带有哈希后缀的js跟css文件 1.文件路径 路径中的conf.js 是用于放置全局打包的 ...
- 前端资源多个产品整站一键打包&包版本管理(一)
来新公司工作的第五个月.整站资源打包管理也提上了日程. 问题: 首先.什么是整站的打包管理呢? 我们公司的几个重要产品都在同一个webapp里面,但是,不同的开发部门独立开发不同的产品,长期以来,我们 ...
- Wix打包系列(三)自定义Action(Custom Action)
原文:Wix打包系列(三)自定义Action(Custom Action) 3.1 关于Action 我们已经知道如何生成具有标准安装界面的安装程序了,Windows Installer按照我们的界面 ...
- Web项目也能一键打包Android、IOS
随着移动互联网的不断发展,智能手机配置的不断提高,越来越多的年轻人基本都在使用手机,如微信.支付宝等等.已基本成为一种习惯,坐电梯也好.吃饭也好.开车也好,基本都捧着一个手机在那按来按去,开车就不建议 ...
- maven 聚合的含义是父类打包 ,清理等 则子类自动打包;也就是一键打包 方便服务
maven 聚合的含义是父类打包 ,清理等 则子类自动打包:也就是一键打包 方便服务
随机推荐
- HDU 4622 Reincarnation (查询一段字符串的不同子串个数,后缀自动机)
Reincarnation Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...
- MySQL 笔记2
-- *************一.数据约束********************---- -- 1.1 默认值 CREATE TABLE student( id INT, NAME ), addr ...
- File API 读取文件小结
简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码. 与以往文件上传不一样,File API不是为了向服务器提交文件设计的. 关于File API不能 ...
- java并发编程学习: 阻塞队列 使用 及 实现原理
队列(Queue)与栈(Stack)是数据结构中的二种常用结构,队列的特点是先进先出(First In First Out),而Stack是先进后出(First In Last Out),说得通俗点: ...
- React业务实践
总结自:http://reactjs.cn/react/docs/thinking-in-react-zh-CN.html 当接到一个需求时,如何用react来实现? 以下几个步骤做参考. 第一步:把 ...
- C#和C实现通过CRC-16 (Modbus)获取CRC值并校验数据(代码)
文章首发于浩瀚先森博客 CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差 ...
- 转 Android RadioButton设置选中时文字和背景颜色同时改变
主要应用在购物车,像淘宝的那样,点击以后弹出一个选择种类颜色这样的popuwindow以后,然后这个选择种类的地方要用到类似这个玩意儿. 搜了一下,效果和这个文章一致.转了. 原文地址:http:// ...
- 理解web缓存 浏览器缓存
为了: 控制缓存 遇到的现象: 1.开发的时候,浏览器会缓存你的文件,使得你的改动是无效的! 开发过程中:我们是不希望有缓存的. 但正是发布以后,我们是希望页面能够在浏览器缓存,这样用户的体验就会提高 ...
- HTML5 屏蔽触屏滚动
开发移动的html应用时常常需要将网页触控事件屏蔽掉.代码如下: //屏蔽全局触控事件 document.ontouchmove = function(e){ e.preventDefault();} ...
- iOS地图 -- 定位中的CLLocation的介绍与小练习
通过定位练习,熟悉CLLocation 在上篇笔记中提到了CLLocation类,这里通过练习来讲解一下这个类,类中包含了获取到的用户位置的信息 coordinate --> 坐标,经度和纬度 ...