Android项目自动编译脚本记录
2015-10-31 16:25
489 查看
Android项目自动编译脚本记录
下面是编译项目的shell脚本 ant.sh:
下面是自定义的ant脚本 custom_rules.xml :
下面是编译打包release的脚本,包含加密,多渠道包等:
下面是编译项目的shell脚本 ant.sh:
ANDROID_PROJECT_HOME=$PWD/frameworks/runtime-src/proj.android PLUGIN_HOME=$ANDROID_PROJECT_HOME/assets/dex/ rm -rf $ANDROID_PROJECT_HOME/bin/ && rm -rf $ANDROID_PROJECT_HOME/gen/ && #assets目录下面均是生成文件,所以也在编译前清理掉 rm -rf $ANDROID_PROJECT_HOME/assets/ && #保存当前编译时间,最后并入到测试版本名中 DATE=$(date +%Y%m%d_%T) #备份版本名,在编译前备份,编译后还原 version_bak=$(cat $ANDROID_PROJECT_HOME/AndroidManifest.xml | grep versionName) version_bak=${version_bak#*versionName=\"} version_bak=${version_bak%%\"*} version_bak=${version_bak%%_*} #修改版本名 sed -i "s#\(android:versionName=\)\"\(.*\)\"#\1\"$version_bak\_$DATE\"#" $ANDROID_PROJECT_HOME/AndroidManifest.xml && #编译cocos2d项目 cocos compile -p android && #准备编插件 PATH_OUTPUT=$ANDROID_PROJECT_HOME/bin/plugin_dex_dir/classes.dex PATH_SOURCE=$ANDROID_PROJECT_HOME/bin/plugin_dex_dir/plugin.jar cd $ANDROID_SDK_HOME/build-tools/21.1.2/ dx --dex --output=$PATH_OUTPUT $PATH_SOURCE cd - mkdir -p $PLUGIN_HOME cd $ANDROID_PROJECT_HOME/bin/plugin_dex_dir/ #加密压缩插件包 PLUGIN_NAME="plugin_"$version_bak".zip" zip $PLUGIN_NAME classes.dex zip -q -r -P "123456" plugin.zip $PLUGIN_NAME mv plugin.zip $PLUGIN_HOME cd - #插件包完成后,做正式编译签名前的清理 rm -rf $ANDROID_PROJECT_HOME/bin/ && rm -rf $ANDROID_PROJECT_HOME/gen/ && echo "ant release with plugin" ant release -buildfile $ANDROID_PROJECT_HOME/build.xml && #还原版本名 sed -i "s#\(android:versionName=\)\"\(.*\)\"#\1\"$version_bak\"#" $ANDROID_PROJECT_HOME/AndroidManifest.xml && adb install -r $ANDROID_PROJECT_HOME/bin/GameCenter-release.apk
下面是自定义的ant脚本 custom_rules.xml :
<?xml version="1.0" encoding="UTF-8"?> <project name="PluginRules" default="help" > <target name="-post-compile" > <!-- Primary dex to include everything but the concrete library implementation. <mkdir dir="${out.classes.absolute.dir}.main"/> <copy todir="${out.classes.absolute.dir}.main" > <fileset dir="${out.classes.absolute.dir}" > <exclude name="com/brian/plugin/**" /> </fileset> </copy> --> <!-- Secondary dex to include the concrete library implementation. 将需要打包到插件中的.class移动到另一个目录 --> <mkdir dir="${out.classes.absolute.dir}.plugin" /> <copy todir="${out.classes.absolute.dir}.plugin" > <fileset dir="${out.classes.absolute.dir}" > <include name="com/brian/plugin/**" /> </fileset> </copy> <delete dir="${out.classes.absolute.dir}/com/brian/plugin" verbose="${verbose}" /> <!-- --> <mkdir dir="${out.absolute.dir}/plugin_dex_dir" /> <echo message="... building @{input-dir}-cases now ...." /> <!-- 打包插件 --> <jar basedir="${out.classes.absolute.dir}.plugin" jarfile="${out.absolute.dir}/plugin_dex_dir/plugin.jar" /> </target> </project>
下面是编译打包release的脚本,包含加密,多渠道包等:
#!/bin/sh MARKETS="APPSTORE ROM" ANDROID_PROJECT_HOME="./frameworks/runtime-src/proj.android" RESOURCE_VERSION="5.0" #将代码中的debug修改为false sed -i "s#DEBUG = 2#DEBUG = 1#" ./src/config.lua sed -i "s#CC_SHOW_FPS = true#CC_SHOW_FPS = false#" ./src/config.lua sed -i "s#isDebug = true#isDebug = false#" $ANDROID_PROJECT_HOME/src/com/brian/gamecenter/App.java echo "backup the lua_src" mv src/ src_back/ && echo "luacompile for encryption加密lua代码" cocos luacompile -v -s ./src_back -d ./src -e -k brian -b brian && echo "build resource-md5-list file" ./build_md5.py -v $RESOURCE_VERSION -c && echo "clear project" rm -rf $ANDROID_PROJECT_HOME/bin/ rm -rf $ANDROID_PROJECT_HOME/gen/ rm -rf $ANDROID_PROJECT_HOME/assets/ rm -rf release/ echo "clear project finished" echo "compile project" cocos compile -p android && #打包热更新文件 echo "create update package for 'Hot-Update Server'" mkdir release/ mkdir -p update_pak/gamecenter cp -r src/ update_pak/gamecenter cp -r res/ update_pak/gamecenter cp project.manifest update_pak/ tar -zcf release/update_pak.tar.gz update_pak/ rm -rf update_pak/ echo "create update package finished" #ant打包签名 echo "sign the apk to release" ant release -buildfile $ANDROID_PROJECT_HOME/build.xml && cp $ANDROID_PROJECT_HOME/libs/armeabi/libcocos2dcpp_gamecenter.so release/ cp $ANDROID_PROJECT_HOME/bin/GameCenter-release.apk release/GameCenter.apk #生成渠道包 echo "get the original market name" market_bak=$(cat $ANDROID_PROJECT_HOME/AndroidManifest.xml | grep UMENG_CHANNEL) market_bak=${market_bak#*value=\"} market_bak=${market_bak%%\"*} for market in $MARKETS do echo "packaging GameCenter_${market}.apk ..." #sed -i "s#\(android:value=\)\"\(.*\)\"\( android:name=\"UMENG_CHANNEL\"\)#\1\"$market\"\3#" $ANDROID_PROJECT_HOME/AndroidManifest.xml sed -i "s#\(android:name=\"UMENG_CHANNEL\" android:value=\)\"\(.*\)\"#\1\"$market\"#" $ANDROID_PROJECT_HOME/AndroidManifest.xml echo $(cat $ANDROID_PROJECT_HOME/AndroidManifest.xml | grep UMENG_CHANNEL) ant release -buildfile $ANDROID_PROJECT_HOME/build.xml && cp $ANDROID_PROJECT_HOME/bin/GameCenter-release.apk release/GameCenter_$market.apk done echo "recover the original market name 还原默认渠道包" #sed -i "s#\(android:value=\)\"\(.*\)\"\( android:name=\"UMENG_CHANNEL\"\)#\1\"$market_bak\"\3#" $ANDROID_PROJECT_HOME/AndroidManifest.xml sed -i "s#\(android:name=\"UMENG_CHANNEL\" android:value=\)\"\(.*\)\"#\1\"$market_bak\"#" $ANDROID_PROJECT_HOME/AndroidManifest.xml echo "make apk without .so" rm $ANDROID_PROJECT_HOME/libs/armeabi/libcocos2dcpp_gamecenter.so ant release -buildfile $ANDROID_PROJECT_HOME/build.xml && mv $ANDROID_PROJECT_HOME/bin/GameCenter-release.apk release/ echo "make apk finished" echo "recovery the workspace" rm -rf src/ mv src_back/ src/ rm project.manifest sed -i "s#DEBUG = 1#DEBUG = 2#" ./src/config.lua sed -i "s#CC_SHOW_FPS = false#CC_SHOW_FPS = true#" ./src/config.lua sed -i "s#isDebug = false#isDebug = true#" $ANDROID_PROJECT_HOME/src/com/brian/gamecenter/App.java echo "recovery finished" # install apk adb install -r ./release/GameCenter.apk
相关文章推荐
- android wifi 无线调试
- 运维入门
- 动态清空 nohup 输出文件
- install scrapy with pip and easy_install
- Linux Shell常用技巧
- Shell 脚本编程陷阱
- VBS脚本写的Windows硬件检测工具分享
- 用vbscript实现隐藏任务栏图标的脚本
- 用autoit编写第一个脚本(Hello World)
- VBS调用WMI快速关闭IE的脚本
- 详解Lua中的表的概念及其相关操作方法
- Lua编程示例(二):面向对象、metatable对表进行扩展
- 收集的ROS防火墙脚本
- JSP脚本漏洞面面观
- shell字符串操作详解
- 不错的批处理脚本 第一部分
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- 不错的批处理脚本实例代码 第二部分