最近项目中需要添加应用渠道,我使用的是友盟统计,对于不同渠道需要编译不同版本,对于开发者说编译一次,手动操作还是可以接受的,但是项目发布版本频率较高,而且渠道很多,这就是一个体力活,而且手动打包还比较容易出错,所以就想到了用脚本打包。

利用脚本打包的原理就是把项目中的配置文件给覆盖,然后再次编译的时候,就是你要的apk了。

对于eclipse中项目,可以使用ant来编译,android的sdk中自带一个ant的build.xml文件,所以直接使用就可以了,在使用之前需要配置一下。

首先定义一个ant的配置文件,放在eclipse的项目目录中。

ant.properites

out.path=./build/out
out.absolute.dir=./build/compile
out.config.path=./build_config # sdk的目录,注意是“/”不是“\”
sdk.dir=E:/tool/android-sdk_r22.2.1-windows/android-sdk-windows # 项目的package
application.package=com.example.test
# 项目名称
ant.project.name=test
java.encoding=utf-8 # 签名的信息
key.store=***
key.store.password=***
key.alias=***
key.alias.password=*** # 应用的版本,和渠道
app_version=1.0
channel=wandoujia

上面的是ant的配置文件,下面是项目中使用build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="test" default="deploy"> <property file="ant.properties" />
<loadproperties srcFile="project.properties" /> <import file="${sdk.dir}/tools/ant/build.xml" />
<tstamp prefix="time">
<format property="time" pattern="yyyyMMddHHmmss" />
</tstamp>
<target name="deploy"> <antcall target="release" /> <copy tofile="${out.path}/${ant.project.name}_${channel}_${time.time}.apk">
<fileset dir="${out.absolute.dir}/" includes="${ant.project.name}-release.apk" />
</copy> <delete includeEmptyDirs="true">
<fileset dir="${out.absolute.dir}" includes="**/*" />
</delete>
</target>
</project>

上面的xml定义大概意思就是,找到sdk中{sdk}/tools/ant/build.xml文件,然后编译,最后签名,然后拷贝到目标目录下面,同时重命名apk,apk还有编译时候的时间戳。

只要运行deploy的任务就可以完成编译。

上面的配置文件中的渠道只有豌豆荚一个,那么怎么使用多个渠道呢?开发人员很容易就想到了,我们可以顶一个渠道数组,然后遍历数组,分别编译打包。虽然耗时比较长但是不容易出错,相对于手动编译还是比较好的。

在实际项目中我问了下年长的同事,说ant中可以使用for循环不,但是需要添加额外的jar包(ant-contrib-1.0b3.jar)来支持,我就觉的比较麻烦,然后自己就写了一个python的脚步来自动替换ant的配置文件,这样我又多了几个文件。如果想了解ant的for标签使用可以百度一下,这里不多做介绍。其实我也不懂,

python_build.cfg

#market_channels
default
hiapk
baidu
360
tencent
nduo
91
wandoujia

上面配置文件里面是我要打包的渠道,每行一个渠道,#表示注释。

下面是python的脚步build.py。

configname = "python_build.cfg";
antconfigname = "ant.properties";
channels = []; def loadChannels():
global channels;
configfile = file(configname);
while True:
line = configfile.readline();
if len(line) == 0:
break;
line = line.strip();
if line.startswith('#'):
pass;
else:
channels.append(line); configfile.close(); def replaceChannel(channel):
input = open(antconfigname);
lines = input.readlines();
input.close(); output = open(antconfigname,"w");
for line in lines:
if not line:
break;
if line.startswith('channel='):
temp = 'channel='+channel;
output.write(temp);
else:
output.write(line); output.close(); #==============main begin =========================
import os; loadChannels(); for channel in channels:
replaceChannel(channel);
os.system("ant");
print ('channel '+channel+' is build success......');

python是一个比较流行的脚步,入手还是比较简单的,我也只是周末的时候,看了几个小时,敲了几次代码就写了上面的脚本,当然可能还有不足的地方,希望有大神看到不要喷我,我这边使用的是python2.7,使用前需要安装python才行。

上面分别定义了2个函数,=======下面的就是开始运行脚本,python里面是没有main的概念,同时还不支持{},百度来的,好像是发明这个脚本的人,希望强制使用缩进来控制代码块,对一个习惯了用ide来写代码的的人还是比较痛苦滴,。不过我再网上找到了一个比较好的python的ide,叫UliPad。有兴趣的童鞋可以去使用下。

首先是替换渠道名称,当首先需要读取配置文件,使用的是python中文件模块,每次读取一行,如果开始时“#”则认为是注释,不使用,否则加入到一个数组里面,最后遍历数组,每次执行的时候,都替换ant里面的channel一行,然后调用cmd命了,来执行ant。最后完成了渠道打包的功能。

使用cmd,进入到eclipse的项目目录下面,执行python build.py就可以了。

小弟也是开发android不久,写的很啰嗦,望各位看官见谅。



下面是一些截图。

Android脚本打包的更多相关文章

  1. 更便捷的Android多渠道打包方式

    本文先回顾了以往流行的多渠道打包方式,随后引入的mcxiaoke的packer-ng-plugin项目,介绍该项目在实际应用(配合友盟统计)中如何解决更方便的Android多渠道打包问题 多渠道打包方 ...

  2. 【转】android Apk打包过程概述_android是如何打包apk的

    最近看了老罗分析android资源管理和apk打包流程的博客,参考其他一些资料,做了一下整理,脱离繁琐的打包细节和数据结构,从整体上概述了apk打包的整个流程.   流程概述: 1.打包资源文件,生成 ...

  3. android Apk打包过程概述_android是如何打包apk的

    流程概述:1.打包资源文件,生成R.java文件2.处理aidl文件,生成相应java 文件3.编译工程源代码,生成相应class 文件4.转换所有class文件,生成classes.dex文件5.打 ...

  4. Android tips(八)-->Android Studio打包apk,aar,jar包

    文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java ...

  5. Ant自动化打多渠道包,Android批量打包提速

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

  6. 使用Jenkins进行Android自动打包,自定义版本号等信息【转】

    之前App在提交测试和最终部署的过程中App打包一直是由开发人员来完成的,由于项目比较大, 再加上Android打包本身就比较慢,所以每次打包还是很耗时的.并且按照严格的研发流程来讲,开发人员应该只负 ...

  7. [原] Android自动打包之命令行打包

    Android自动打包流程详细图: 总结为以下几个步骤: 1. 生成R文件 2. Java代码编译成class文件 3. class文件生成dex文件 4. 打包资源 5. 生成apk 6. 创建密匙 ...

  8. Android Studio打包apk,aar,jar包

    转载请标明出处:一片枫叶的专栏 文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独 ...

  9. eclipse 和 android studio 打包签名apk问题

    首先,我使用eclipse打包了一个签名apk 然后,我使用同一个签名文件在android studio 打包同一个项目 接下来,首先安装eclipse 打包的apk,然后安装android stud ...

随机推荐

  1. 南京大学发布无序列限制的DNA编辑新工具(转自生物通)

    编辑推荐: 内切酶经过改造可以成为强大的DNA编辑工具,比如ZFN.TALEN.风头正劲的CRISPR–Cas系统和充满争议的NgAgo技术.不过这些技术都是通过序列识别来实现靶向切割的,会受到序列偏 ...

  2. 6-查看centos中的用户和用户组

    转载自:http://www.cnblogs.com/ermao0423/p/9510636.html 查看centos中的用户和用户组 1.用户列表文件:/etc/passwd/ 2.用户组列表文件 ...

  3. python 类函数

    81定义: class 类名(object):# __init__(self, 参数列表):    # __init__叫构造函数,其作用:使用类实例对象时,自动调用_init_,起到对象进行初始化, ...

  4. Laravel 引入自定义类库或第三方类库

    强烈建议引入的类 都是含有命名空间的,这样使用起来就不会出现重名的情况.!!当然,没有命名空间也可以使用,就是类名字(非文件名)最好复杂一些.(重复也不要紧,程序会自己判断) laravel5.4中如 ...

  5. Zookeeper 源码(六)Leader-Follower-Observer

    Zookeeper 源码(六)Leader-Follower-Observer 上一节介绍了 Leader 选举的全过程,本节讲解一下 Leader-Follower-Observer 服务器的三种角 ...

  6. 移动直播app怎么做

    今年移动直播行业的兴起,诞生了一大批网红,甚至明星也开始直播了,因此不得不跟上时代的步伐,教你从零开始搭建一个完整的iOS直播app,希望能帮助到更多的人更快的了解直播. 了解直播 1 热门直播产品: ...

  7. 构建搞性能可扩展asp.net网站文摘

    第1章 原则与方法 网页加载的过程: 关注感知性能,减少阻塞调用,减少往返,在所有架构层次采用缓存,优化硬盘I/O 了解浏览器的工作方式,使用ajax,silverlight和纯javascript避 ...

  8. PHP(十)字符串

  9. 20169205 2016-2017-2 实验四 SQL注入实验

    20169205 2016-2017-2 实验四 SQL注入实验 实验介绍 SQL注入技术是利用web应用程序和数据库服务器之间的接口来篡改网站内容的攻击技术.通过把SQL命令插入到Web表单提交框. ...

  10. Spring全局异常处理

    最近学习Spring时,认识到Spring异常处理的强大.之前处理工程异常,代码中最常见的就是try-catch-finally,有时一个try,多个catch,覆盖了核心业务逻辑: 1 try{ 2 ...