【原创】用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标签定义的属 ...
随机推荐
- Fetcher类的工作流程
Fetcher类工作流程: FileInputFormat.addInputPath(job, new Path(segment, CrawlDatum.GENERATE_DIR_NAME)); jo ...
- android视图切换动画:ViewAnimator类及其子类
类图:
- 【归并排序】【逆序数】HDU 5775 Bubble Sort
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 题目大意: 冒泡排序的规则如下,一开始给定1~n的一个排列,求每个数字在排序过程中出现的最远端 ...
- [Design Pattern] Iterator Pattern 简单案例
Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单 ...
- 《算法问题实战策略》-chaper32-网络流
基本的网络流模型: 在图论这一块初步的应用领域中,两个最常见的关注点,其一时图中的路径长度,也就是我们常说的的最短路径问题,另一个则是所谓的“流问题”. 流问题的基本概念: 首先给出一张图. 其实所谓 ...
- 基于JAVA的webVNC
jxpiInstall安装程序下载: http://sdlc-esd.sun.com/ESD6/JSCDL/jdk/7u60-b19/jxpiinstall.exe?AuthParam=1402208 ...
- DataGuard体系结构
一.DataGuard总体结构 总体目标 1. 描述计划和非计划停机的不同因数 2. DataGuard的主要组件 3. 物理以及逻辑DataGuard的异同 4. 建立DataGua ...
- js常用自编函数整理
1.替换js地址栏参数值 //destiny是目标字符串,比如是http://www.huistd.com/?id=3&ttt=3 //par是参数名,par_value是参数要更改的值,调用 ...
- .Hibernate一对一映射与组件映射
1.按照外键映射(Hibernate提供了两种映射一对一关联关系的方式:按照外键映射和按照主键映射) 实现需要: 创建实体类Users1和Resume1 public class Users1 { p ...
- Resizable 2th click not working
here's a simple solution. just destroy the resizable function, then rebuild it. try { $("#div& ...