【原创】用shell+ant构建apk
#!/bin/bash
#########################################################################
## $PRODVERSION:产品发布版本号码,在发布产品前由产品经理确认。
## $BRANCH :代码版本分支,与stash上相同
## $SECTION:Alpha,Beta,Release
## @Author:Michelle Tang
## @Date:--
#########################################################################
export PS4='[${BASH_SOURCE}:${LINENO}]: ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
function show()
{
set +x
echo -e "\033[32;1m==============================================================\033[0m"
echo -e "\033[34;1m$1\033[0m"
echo -e "\033[32;1m==============================================================\033[0m"
set -x
}
function die()
{
show $
exit
} function SetBaseEnv()
{
##Edit Test Data
#BRANCH="v2-uuc"
#SECTION="Release"
#PRODVERSION="v2"
#BUILD_NUMBER= export ANDROID_HOME="/backup/jenkins/bin/adt-bundle-linux/sdk"
export REPLACE_FILE="$HOME/ci/package/android.jar"
if [ x"$BRANCH" \< x"v4.2.0" ];then
ANDROID_TARGET="android-15"
else
ANDROID_TARGET="android-21"
#mv $ANDROID_HOME/platforms/$ANDROID_TARGET/android.jar android.jar.bak
#cp $REPLACE_FILE $ANDROID_HOME/platforms/$ANDROID_TARGET/
#chmod +x $ANDROID_HOME/platforms/$ANDROID_TARGET/android.jar
fi export ANT_HOME="$HOME/bin/apache-ant-1.9.2"
export JAVA_HOME="/usr/lib/jvm/jdk1.7.0_55"
#export CLASS_PATH="$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
export PATH="$PATH:$ANDROID_HOME/tools/:$ANT_HOME/bin/:$JAVA_HOME/bin" CODE_URL="此处忽略300字...."
TEST_ADDR_STR="http:\/\/此处忽略300字..."
ONLINE_ADDR_STR="http:\/\/此处忽略300字..."
PROJECT_NAME="此处忽略300字..." show "=====SetBaseEnv.End====="
} function TestEnv()
{
if [ ! -d "$ANDROID_HOME" ];then
die "ANDROID_HOME is not exist!"
elif [ ! -d "$ANT_HOME" ];then
die "ANT_HOME is not exist!"
elif [ ! -d "$JAVA_HOME" ];then
die "JAVA_HOME is not exist"
elif [ ! "$REPLACE_FILE" ];then
die "REPLACE_FILE is not exist!"
elif [ ! -d "$JAVA_HOME" ]; then
die "JAVA_HOME is not exist"
elif [ ! $REPLACE_FILE ]; then
die "REPLACE_FILE is not exist!"
else
show "=====TestEnv.End======"
return
fi
} function SetKeyInfo()
{
##set project info
PROJECT_NAME="此处忽略300字..."
PROJECT_PATH=$HOME/ci/src/$PROJECT_NAME ## set key info
# set uuc key info when release uuc branch
if [ x"$BRANCH" == x'v2-uuc' ];then
KEY_ALIAS_NAME="此处忽略300字..."
KEY_PASSWORD="此处忽略300字..."
KEYSTORE="此处忽略300字..."
KEYSTORE_PASSWORD="此处忽略300字..."
else
KEY_ALIAS_NAME="此处忽略300字..."
KEY_PASSWORD=$(echo "此处忽略300字..." | base64)
KEYSTORE="此处忽略300字..."
KEYSTORE_PASSWORD=$(echo "此处忽略300字..." | base64)
fi
DNAME="此处忽略300字..."
show "=====SetKeyInfo.End====="
} function SetAntInfo()
{
cat>> $ANT_PROPERTIES <<EOF
key.alias=$KEY_ALIAS_NAME
key.alias.password=$KEY_PASSWORD
key.store=$KEYSTORE
key.store.password=$KEYSTORE_PASSWORD
EOF
show "=====SetAntInfo.End====="
} function UpdateCode()
{
rm -rf $PROJECT_PATH
git clone -b $BRANCH $CODE_URL $PROJECT_PATH || die "Download code failed" ##Set Other info
ANT_PROPERTIES=$PROJECT_PATH/ant.properties
PROJECT_PROPERTIES=$PROJECT_PATH/project.properties
PROGUARD_CFG=$PROJECT_PATH/proguard.cfg
show "======UpdateCode.End====="
} function SetUpdateAddr()
{
TARGET_FILE="此处忽略300字..."
if [ x$SECTION = x"Release" ]; then
echo "RELEASE VERSION"
if [ x$BRANCH = x"v3" ] || [ x$BRANCH = x"v3.1" ] ||[ x$BRANCH = x"" ]|| [ x$BRANCH = x"v4.2.0" ] || [ x$BRANCH \> x"v4.2.0" ]; then
echo "BRANCH:"$BRANCH
test -e $TARGET_FILE || die "SetUpdateAddr file 'DataRequestManager.java' is not exist!!"
sed -i "s/http:\/\/此处忽略300字.../$ONLINE_ADDR_STR/" $TARGET_FILE
sed -i "s/http:\/\/此处忽略300字.../$ONLINE_ADDR_STR/" $TARGET_FILE
fi
else
echo "ALPHA OR BETA VERSION"
if [ x$BRANCH = x"v1" ] ; then
TARGET_FILE="此处忽略300字..."
echo "BRANCH:"$BRANCH
test -e $TARGET_FILE || die "SetUpdateAddr file '此处忽略300字...' is not exist!"
sed -i "s/http:\/\/此处忽略300字.../$TEST_ADDR_STR/" $TARGET_FILE
elif [ x$BRANCH = x"v2" ] || [ x$BRANCH = x"v2-hd" ] || [ x$BRANCH = x"v2-hd-onetouch" ] || [ x$BRANCH = x"v2-uuc" ];then
echo "BRANCH:"$BRANCH
test -e $TARGET_FILE || die "SetUpdateAddr file '此处忽略300字...' is not exist!"
sed -i "s/http:\/\/此处忽略300字.../$TEST_ADDR_STR/" $TARGET_FILE
else
echo "BRANCH:"$BRANCH
test -e $TARGET_FILE || die "SetUpdateAddr file '此处忽略300字...' is not exist!"
sed -i "s/http:\/\/此处忽略300字.../$TEST_ADDR_STR/" $TARGET_FILE
sed -i "s/http:\/\/此处忽略300字.../$TEST_ADDR_STR/" $TARGET_FILE
fi
fi
show "======SetUpdateAddr====="
} function SetProguard()
{
if [ x"$SECTION" != x'Release' ];then
sed -i 's/^proguard.config/#proguard.config/' $PROJECT_PROPERTIES
fi
show "=====SetProguard.End======"
} function ReleaseProduct()
{
DATE=`date +%y%m%d%H%M%S`
GEN_APK="bin/${PROJECT_NAME}_${PRODVERSION}_${BUILD_NUMBER}.${DATE}_${SECTION}.apk"
echo ${GEN_APK}
cd $PROJECT_PATH
rm -rf ".git"
android update project --target ${ANDROID_TARGET} --name ${PROJECT_NAME} --path ${PROJECT_PATH} --subprojects
ant release
mv "bin/${PROJECT_NAME}-release.apk" ${GEN_APK}
show "======ReleaseProduct.End====="
} function CleanEnv()
{
##Recovery android-
if [ x"$ANDROID_TARGET" == x"android-15" ];then
cd $ANDROID_HOME/platforms/$ANDROID_TARGET/
rm -f $ANDROID_HOME/platforms/$ANDROID_TARGET/android.jar
mv android.jar.bak android.jar
fi
show "=====CleanEnv.End====="
} function CheckSign()
{
# set uuc key info when release uuc branch
if [ x"$BRANCH" == x'v2-uuc' ];then
if ! $(jarsigner -verify -verbose -certs $GEN_APK | grep -q "此处忽略300字...");then
die "Sign APK Failed"
fi
else
if ! $(jarsigner -verify -verbose -certs $GEN_APK | grep -q "此处忽略300字...");then
die "Sign APK Failed"
fi
fi
show "======CheckSign.End======"
} function UploadAPK()
{
show "======UploadAPK.End======"
} function main()
{
SetBaseEnv
TestEnv
if [ -eq $? ];then
SetKeyInfo
UpdateCode
SetAntInfo
SetUpdateAddr
SetProguard
ReleaseProduct
#CleanEnv
CheckSign
#UploadAPK
fi
}
main
【原创】用shell+ant构建apk的更多相关文章
- 深入了解Ant构建工具 命令
深入了解Ant构建工具 标签: ant工具任务jarjavaclass 2010-05-29 21:16 1346人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- Ant构建原理及build.xml文档描述
最近在改写jmeter,用到ant构建,记录一下. Ant的概念Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant ...
- [Android] 基于 Linux 命令行构建 Android 应用(五):Ant 构建命令
Android SDK 提供的 android 工具可以在项目根目录自动生成 Ant 构建文件 build.xml[1].进入项目根目录后,你可以使用以下 Ant 命令[2]. ant clean 清 ...
- Ant—使用Ant构建一个简单的Java工程(两)
博客<Ant-使用Ant构建一个简单的Java项目(一)>演示了使用Ant工具构建简单的Java项目,接着这个样例来进一步学习Ant: 上面样例须要运行多条ant命令才干运行Test类中的 ...
- 2013.11.15 初学ant构建
该做的事情都差不多做完了,今天开始用ant构建,所以学了下ant,其实要不是因为ubuntu时不时的抽风我应该早就可以开始构建了,但重写的时候也想清楚了一些逻辑,优化了一些地方.下面是我这辈子写的第一 ...
- Ant构建和部署项目(转)
原文地址: http://www.blogjava.net/amigoxie/archive/2007/11/09/159413.html Ant是一个Apache基金会下的跨平台的构件工具,它可以实 ...
- Ant构建与部署Java项目---入门
原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建 ...
- 使用 ant 构建的一个例子
在项目根目录下新建一个 build.xml 文件,内容如下: <?xml version="1.0"?> <project name="javatest ...
- Ant—使用Ant构建简单Java项目(三)
博客<Ant-使用Ant构建简单Java项目(二)>我们简化了运行Test类中main方法须要运行的命令,本博客来介绍一下如何使build.xml文件和当中使用property标签定义的属 ...
随机推荐
- BZOJ1524: [POI2006]Pal
1524: [POI2006]Pal Time Limit: 5 Sec Memory Limit: 357 MBSubmit: 308 Solved: 101[Submit][Status] D ...
- Linux项目一
Linux项目一 引言: 这是我去年做的东西,一直没有时间整理,今天又要做一个基于这个项目的客户端与服务器版本. 以前我写的库文件中的函数耦合度很大,在一个函数中调用另一个函数,导致一无法拆开使用! ...
- selenium webdriver python 元素操作
常用操作 click 点击某个元素 driver.find_element_by_id(“su”).click() clear driver.find_element_by_id(“kw”).cl ...
- redis取值报错
> get "all_couriers_on_the_job" (error) ERR Operation against a key holding the wrong k ...
- I have a dream
1.金斧子 2.有利网 3.金融街
- VS2008 ctrl+shift+F热键冲突
今天发现有时VS 热键好使,有时,怎么按都没有反应. 后来发现是和输入法有冲突,把输入法快捷键改了就好了.
- 一起来写2048(160行python代码)
前言: Life is short ,you need python. --Bruce Eckel 我与2048的缘,不是缘于一个玩家,而是一次,一次,重新的ACM比赛.四月份校赛初赛,第一次碰到20 ...
- MM32看门狗学习(兼容STM32)
MM32看门狗学习(兼容STM32) IWDG独立看门狗 思维导图 IWDG框图与理解 1.独立看门狗分为两个部分,配置寄存器在1.8V供电区,计数器的核心部分在VDD供电区(即使停机/待机模式计数器 ...
- 配置Windows下编译运行C/C++过程
1.首先确定电脑安装了VS或者VC++的IDE: 2.修改环境变量 在系统属性-高级-环境变量-用户变量中: 编辑PATH增加cl编译器的路径D:\Program Files\Microsoft Vi ...
- SpringMVC07处理器方法的返回值
<body> <!--返回值是string的内部视图 --> <a href="user/add">add</a> <!--返 ...