记录一下这两天研究的东西-----在windows一键完成拉取svn上的安卓源代码并自动打包。

准备:ant打包工具,android sdk,以及ant拉取代码所依赖的一个jar包svnant.jar,放到ant目录下的lib目录下即可。

ant是apache的一个编译工具,我的版本是:apache-ant-1.9.4

sdk就不多介绍了。

我们安卓开发者通常情况下可能是在eclipse中完成打包,打一个包,打完了后万事大吉,但是有一些场景这种方式是不适合的,比如我要批量打包,或者有几十个甚至几百个项目要打包,这时显然无法再用原始的方式做了。

闲言少叙。我们下载到ant解压出来并把下面的bin目录设置成系统环境变量,这样我们在cmd窗口里就能使用ant了:

使用java拉取SVN仓库代码 svn拉取部分代码_ant

ant默认会找当前目录下的build.xml文件。如果要选择指定文件,可以使用ant -buildfile filename命令。

好。我们开始配置build.xml,build.xml主要做的事情就有两件:

1、从svn拉取代码;

2、编译拉取到的代码。

我们先看build.xml依赖的一个配置文件:build.properties

使用java拉取SVN仓库代码 svn拉取部分代码_Android_02

就是一些变量的配置。

应用信息,svn地址、svn用户名和密码,apk生成路径,最后我们在当前目录下的/product/apk目录下取包即可,最后一行是sdk的路径。

接下来看一下build.xml


<project name="test" basedir="." default="usage">

	<property name="rootdir"		  value="."/>

	<!-- svn拉取代码所需要的一些东西 -->
	<property name="svnant.lib" value="E:\work\ant\apache-ant-1.9.4\lib" />
   <property name="svnant.jar" value="${svnant.lib}/svnant.jar" />
   <property name="svnClientAdapter.jar" value="${svnant.lib}/svnClientAdapter.jar" />
   <property name="svnjavahl.jar" value="${svnant.lib}/svnjavahl.jar" />
   <property name="ant-lib-dir" value="E:\work\ant\apache-ant-1.9.4\lib"/>
<!-- 上面贴的那个文件 -->
   <property file="build.properties" />
<!-- 安卓项目里自带的一个配置文件,拉取代码后自动拿到,也可以先放到当前目录下  -->
   <loadproperties srcFile="project.properties" />
<!-- build运行的入口  -->
   <target name="usage">
	  <echo message="start build"/>
	  <antcall target="checkout" />
   </target>

	<property file="build.properties" /> 

	<path id="classpath">
		<fileset dir="${lib-dir}" includes="***.jar" />
	</path>
<!-- svn配置信息 -->
	<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" />
	<svnSetting id="svn.setting" svnkit="true" username="${svn.user}" password="${svn.password}"  javahl="false" />
<!-- checkout代码 -->
	<target name="checkout">
		<svn refid="svn.setting">
			<export srcUrl="${urlRepos}" destPath="${rootdir}" force="true"/>
		</svn>
		<antcall target="prepare"/>
	</target>

	<fail
        message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
        unless="sdk.dir" />

    <import file="${sdk.dir}/tools/ant/build.xml" />
<!-- 准备编译,把项目的bin目录删除 -->
	<target name="prepare">
		<delete dir="${rootdir}/bin"/>
		<antcall target="deploy" />
   </target>

    <target name="deploy">
	<!-- 编译 -->
        <antcall target="release" />
<!-- 拷贝到目标目录下 -->
        <copy tofile="${gos.path}/MangoTravel_android.apk" >

            <fileset
                dir="${out.absolute.dir}/"
                includes="MangoTravel-release.apk" />
        </copy>
		<echo message="build finished"/>
    </target>
 
</project>



嗯,就是这么简单,可以配合一个bat文件使用,bat里就写三个字符ant,以后双击就可以了,也可以在cmd中运行ant。

如果需要打多渠道包,则需要下载另外一个依赖jar包,ant-contrib-1.0b3.jar,放到ant的lib目录下,然后再build.xml中用foreach标签循环执行name为deploy的target即可,注意拷贝的时候把名字改成跟渠道相关的名字,否则自己都不知道那个包对应哪个渠道。

基本上就是这样。有可能在编译的时候会出一些意想不到的错误,但是基本上可以通过错误信息搞定,问题不大。比如我开始的时候就是混编的时候出错,后面发现是proguard版本太低,换一下后就搞定了。