《建立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定时自动打包系统第二篇——自动上传文件的更多相关文章

  1. 建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期

    ​团队开发时,每天都需要输出一个apk包给其它部门的同事测试验证.打包几乎是每天必须完成的功课.如果用IDE来输出apk,那速度是非常慢的,如果还需要有不同渠道的apk包,那程序猿都要疯了.当然也有用 ...

  2. 建立apk定时自动打包系统第三篇——代码自动更新、APP自动打包系统

    我们的思路是每天下班后团队各成员在指定的时间(例如下午18:30)之前把各自的代码上传到SVN,然后服务器在指定的时间(例如下午18:30)更新代码.执行ant 打包命令.最后将apk包存放在指定目录 ...

  3. “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)

    “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构.登录窗口.以及主界面) 一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增 ...

  4. Autofac 组件、服务、自动装配 《第二篇》

    一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...

  5. “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第二篇(数据库结构、登录窗口、以及主界面)

    一.在上一篇文章中,主要说的就是把主框架搭建起来,并且Nhibernate能达到增删改查的地步.测试好之后再来看这篇文章,我的主框架相对来说简答一点,重点还是实现系统的功能,以及对Jquery-Eas ...

  6. Android窗口系统第二篇---Window的添加过程

    以前写过客户端Window的创建过程,大概是这样子的.我们一开始从Thread中的handleLaunchActivity方法开始分析,首先加载Activity的字节码文件,利用反射的方式创建一个Ac ...

  7. android apk 防止反编译技术第二篇-运行时修改字节码

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

  8. android apk 防止反编译技术第二篇-运行时修改Dalvik指令

    上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止a ...

  9. Python全栈开发记录_第二篇(文件操作及三级菜单栏增删改查)

    python3文件读写操作(本篇代码大约100行) f = open(xxx.txt, "r", encoding="utf-8") 不写“r”(只读)默认是只 ...

随机推荐

  1. mysql重启遇到的问题

    不知道是不是每次更新 MySQL 软件之后都需要执行数据库升级指令?在我进行过的几次软件升级之后,总会在 MySQL 的日志中见到 “[ERROR] Missing system table mysq ...

  2. 跟着大彬读源码 - Redis 6 - 对象和数据类型(下)

    继续撸我们的对象和数据类型. 上节我们一起认识了字符串和列表,接下来还有哈希.集合和有序集合. 1 哈希对象 哈希对象的可选编码分别是:ziplist 和 hashtable. 1.1 ziplist ...

  3. 如何优雅关闭 Spring Boot 应用

    ## 前言 随着线上应用逐步采用 SpringBoot 构建,SpringBoot应用实例越来多,当线上某个应用需要升级部署时,常常简单粗暴地使用 kill 命令,这种停止应用的方式会让应用将所有处理 ...

  4. mpvue的使用,包含axios、router的集成等完美结合小程序

    mpvue开发微信小程序框架的使用注意事项: 1.路由跳转,引用mpvue-router-patch 在main.js文件中引入控件:import MpvueRouterPatch from 'mpv ...

  5. @GetMapping、@PostMapping和@RequestMapping的区别

    @GetMapping 用于将Http Get 请求映射到特定处理程序方法的注释.具体来说就是:@GetMapping是一个作为快捷方式的组合注释 @RequestMapping(method = R ...

  6. Centos7 安装Homestead环境

    问题1, ==> homestead-7: Waiting for machine to boot. This may take a few minutes... homestead-7: SS ...

  7. 使用.csv文件

    引用自:https://blog.csdn.net/vision_tung/article/details/79845758 通用爬虫:https://blog.csdn.net/Vision_Tun ...

  8. 大数阶乘(c++实现)

    #include <iostream>using namespace std;#define N 1000int BigNumFactorial(int Num[], int n);voi ...

  9. Dubbo源码学习之-服务导出

    前言 忙的时候,会埋怨学习的时间太少,缺少个人的空间,于是会争分夺秒的工作.学习.而一旦繁忙的时候过去,有时间了之后,整个人又会不自觉的陷入一种懒散的状态中,时间也显得不那么重要了,随便就可以浪费掉几 ...

  10. C# 10分钟完成百度语音技术(语音识别与合成)——入门篇

    我们已经讲了人脸识别(入门+进阶).图片识别(入门).下面是链接: C# 10分钟完成百度人脸识别——入门篇 C# 30分钟完成百度人脸识别——进阶篇(文末附源码) C# 10分钟完成百度图片提取文字 ...