#!/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的更多相关文章

  1. 深入了解Ant构建工具 命令

    深入了解Ant构建工具 标签: ant工具任务jarjavaclass 2010-05-29 21:16 1346人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  2. Ant构建原理及build.xml文档描述

    最近在改写jmeter,用到ant构建,记录一下. Ant的概念Make命令是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant ...

  3. [Android] 基于 Linux 命令行构建 Android 应用(五):Ant 构建命令

    Android SDK 提供的 android 工具可以在项目根目录自动生成 Ant 构建文件 build.xml[1].进入项目根目录后,你可以使用以下 Ant 命令[2]. ant clean 清 ...

  4. Ant—使用Ant构建一个简单的Java工程(两)

    博客<Ant-使用Ant构建一个简单的Java项目(一)>演示了使用Ant工具构建简单的Java项目,接着这个样例来进一步学习Ant: 上面样例须要运行多条ant命令才干运行Test类中的 ...

  5. 2013.11.15 初学ant构建

    该做的事情都差不多做完了,今天开始用ant构建,所以学了下ant,其实要不是因为ubuntu时不时的抽风我应该早就可以开始构建了,但重写的时候也想清楚了一些逻辑,优化了一些地方.下面是我这辈子写的第一 ...

  6. Ant构建和部署项目(转)

    原文地址: http://www.blogjava.net/amigoxie/archive/2007/11/09/159413.html Ant是一个Apache基金会下的跨平台的构件工具,它可以实 ...

  7. Ant构建与部署Java项目---入门

    原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建 ...

  8. 使用 ant 构建的一个例子

    在项目根目录下新建一个 build.xml 文件,内容如下: <?xml version="1.0"?> <project name="javatest ...

  9. Ant—使用Ant构建简单Java项目(三)

    博客<Ant-使用Ant构建简单Java项目(二)>我们简化了运行Test类中main方法须要运行的命令,本博客来介绍一下如何使build.xml文件和当中使用property标签定义的属 ...

随机推荐

  1. MYSQL用SOURCE命令时导入乱码的问题解决

    现在遇到了,但记得上次辉哥说过的方法,在MYSQL命令行里输入: set names utf8; 再执行SOURCE命令,搞定!

  2. Qt经典—线程、事件与Qobject(耳目一新)

    介绍 You’re doing it wrong. — Bradley T. Hughes 线程是qt channel里最流行的讨论话题之一.许多人加入了讨论并询问如何解决他们在运行跨线程编程时所遇到 ...

  3. BZOJ 1008 [HNOI2008]越狱

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5166  Solved: 2242[Submit][Status] ...

  4. BZOJ 1025 [SCOI2009]游戏

    1025: [SCOI2009]游戏 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1533  Solved: 964[Submit][Status][ ...

  5. HDU Train Problem I 1022 栈模拟

    题目大意: 给你一个n 代表有n列 火车,  第一个给你的一个字符串 代表即将进入到轨道上火车的编号顺序, 第二个字符串代表的是 火车出来之后到顺序, 分析一下就知道这,这个问题就是栈, 先进后出吗, ...

  6. 【转】MTK Android Driver知识大全

    原文网址:http://www.cnblogs.com/biglucky/p/4413797.html 一.Display 1.lcm 相关概念1.1) MIPI接口:一共有三种接口:DBI(也做CP ...

  7. 开源项目AndroidUtil-采用Fragment实现TabHost

    原文出自:方杰|http://fangjie.info/?p=141 转载请注明出处 学习Android也有一段时间了,感觉大部分的Android应用都有很多类似的组件,所以就打算做了这样一个开源项目 ...

  8. C++11 可变参数模板

    在C++11之前, 有两个典型的受制于模板功能不强而导致代码重复难看的问题, 那就 function object 和 tuple. 拿 function objects 来说, 需要一个返回类型参数 ...

  9. Java程序员容易犯的10个错误

    1. Array 转 ArrayList 一般开发者喜欢用: List<String> list = Arrays.asList(arr); Arrays.asList() 会返回一个Ar ...

  10. java中的接口和抽象类是什么?

    抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力.abstract c ...