您的位置:首页 > 运维架构 > Shell

Android项目自动编译脚本记录

2015-10-31 16:25 489 查看
Android项目自动编译脚本记录

下面是编译项目的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell 脚本 ant cocos2d lua