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目录

2、配置以下环境变量

* 我的电脑->属性->高级->环境变量
* 系统变量新建ANT_HOME,变量值为D:\Ant
* 在path变量下追加以下值,%ANT_HOME%\bin;

3、打开CMD窗口,输入ant build,如果能够看到下面的两句话,说明你得ANT环境已经配置好了。

C:\Users\ZhuWenWu>ant build
Buildfile: build.xml does not exist!
Build failed

4、ANT要支持循环打包需要安装扩展包ant-contrib,将之前解压得到的ant-contrib-1.0b3.jar文件复制到你ANT目录下得lib文件夹下。如:D:\Ant\lib

做完以上4步,ANT多渠道打包环境就基本配置好了,接下来就是真正的要来处理循环打包了。

三、多渠道打包

总共需要编辑4个文件,分别为build.xml、local.properties、customrules.xml、ant.properties. 同时准备好自己的签名文件:androidkey.keystore。

1、编辑local.properties文件内容,主要是配置SDK路径及项目路径

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.

# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.

#SDK的路径地址
sdk.dir=E:\\Android\\android-studio\\sdk  
#项目路径地址
project.dir=F:\\Android\\sourceCode\\Test

2、编辑ant.properties,主要是配置ANT打包的数据

#项目包名
application.package=com.ecloud.test  
#项目名称
ant.project.name=test  
#项目编码,这里需要注意自己工程的编码格式,需要保证编码格式一致
java.encoding=utf-8   

#编译中间文件生成目录
out.absolute.dir=F:/Test/compile  
#最终APK生成文件目录
gos.path=F:/Test/test-code1-20140523  

#签名文件全路径
key.store=F:/Test/Test/android_key.keystore 
#签名文件密码
key.store.password=111111  
#别名,这里要注意如果你签名文件的别名为中文,需要和我这个一样转成16进制,不然签名的时候会报错,转码可以用【UltraEdit工具】(自行百度下载)来做。
key.alias=\u5BB9\u6613\u901B  
#别名密码
key.alias.password=111111  

#软件版本号
app_version=1.0.0
#需要打包的渠道名,注意‘,’分格
market_channels=Gfan,3G,360,AndMarket,AnZi

3、编辑custom_rules.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
        <classpath>
        <!--注意这里要和你拷贝的那个JAR文件相同-->
            <pathelement location="lib/ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>

    <target name="deploy" >
        <foreach
            delimiter=","
            list="${market_channels}"
            param="channel"
            target="modify_manifest" >
        </foreach>
    </target>

    <target name="modify_manifest" >
       <replaceregexp flags="g" byline="false">  
        <regexp pattern="android:value=&quot;(.*)&quot; android:name=&quot;UMENG_CHANNEL&quot;" />  
            <substitution expression="android:value=&quot;{channel}&quot; android:name=&quot;UMENG_CHANNEL&quot;" />  
           <fileset
                dir=""
                includes="AndroidManifest.xml" />
        </replaceregexp>
        <property
            name="out.final.file"
            location="${apk.dir}/${ant.project.name}_${channel}.apk" />
        <antcall target="clean" />
        <antcall target="debug" />
    </target>
</project>

4、编辑最终的build.xml文件,这个是才是循环打包的重点

<?xml version="1.0" encoding="UTF-8"?> <!-- 项目名称test,可用全局替换为当前项目名称 -->
<project
    name="test"
    default="deploy" > <!-- The local.properties file is created and updated by the ‘android‘ tool.
     It contains the path to the SDK. It should *NOT* be checked into
     Version Control Systems. -->

<property file="local.properties" /> <!-- The ant.properties file can be created by you. It is only edited by the
     ‘android‘ tool to add properties to it.
     This is the place to change some Ant specific build properties.
     Here are some properties you may want to change/update:

     source.dir
         The name of the source directory. Default is ‘src‘.
     out.dir
         The name of the output directory. Default is ‘bin‘.

     For other overridable properties, look at the beginning of the rules
     files in the SDK, at tools/ant/build.xml

     Properties related to the SDK location or the project target should
     be updated using the ‘android‘ tool with the ‘update‘ action.

     This file is an integral part of the build system for your
     application and should be checked into Version Control Systems. -->

<property file="ant.properties" />

<property
    name="manifest.file"
    value="AndroidManifest.xml" >
</property>

<property
    name="bin.dir"
    value="bin" >
</property>

<property
    name="absolute-out"
    value="${project.dir}/${bin.dir}" >
</property>

<property
    name="absolute-file-manifest-out"
    value="${absolute-out}/${manifest.file}" >
</property>

<property
    name="absolute-file-manifest-src"
    value="${project.dir}/${manifest.file}" >
</property> <!-- The project.properties file is created and updated by the ‘android‘
     tool, as well as ADT.

     This contains project specific properties such as project target, and library
     dependencies. Lower level build properties are stored in ant.properties
     (or in .classpath for Eclipse projects).

     This file is an integral part of the build system for your
     application and should be checked into Version Control Systems. -->

<loadproperties srcFile="project.properties" />

<fail
    message="sdk.dir is missing. Make sure to generate local.properties using &apos;android update project&apos; or to inject it through an env var"
    unless="sdk.dir" /> <!-- extension targets. Uncomment the ones where you want to do custom work
 in between standard targets -->
<!-- <target name="-pre-build">
</target>
<target name="-pre-compile">
</target>

<target name="-post-compile">
</target> -->
<!-- Import the actual build file.

     To customize existing targets, there are two options:
     - Customize only one target:
         - copy/paste the target into this file, *before* the
           <import> task.
         - customize it to your needs.
     - Customize the whole content of build.xml
         - copy/paste the content of the rules files (minus the top node)
           into this file, replacing the <import> task.
         - customize to your needs.

     ***********************
     ****** IMPORTANT ******
     ***********************
     In all cases you must update the value of version-tag below to read ‘custom‘ instead of an integer,
     in order to avoid having your file be overridden by tools such as "android update project" -->
<!-- version-tag: 1 -->

<taskdef resource="net/sf/antcontrib/antcontrib.properties" >
注意这里的JAR包路径,要修改成自己的
    <classpath>
        <pathelement location="D:/Ant/lib/ant-contrib-1.0b3.jar" />
    </classpath>
</taskdef>

<import file="${sdk.dir}/tools/ant/build.xml" />

<target name="deploy" >

    <foreach
        delimiter=","
        list="${market_channels}"
        param="channel"
        target="modify_manifest" >
    </foreach>
</target>
这里就是修改渠道号的代码,我的渠道值设置的是SETTINGUMENGCHANNELCHANNELIDVALUES你可以替换成你自己的
    <target name="modify_manifest" > <!-- <copy file="${absolute-file-manifest-src}" tofile="${absolute-file-manifest-out}" overwrite="true"/>
    <replace file="${absolute-file-manifest-out}" token="SETTING_UMENG_CHANNEL_CHANNELID_VALUES" value="${channel}" encoding="UTF8"/> -->

    <replaceregexp
        encoding="utf-8"
        file="AndroidManifest.xml"
        match="SETTING_UMENG_CHANNEL_CHANNELID_VALUES"
        replace="${channel}" /> <!-- <replaceregexp
        byline="false"
        flags="g" >

        <regexp pattern="android:name="UMENG_CHANNEL" android:value="(.*)" />

        <substitution expression="android:name="UMENG_CHANNEL" android:value="${channel}" />

        <fileset
            dir=""
            includes="AndroidManifest.xml" />

    </replaceregexp> -->
    <!-- <property  name="out.release.file" value="${out.absolute.dir}/${channel}.apk"/> -->

    <antcall target="release" />

    <copy tofile="${gos.path}/test_${channel}.apk" >

        <fileset
            dir="${out.absolute.dir}/"
            includes="test-release.apk" />
    </copy>

    <delete includeEmptyDirs="true" >

        <fileset
            dir="${out.absolute.dir}"
            includes="**/*" />
    </delete>
这里要将替换之后的渠道号值改成默认的值SETTINGUMENGCHANNELCHANNELIDVALUES,不然下一个打包时将不会替换渠道号的值
    <replaceregexp
        encoding="utf-8"
        file="AndroidManifest.xml"
        match="${channel}"
        replace="SETTING_UMENG_CHANNEL_CHANNELID_VALUES" />
    <echo message="===========================" />
</target>
</project>

5、把以上4个文件拷贝到项目根目录下,目录结构如下

test--
    --src
    --res
    --libs
    --local.properties
    --custom_rules.xml
    --ant.properties
    --build.xml

6、打开CMD,然后CD到项目根路径下,运行ant deploy即可。注意在运行之前要注意先clean一下项目,不然可能会报错误,切记!!!!

BUILD FAILED
F:\Test\Test\build.xml:113: The following error occurred while executing this line:
F:\Test\Test\build.xml:139: The following error occurred while executing this line:

7、如果你看到BUILD SUCCESS,那么恭喜你,多渠道打包编译成功了,去输出目录查看一下APK文件吧!

8、多渠道打包文件下载地址

文件下载地址

时间: 2024-09-29 10:01:38

Android ANT多渠道打包的相关文章

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

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

android Ant批打包学习(二)---生成有签名且混淆的apk包

本篇文章预期目标:                 生成有签名apk文件 详细步骤如下: 1  定义文件 两个文件 1.1  名字:local.properties 内容:SDK的路径(例如:sdk.dir=/Users/lincoln/Android/sdk) 1.2 名字:ant.properties 内容: source.dir=src out.dir=bin proguard.config=proguard.cfg   (添加混淆,必须保证proguard.cfg 文件存在) key.s

Android studio 使用心得(十)---android studio 多渠道打包(三)

关于使用android studio 如何打包  大家可以看这两篇文章 Android studio 使用心得(四)---android studio 多渠道打包 Android studio 使用心得(四)---android studio 多渠道打包(二) 真正的项目开发,当然是建议 Android studio 使用心得(四)---android studio 多渠道打包(二) 其实,android studio 对上面这种打包方式还有更简单的方法,就是使用as 里面自带的Terminal

Android studio 使用心得(四)—android studio 多渠道打包(二)

Android studio 使用心得(四)—android studio 多渠道打包 这篇文章讲了一种打包方式.是直接在android studio 里面可视化操作,结合配置文件.我个人觉得严格上来讲是不完全正确的操作,因为配置文件里面的签名文件根本没有用到.但是,打出来的包绝对没问题的.这篇主要是介绍直接在dos命令里面使用gradle命令打包.两行命令,简单gradle clean ,gradle build. 1,配置文件还是和之前的一样,我才贴一次代码 ? 1 2 3 4 5 6 7

android Ant批打包学习(一)

1  Apache Ant安装.配置环境变量 1.1 下载地址: http://ant.apache.org/ 1.2 环境变量配置: 把解压缩后的文件夹中/bin的全路径添加到PATH中 2  命令行下创建Android新工程 即:   android create project -k com.ant.test -n antTest -a AntTestActivity -t 7 -p /Users/lincoln/Desktop/antTest 详解: android create pro

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

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

Android项目使用Ant多渠道打包(最新sdk)

参考文章: http://blog.csdn.net/liuhe688/article/details/6679879 http://www.eoeandroid.com/thread-323111-1-1.html http://yangguangfu.iteye.com/blog/723182 http://blog.csdn.net/cen616899547/article/details/22225947 一.Android使用Ant的打包流程 使用ANT来对应用打包,一般会经过以下几个

Android 新一代多渠道打包神器

关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫.企鹅电竞等项目的功能开发和技术优化.业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.ltlovezh.com . ApkChannelPackage是一种快速多渠道打包工具,同时支持基于V1和V2签名进行渠道打包.插件本身会自动检测Apk使用的签名方法,并选择合适的多渠道打包方式,对使用者来说完全透明. Github地址: https://github.com/ltlovezh/Apk

[Android Studio] Android studio 多渠道打包(超简洁版)

转载:http://xuyazhou.com/archives/461 http://relex.me/using-manifestplaceholders/ 最近一直用android studio 进行开发,在开发和发版的时候,遇到一个多渠道打包的问题,由于公司里是有七个渠道的包进行分发,由于每次去AndroidManifest.xml修改渠道的值,甚是麻烦... 最后去google了一番,发现有些方法,是在gradle文件里切换各种不同的AndroidManifest.xml文件,感觉这样也