简单的ant打包

转载 2015年11月19日 15:49:41

昨天在网上看了ant打包,网上写的乱七八糟,而且build.xml文件那么多东西,看的真心烦,花了两小时重新整理了下,改动的地方不大,步骤也简单,通俗易懂。

言归正传:

1.ant支持,要安装什么你懂得,不懂自己搜下,

a) 配置android和ant的环境变量

export ANDROID_HOME=/Users/Stay/Desktop/develop/android-sdk-mac_x86/
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
export PATH=${PATH}:${ANDROID_HOME}/tools
export ANT_HOME=/Users/Stay/Desktop/develop/ant/apache-ant-1.8.4
export PATH=${PATH}:${ANT_HOME}/bin

2.我用ant自带的ant loop,如果不支持的下载个ant-contrib-1.0b3.jar放sdk的tool/lib包下

3.生成一个简单的build.xml,本身sdk/tool/ant 下有个完整的build.xml,我们只要基于它创建一个简单的build.xml即可,不需要复制过来,这样你看的麻烦。

a) android update project -p xxx     (xxx为项目路径)

复制代码
mb-zhst:~ Stay$ android update project -p /Users/Stay/Documents/workspace/waterfall
Updated local.properties
No project name specified, using Activity name 'MainActivity'.
If you wish to change it, edit the first line of build.xml.
Added file /Users/Stay/Documents/workspace/waterfall/build.xml
Updated file /Users/Stay/Documents/workspace/waterfall/proguard-project.txt
It seems that there are sub-projects. If you want to update them
please use the --subprojects parameter.
复制代码

 现在看你的项目,根目录下自动生成了build.xml和ant.properties

其实这个时候你就已经可以ant debug或者ant release 进行打包了,只不过还没改渠道号而已

如果要用ant release,那么你的key的就要准备好

在ant.properties里对key进行声明

key.store=/Users/Stay/Desktop/xxx.keystore
key.store.password=xxx
key.alias=stay
key.alias.password=xxx

b) 打开build.xml看下

复制代码
<!--
        Import per project custom build rules if present at the root of the project.
        This is the place to put custom intermediary targets such as:
            -pre-build
            -pre-compile
            -post-compile (This is typically used for code obfuscation.
                           Compiled code location: ${out.classes.absolute.dir}
                           If this is not done in place, override ${out.dex.input.absolute.dir})
            -post-package
            -post-build
            -pre-clean
    -->
    <import file="custom_rules.xml" optional="true" />
复制代码

 里面import了一个custom_rules.xml,这个在自己project的根目录是没有的,如果你想在打包前做些额外的操作,比如对channel的修改,就自己创建一个custom_rules.xml在根目录,这样当你编译的时候会去执行custom_rules里的操作

下面是我自己的

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >

    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
        <classpath>
            <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}/XXX_${channel}.apk" />
        <antcall target="clean" />
        <antcall target="release" />
    </target>
</project>
复制代码

 下面我来做下解释

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >
<!--     声明ant loop ,这里直接用ant的循环功能,批处理什么的又要多写代码,而且我也不熟 -->
    <taskdef resource="net/sf/antcontrib/antcontrib.properties" >
        <classpath>
            <pathelement location="lib/ant-contrib-1.0b3.jar" />
        </classpath>
    </taskdef>
<!-- 这里相当于一个方法把,(表示ant不会,只能看懂= =) ,以后可以用命令行 ant deploy 来表示批量打包 -->
<!-- ${market_channels} 要在local.properties里声明,并用,来分隔你要打包的channel名 -->
<!-- 比如我的local.properties里是这样写的   market_channels=Google,Gfan,AnZhi,MuMayi -->
    <target name="deploy" >
        <foreach
            delimiter=","
            list="${market_channels}"
            param="channel"
            target="modify_manifest" >
        </foreach>
    </target>
<!-- 修改manifest.xml里的渠道名,如果你要改其他文件,举一反三把 -->
<!-- regexp pattern是正则匹配,这里双引号要用&quot;而不是\ -->
<!-- substitution expression 是你要替换的的channel名-->
<!-- 打包完毕后要把apk移动到一个指定的目录把,你可以在sdk/tools/ant/build.xml搜下out.final.file这个property在哪用到的-->
<!-- <property name="out.final.file" location="${apk.dir}/XXX_${channel}.apk" />  ${apk.dir}表示你要指定的apk目录 XXX表示你要定义apk名和${channel}渠道号-->
<!-- <antcall target="clean" /> <antcall target="release" /> release之前要调下clean,不然以后改的channel名不生效,你懂得-->
    <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}/XXX_${channel}.apk" />
        <antcall target="clean" />
        <antcall target="release" />
    </target>
</project>
复制代码
 ok,所有的配置都弄完了,如果还要改其他东西,举一反三把,额,有问题自己解决把,我不会ant,我只是根据自己的需求上网查的,你如果要问我命令啥的,我真心不会。

最后,打包命令

打开命令行: ant deploy

等把,apks都会出来的

p.s. 如果你有引入其他libary,如果它们没有build.xml给它们也生成一个,同3.a)


转自 http://www.cnblogs.com/stay/archive/2013/05/27/3102027.html

 

使用Ant打包Java程序

Ant是一个构建工具,它可以帮助我们将项目开发过程中需要完成的各种步骤组织起来,通过一个简易的方式来构建整个项目。 一些典型的任务是:编译Java源代码、运行java程序、拷贝文件或目录、将编译完成的...
  • Jay_1989
  • Jay_1989
  • 2016年12月12日 15:29
  • 1068

MyEclipse:ant打包部署web工程

在myeclipse下使用ant打包部署web工程:
  • tianlincao
  • tianlincao
  • 2012年03月07日 09:56
  • 2707

Ant 打包配置

以下是build.xml     name="ToyBattleField_91"     basedir="../ChannelActivity"     ...
  • ahong222
  • ahong222
  • 2016年08月15日 18:41
  • 460

关于Ant的中文文件名乱码问题的解决

Ant使用zip任务打包时,如果有中文文件名时,会出现乱码,google了一堆网页,原因是找到了,但解决起来有点麻烦,要加一个jar包才行。我随便试了一下在zip的标签里增加属性encoding='g...
  • ffychina
  • ffychina
  • 2011年02月24日 12:45
  • 1529

ant打包的一些小心得

一、打war包时出现的问题 1. Ant 默认 编译器 面对 Annotation中的编译错误 我解决的办法,是直接使用 Eclipse的JDT 编译器     a. 找到 jd...
  • leeking888
  • leeking888
  • 2013年07月01日 18:36
  • 3251

用Ant来打包

Eclipse 内置了 Ant 。 Ant 是一种类似于批处理程序的软件包,它主要繁琐的工作是编写和调试自动处理脚本(一个 XML 文件),但只要有了这个脚本,我们就可以一键完成所有的设定工作。 本节...
  • smildlzj
  • smildlzj
  • 2007年04月01日 22:24
  • 15559

ant打包web项目

摸索了好一阵子,终于把一个WEB项目打成了一个WAR包,其实原理很简单,就是编译所有CLASS的类,然后把它放到一个临时文件夹中。用WRA命令时,会有四个东西,WEB。XML,LIB下的包,WEBRO...
  • miraclestar
  • miraclestar
  • 2010年11月11日 14:15
  • 4581

[Ant自动打包]ant执行命令的详细参数和Ant自带的系统属性

转自:http://hi.baidu.com/yuanzhifeng/item/75d03d11e9b2010eb88a1a6d?qq-pf-to=pcqq.c2c ant学习笔记之...
  • simafeiyu
  • simafeiyu
  • 2014年02月24日 14:17
  • 791

Ant打包

一、单个打包 1.下载ant,并配置环境变量 http://ant.apache.org/ 2.添加环境变量, Android SDK目录下的tools文件夹 比如我的:/Users/Forrest/...
  • wo334499
  • wo334499
  • 2014年03月13日 16:48
  • 814

一个基于Maven项目Ant的构建模板

一般的我创建的项目都是基于Maven的,但是很多人也喜欢用Ant打包jar,或者war.我一般都会在项目中既包含Maven的pom.xml,也会有ant的build.xml 只要在控制台执行: ...
  • xiaole0313
  • xiaole0313
  • 2015年08月03日 13:00
  • 1708
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的ant打包
举报原因:
原因补充:

(最多只允许输入30个字)