使用Ant进行apk多渠道打包

前言:

Ant 是什么?

详细介绍请看http://ant.apache.org/

总之一句话:Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。

准备工作:

android sdk中默认支持使用ant来执行编译动作。但是要想使用ant来进行编译,还需要ant的执行环境。

为了能顺利使用ant来编译,我们需要如下准备:

1,android sdk,最简单的是下载一个adt bundle即可;

2,ant包,下载链接:http://ant.apache.org/bindownload.cgi,将压缩包下载完解压到某个目录即可。

3,ant-contrib.jar,这个jar主要用来支持编译的批量操作,下载地址http://mirrors.ibiblio.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar,下完之后放到步骤2解压目录的lib目录。

参考:

关于android编译生成apk的流程,可以参照http://www.oschina.net/code/snippet_16_6782,

其实有个偷懒的方式,就是借用 android sdk的tools/ant/目录中build.xml文件内已定义好的动作,主要是用到"release"。

下面主要介绍一下基于已定义好的release,怎么修改实现自己的build.xml文件。

步骤:

首先介绍一下build.xml文件中变量的定义格式如下,后面会用到

1 <property name="key_sample" value="value_sample" />

1,对生成目录做必要的清除动作,起名为myClean,这里我删除了生成目录下的所有apk文件。

1     <target name="myClean">
2         <mkdir dir="${outputDir}"/>
3         <delete verbose="true">
4             <fileset dir="${outputDir}" includes="*.apk" />
5         </delete>
6     </target>

outputDir是我事先定义好的变量:

1 <property name="outputDir" value="../output"/>

2,加载渠道信息,并使用ant的 foreach功能实现批量打包;

1 <target name="myPackChannels">
2   <foreach target="myPackBuild" list="${build.channels}" param="build.channel" delimiter=",">
3   </foreach>
4 </target>

可以看到这里是从 ${build.channels} 中读取相关渠道信息,多渠道中间用,分隔;

build.channels=101,201,301

3,将当前的AndroidMenifest.xml复制到备份目录;

1 <target name="myBackupManifest">
2   <delete file="${build}/${manifest}" />
3   <copy file="${manifest}" tofile="${build}/${manifest}" overwrite="true"/>
4 </target>

4,修改当前的AndroidMenifest.xml里面的内容,比如channel值;

 1     <target name="myPrepareBuildinfo" depends="myLoadBuildInfo">
 2         <replaceregexp flags="g" byline="true" encoding="UTF-8">
 3             <regexp pattern=‘android:versionCode="(.*)"‘ />
 4             <substitution expression=‘android:versionCode="${buildVersionCode}"‘ />
 5             <fileset dir="" includes="${manifest}" />
 6         </replaceregexp>
 7         <replaceregexp flags="g" byline="true" encoding="UTF-8">
 8             <regexp pattern=‘android:versionName="(.*)"‘ />
 9             <substitution expression=‘android:versionName="${buildVersionName}"‘ />
10             <fileset dir="" includes="${manifest}" />
11         </replaceregexp>
12         <replaceregexp flags="g" byline="true" encoding="UTF-8">
13             <regexp pattern=‘android:value="@string/APP_CHANNEL"‘/>
14             <substitution expression=‘android:value="${build.channel}"‘/>
15             <fileset dir="" includes="${manifest}" />
16         </replaceregexp>
17     </target>

我这里执行了修改versionName,versionCode和APP_CHANNEL这三个值。

5,执行release动作;

6,针对4生成的unsigned apk 用自己的签名文件签名;

 1 <!-- 签名 -->
 2      <target name="mySign">
 3         <mkdir dir="${outputDir}"/>
 4         <java jar="${signjar}" fork="true" failonerror="true" maxmemory="128m">
 5              <arg value="-w"/>
 6              <arg value="${key_pem}"/>
 7              <arg value="${key_pk8}"/>
 8              <arg value="${binDir}/${build.name}-release-unsigned.apk"/>
 9              <arg value="${binDir}/${build.name}-release-signed.apk"/>
10          <classpath>
11            <pathelement location="${signjar}"/>
12          </classpath>
13         </java>
14
15         <property name="outName" value="${outputDir}/${build.name}-${buildVersionName}-${buildVersionCode}-${build.channel}-${build.timestamp}-${buildNumber}"/>
16
17
18         <zipalign-helper in.package="${binDir}/${build.name}-release-unsigned.apk"
19                         out.package="${outName}.apk" />
20         <copy file="${mapping}" tofile="${outName}-mapping.txt"  overwrite="true"/>
21     </target>

7,repeat  step3,4,5;(这就是动作2 foreach的执行)

8,恢复之前备份的AndroidMenifest.xml到当前目录;

1 <target name="myRestoreManifest">
2   <copy file="${build}/${manifest}" tofile="${manifest}" overwrite="true"/>
3   <delete file="${build}/${manifest}" />
4 </target>

最后,整理一下要执行的步骤:

1     <target name=".output" depends="myClean, myBackupManifest, myLoadBuildInfo, myPackChannels, myRestoreManifest,myUpdateBuilderNumber">
2     </target>

so,在你的build.xml所在的目录,执行ant .output 即可,大功告成!

时间: 2024-12-22 09:55:22

使用Ant进行apk多渠道打包的相关文章

Android开发之Jenkins+Gradle实现持续集成、apk多渠道打包

前言: 首先很高兴大家来阅读王某人这篇文章,我干肯定大部分公司的发版流程是这样的,android程序员小李打出各渠道包,发给运维小胡,小胡将个渠道包上传各大应用市场,就这样送审了... 我们反过来想一想,程序员小李的工作有意义吗,首先肯定耽误它手头的工作吧,对于公司来说程序员的时间就是金钱,还有如果哪一天程序员小李脑子发热了,忘记改debug参数了,忘记改versioncode值了,这些后果谁来承担呢? 不要怕,下面我们就来认识下今天得主人公,Jenkins+Gradle: Jenkins简介

Android 多渠道打包方案

常规Build 我们先来回顾一下通过Ant或者Gradle进行多渠道批量打包,通常是在AndroidManifest中配置: <meta-data android:name="CHANNEL" android:value="xxx" /> meta-data通过配置value来动态改变渠道名称,然后我们可以在代码中这样去获取Channel private String getChannelNameFromManifest(){ try { return

借腾讯开源 VasDolly,谈谈 Android 签名和多渠道打包的原理!

一.前言 Hi,大家好,我是承香墨影! 当我们需要发布一款 App 到应用市场的时候,一般需要我们针对不同的市场生产不同的渠道包,它们使用的是同一套代码,只是会包含一些各自的渠道信息,用于我们做数据分析. 前几天,企鹅电竞团队开源了自己的 Android Apk 多渠道打包工具:VasDolly,比美团的 Walle 更全面一些. 正好借这个机会,来讲解一下 Android 的不同版本的签名机制的差异. 二.Android 的签名 2.1 应用签名 通过对 Apk 进行签名,开发者可以证明对 A

Android自动化构建之Ant多渠道打包实践(上)

前言 Ant是历史比较悠久的一个自动化构建工具,Android开发者可以通过它来实现自动化构建,也可以实现多渠道打包,关于apk打包的方式一般有Ant.Python.Gradle三种,这三种打包方式都各自有优点和缺点,本篇博文先给大家介绍如何使用Ant来实现自动构建和多渠道发布. 开发环境 Window7 Ant jdk android sdk mac系统下所需要的运行环境也是类似的,我们都需要配置Ant.jdk.sdk的环境变量,我们可以看一下window下是环境变量配了些什么: ANT_HO

gradle打包android (实现外部导入签名文件、多渠道打包、导入ant脚本)

近期一直在做android自己主动打包,之前已经完毕了用纯命令行的形式打包.原生态ant脚本打包.和基于android的SDK的打包.而且实现了多渠道打包,后来同事推荐了gradle,网上的资料说gradle各种好,自己也感兴趣是实现一下.事实上一般来说因为android对eclipse的支持减弱,大部分的人都是用gradle与android studio融合,这样面的样例也会比較多,但笔者所在的项目还是在eclipse的比較多.因为开发者在移植过程中发现报错比較多所以一直没有全然移植(好吧,事

Eclipse下配置Ant脚本 自己主动打包带签名的Android apk

尽管eclipse非常少用了,可是在古老的项目上还是会用到.一个麻烦事是打带签名包的时候.非常不方便.下边纪录下配置ant,自己主动打包带签名apk的过程,作为备忘.(PC环境为MAC) 1,第一步得安ant,下载相应安装包,解压后配置环境变量: export ANT_HOME="/Users/yanzi/work/apache-ant-1.9.4" export PATH=${PATH}:${ANT_HOME}/bin 通过which ant检查是否成功安装. 2,在项目文件夹下执行

Android自己主动化构建之Ant多渠道打包实践(下)

前言 上一篇(Android自己主动化构建之Ant多渠道打包实践(上))已经介绍了Android的apk是怎样构建的,本篇博客继续Ant打包的实践过程. 集成友盟统计SDK 这里以友盟统计为例,对各个渠道进行统计.我们须要先集成它的SDK 配置权限 <!-- 权限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission&g

Android Ant 批量多渠道打包实例

Android Ant 批量多渠道打包实例 关于批量打包,无需多言,这是每个国内Android开发者必须面对的一个问题. 下面,我就以开源项目「知乎小报」为例,详细说明如何使用ANT实现批量打渠道包. 1 Ant 安装 下载ANT 请前往 http://ant.apache.org 下载. 配置环境变量 设置环境变量后,在命令行下测试ant命令,如果出现以下内容,则说明配置成功: cundongdeMacBook-Pro:~ cundong$ ant Buildfile: build.xml d

Android ANT多渠道打包

在没用AndroidStudio的Gradle构建项目之前,多渠道打包一般都是基于ANT构建,所以在此记录一下,以供查阅! 一.文件准备 1.首先要去官网下载ANT代码. ANT官网下载地址 2.下载ANT循环打包JAR包. ANT循环JAR包下载地址 网盘下载地址 3.解压得到其中的ant-contrib-1.0b3.jar文件待用. 做完以上3步,ANT多渠道打包所需要的软件就准备完毕了,接下来就是环境配置了. 二.环境配置 1.先将之前下载的ANT文件解压缩到任意文件路径,如D:\Ant目