关于Ant打包APK的记录

本文介绍如何使用Ant集成Svn和Xmltask工具,实现从Svn检出项目并更新AndroidManifest.xml文件中的版本信息。

最近工作中需要用Ant对Android工程进行打包生成apk文件,工作完成之后对Ant又有一些新的认识,遂记录在这里。

一、Ant集成svnant

Ant有很多第三方工具,这些工具扩展了Ant的功能,使用起来也十分方便。工作中需要用Ant从SVN检出工程所以使用到svnant。

1、svnant下载地址

http://subclipse.tigris.org/svnant.html

目前最新的版本是1.3.1

2、Ant集成svnant

首先是引入svnant的lib目录下的jar包

<!-- 将svnant的jar包加入到环境变量  -->
<path id="svnant.classpath">
<fileset dir="${svnantlib.dir}"><!-- dir表示svnant的lib目录所在位置  -->
<include name="**/*.jar"/>
</fileset>
</path>
其中svnantlib.dir配置在build.properties文件当中,指向svnant的lib目录的位置。

然后引入svn task文件。

<!-- 引用svn task文件,使svn功能可以使用-->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath"/>
在svnant1.3.1版本,需要配置svn的Setting。

<!-- 设置svn属性  -->
<svnSetting id="svn.setting" svnkit="true" username="${svn.username}" password="${svn.password}"  javahl="false" />
其中svn.username、svn.password分别是svn账户和密码配置在build.properties文件当中。

环境配置完毕,就可以通过svnant对工程进行检出操作。

<!-- 检出代码-->
<target name="checkout">
<svn refid="svn.setting">  
         <checkout url="${svn.url}" revision="HEAD" destPath="${project-svn}"/><!-- 默认支持叠加检出 -->
</svn> 
</target>
使用svnant不仅能够检出工程,还能获得相应的svn信息,需要如下标签来获得检出工程的svn信息。

<info target="${project-svn}" /><!-- target表示要获得svn信息的目录,info标签表示svn信息  -->
通过上述过程,就能够从svn中检出项目, 并且获得对应项目的svn信息,比如其版本号,修改时间等等。

3、完整过程

<?xml version="1.0" encoding="utf-8"?>
<project name="svnant" basedir="." default="version-number">
<!-- 引入属性文件 -->
<property file="build.properties"/>
<!-- svn检出项目根目录 -->
<property name="project-svn" value="svnant" />


<!-- 将svnant的jar包加入到环境变量  -->
<path id="svnant.classpath">
<fileset dir="${svnantlib.dir}"><!-- dir表示svnant的lib目录所在位置  -->
<include name="**/*.jar"/>
</fileset>
</path>


<!-- 引用svn task文件,使svn功能可以使用-->
<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.classpath"/>


<!-- 设置svn属性  -->
<svnSetting id="svn.setting" svnkit="true" username="${svn.username}" password="${svn.password}"  javahl="false" />  


<!-- 检出代码-->
<target name="checkout">
<svn refid="svn.setting">  
          <checkout url="${svn.url}" revision="HEAD" destPath="${project-svn}"/><!-- 默认支持叠加检出 -->
  <info target="${project-svn}" /><!-- target表示要获得svn信息的目录,info标签表示svn信息  -->
        </svn> 
<echo message="checkout version is ${svn.info.lastRev} and the lastmodify is ${svn.info.lastDate}"/>
</target>


<!-- 获得指定目录SVN版本号  -->
<target name="version-number" depends="checkout">
<property name="svn-version" value="${svn.info.lastRev}" /><!-- 必须在检出工程之后才能得到信息  -->
<echo message="the svnversion is ${svn-version}"></echo>
</target>
</project>

4、build.properties属性文件

svn.url=svn地址
svn.username=用户名
svn.password=密码
svnantlib.dir=svnant的lib目录

5、svnant的doc

docdoc

svnant的doc,需要的时候可以做参考,这里主要用到checkout和info两个。



二、Ant集成xmltask

xmltask比Ant原生的replace具有更加强大的功能,使用xmltask能够对xml文件进行编辑,因为需要对清单文件进行编辑,所以使用到xmltask。

1、xmltask下载地址

http://sourceforge.net/projects/xmltask/

2、Ant集成xmltask

首先引入xmltask的jar包

<path id="xmltask.classpath">
	<fileset dir="${xmltasklib.dir}">
		<include name="**/*.jar"/>
	</fileset>
</path>  

然后定义一个xmltask

<taskdef name="xmltask" classpathref="xmltask.classpath" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>

然后就可以通过xmltask来操作XML文件,这里列出一些常用的操作

替换某个指定标签的属性的值


<replace path="//manifest/@android:versionCode" withText="xmltask_attr"/>
<!-- path采用XPath匹配 -->

xmltask采用的是XPath进行XML的匹配

向指定标签添加属性


<attr path="//manifest" attr="android:versionName" value="xmltask_name" />  

删除指定标签

<remove path="//manifest/application/activity[contains(@android:name, 'xml')]"/> 

向指定位置添加标签

<insert path="//manifest/application/activity" position="after">
<![CDATA[
		<activity>`
		</activity>
	]]>
</insert>
3、完整过程

<?xml version="1.0" encoding="utf-8"?>
<project name="xmltask" basedir="." default="xmltask">
	
	<!-- 引入属性文件 -->
	<property file="build.properties"/>

	<path id="xmltask.classpath">
		<fileset dir="${xmltasklib.dir}">
			<include name="**/*.jar"/>
		</fileset>
	</path>  

	<taskdef name="xmltask" classpathref="xmltask.classpath" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>

	<!-- xmltask操作xml  -->
	<target name="xmltask">	
		<xmltask source="AndroidManifest.xml" dest="AndroidManifest.xml" preserveType="true" encoding="UTF-8"> <!-- source表示要操作的xml,dest表示输出的目标xml -->
			<!-- 替换某个指定标签的属性的值 -->
			<replace path="//manifest/@android:versionCode" withText="xmltask_attr"/><!-- path采用XPath匹配 -->
			<!-- 向指定标签内添加属性 -->
			<attr path="//manifest" attr="android:versionName" value="xmltask_name" />  
			<!-- 删除指定标签:删除activity标签内android:name属性还有xml的activity的标签 -->
			<remove path="//manifest/application/activity[contains(@android:name, 'xml')]"/> 
			<!-- 向指定位置插入标签 -->
			<insert path="//manifest/application/activity" position="after">
			  <![CDATA[
				<activity>`
				</activity>
			  ]]>
			</insert>
		</xmltask>  
	</target>

</project>

4、build.properties属性文件

xmltasklib.dir=xmltaskjar包的位置

5、xmltask的doc

地址:http://www.oopsconsultancy.com/software/xmltask/index.html#examples



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值