#!/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. JavaEmail

    一.邮件相关基本概念   a)邮件服务器:某厂商提供的电子邮件服务器的集群(或群集)   b)电子邮箱:邮件服务器上提供的个人或企业的邮件空间   c)邮件传输协议:邮件服务器之间,和个人或企业与邮件 ...

  2. 【Maven实战】依赖的聚合和版本管理

    1.在之前的文章中,我们已经建立了四个Maven项目,但是此时如果我们要对这四个项目进行编译打包时,必须一个一个的进行执行命令,而聚合就是指只要我们在其中一个项目中编写一些代码,则在进行此项目的编译和 ...

  3. 吃了单片机GPIO端口工作模式的大亏 ——关于强推挽输出和准双向口(弱上拉)的实际应用

    最近公司在进行一个项目,需要用到超声波测距的功能,于是在做好硬件电路,但在写控制程序时,却遇上了令我费解的事情. 当在单片机最小系统上调好输出频率40kHz,占空比50%的方波输出信号后,将程序烧至超 ...

  4. html动态编辑框

    简述: 随着在输入框中增加字符,动态矿高度增加(IE9及以上 chrome  firefox) 由于IE8 不支持oninput函数,所以不能实现此效果 事件函数: function feedDivO ...

  5. Spring boot将配置属性注入到bean类中

    一.@ConfigurationProperties注解的使用 看配置文件,我的是yaml格式的配置: // file application.yml my: servers: - dev.bar.c ...

  6. POJ2996 Help Me with the Game(模拟)

    题目链接. 分析: 简单模拟. #include <iostream> #include <queue> #include <cstdio> #include &l ...

  7. BestCoder Round #49

    呵呵哒,1001的dfs返回值写错,wa了两发就没分了,1002显然是PAM可是我没学过啊!!!压位暴力可不可以...看看范围貌似不行,弃疗...1003根本不会做,1004想了想lcc发现不可做,那 ...

  8. 抽象基类(ABC),纯虚函数

    #ifndef _ACCTABC_H_ #define _ACCTABC_H_ //(* #include <iostream> #include <string> //*) ...

  9. Java 8 表示两个时间点距离

    Java JDK8 的 java.time API 提供全面的 date 和 time 的模型. 下面是一个使用案例:求两个时间点的距离. package com.tony.test; import ...

  10. 高性能JSON工具-FastJson处理超大JSON文本

    使用阿里开源类库FastJson,当需要处理超大JSON文本时,需要Stream API,在fastjson-1.1.32版本中开始提供Stream API.文档参考GitHub:https://gi ...