建立apk定时自动打包系统第二篇——自动上传文件
在《建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期》这篇文章中介绍多渠道打包的流程。很多时候我们需要将打包好的apk上传到ftp中,这时候我可以修改custom_rules.xml这个文件就可以实现这个需求了。
1、下载 common-net-3.3.jar 并将其放在ant安装目录下的lib文件夹中。
2、修改ant.properties文件
key.store=./test.keystore
key.alias=test.keystore
key.store.password=test12345
key.alias.password=test12345 #generate test.keystore
#keytool -genkey -alias test.keystore -keyalg RSA -validity 20000 -keystore test.keystore
apk.dir=./apk
app.name=AntDemo
#channel numbers
market_channels=myapp-12345,BAI-3s322d
#upload apk
#ftp的主机地址,我在本机配置了一个ftp服务器,用于测试
ftp.hostname=127.0.0.1
#ftp登录帐号
ftp.userid=admin
#登录密码
ftp.password=6lg4LgCT
#将apk文件存放ftp服务器中的根目录下,可以自行选择其他目录
ftp.remotedir=/
upload apk 后面就是新添加的配置属性,这些属性会在custom_rules.xml文件中引用,当然这个ftp.userid必须有读写权限,否则将无法上传。
3、修改custom_rules.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" > <taskdef resource="net/sf/antcontrib/antcontrib.properties" > <classpath> <pathelement location="${ant.ANT_HOME}/lib/ant-contrib-1.0b3.jar" />
</classpath>
</taskdef> <tstamp> <format
pattern="yyyyMMddhhmm"
property="pktime"
unit="hour" />
</tstamp> <mkdir dir="${apk.dir}" >
</mkdir> <target name="deploy" > <foreach
delimiter=","
list="${market_channels}"
param="channel"
target="modify_manifest" >
</foreach>
</target> <target name="modify_manifest" > <replaceregexp
byline="false"
flags="g" > <regexp pattern="android:value="(.*)" android:name="app_key"" /> <substitution expression="android:value="${channel}" android:name="app_key"" /> <fileset
dir=""
includes="AndroidManifest.xml" />
</replaceregexp> <property
name="out.final.file"
location="${apk.dir}/${app.name}_${channel}_${pktime}.apk" /> <antcall target="clean" /> <antcall target="release" />
<antcall target="upload" /> </target>
<target
name="upload"
description="Upload apk to server..." >
<ftp
action="put"
binary="yes"
passive="true"
password="${ftp.password}"
remotedir="${ftp.remotedir}"
separator=""
server="${ftp.hostname}"
userid="${ftp.userid}"
verbose="yes" >
<!--指定apk所在目录-->
<fileset dir="${apk.dir}" >
<include name="${app.name}_${channel}_${pktime}.apk" />
</fileset>
</ftp>
</target>
</project>
在 <antcall target="release" /> 后面添加<antcall target="upload" />这个就是在打包好了之后就执行上传任务。
修改之后就可以执行ant-deploy命令就可以自动打包并上传到ftp了。
4、Demo代码
antdemo.rar
115网盘礼包码:5lbdiif2eh98
http://115.com/lb/5lbdiif2eh98
这个代码包含了多渠道打包以及自动上传ftp的配置,这个代码的ftp是本机测试的,跑的时候需要配置一个ftp地址和有读写权限的用户名和密码
建立apk定时自动打包系统第二篇——自动上传文件的更多相关文章
- 建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期
团队开发时,每天都需要输出一个apk包给其它部门的同事测试验证.打包几乎是每天必须完成的功课.如果用IDE来输出apk,那速度是非常慢的,如果还需要有不同渠道的apk包,那程序猿都要疯了.当然也有用 ...
- 建立apk定时自动打包系统第三篇——代码自动更新、APP自动打包系统
我们的思路是每天下班后团队各成员在指定的时间(例如下午18:30)之前把各自的代码上传到SVN,然后服务器在指定的时间(例如下午18:30)更新代码.执行ant 打包命令.最后将apk包存放在指定目录 ...
- “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)
“MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构.登录窗口.以及主界面) 一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增 ...
- Autofac 组件、服务、自动装配 《第二篇》
一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...
- “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)
一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增删改查的地步.测试好之后再来看这篇文章,我的主框架相对来说简答一点,重点还是实现系统的功能,以及对Jquery-Eas ...
- Android窗口系统第二篇---Window的添加过程
以前写过客户端Window的创建过程,大概是这样子的.我们一开始从Thread中的handleLaunchActivity方法开始分析,首先加载Activity的字节码文件,利用反射的方式创建一个Ac ...
- android apk 防止反编译技术第二篇-运行时修改字节码
上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...
- android apk 防止反编译技术第二篇-运行时修改Dalvik指令
上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...
- Python全栈开发记录_第二篇(文件操作及三级菜单栏增删改查)
python3文件读写操作(本篇代码大约100行) f = open(xxx.txt, "r", encoding="utf-8") 不写“r”(只读)默认是只 ...
随机推荐
- C#拼装JSON数组简易方法
下面是我们想要拼接出来的JSON字符串,返回给前台 {"success":"true","msg":"","d ...
- TF项目实战(基于SSD目标检测)——人脸检测1
SSD实战——人脸检测 Tensorflow 一 .人脸检测的困难: 1. 姿态问题 2.不同种族人, 3.光照 遮挡 带眼睛 4.视角不同 5. 不同尺度 二. 数据集介绍以及转化VOC: 1. F ...
- 洛谷P2880 [USACO07JAN]平衡的阵容Balanced Lineup 题解
题目链接: https://www.luogu.org/problemnew/show/P2880 分析: ST表实现即可,一个最大值数组和最小值数组同时维护 代码: #include<cstd ...
- c语言进阶12-线性表之顺序表
一. 线性表的定义 为什么要学习线性表呢? 因为我们日常生活中存在种数据关系,计算机程序是为了解决日常生活的数据关系,因此我们要学习线性表. 线性表是什么呢? 线性表是由n个元素组成的有限序列. 需 ...
- phpStudy集成环境apche+openssl配置本地https
OpenSSl windows环境搭建 网上各种文章都说需要下载多个工具,实际上只要一个程序就好,下载地址http://slproweb.com/products/Win32OpenSSL.html ...
- 名称空间(name space)
名称空间(name space) 函数编程中,有一个挥之不去的问题:变量名的定义. 我们知道,在相同的作用域内不能出现两个相同的变量名,否则前者被后者覆盖 我们还知道,局部变量的名字可以与全局变量的名 ...
- [转]PHP的类自动加载机制,spl_autoload_register使用介绍
转自 http://blog.csdn.net/hguisu/article/details/7463333: 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和requ ...
- session对象和cookie对象的区别
1.cookie数据存放在客户的浏览器上,session数据放在服务器上2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session3.ses ...
- javaweb入门--web是什么
WEB基本概念 首先明白web是什么,人们常说的web其实就是英文中页面的意思,准确来说是Internet主机供给外界访问的资源. 站在用户视角,也就是说,通过你浏览器(客户端)的地址栏输入资源(你要 ...
- 以太坊solidity智能合约-生成随机数
Solidity随机数生成 在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法.其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数. 对于solidity来 ...