记录一下这两天研究的东西-----在windows一键完成拉取svn上的安卓源代码并自动打包。
准备:ant打包工具,android sdk,以及ant拉取代码所依赖的一个jar包svnant.jar,放到ant目录下的lib目录下即可。
ant是apache的一个一个编译工具,我的版本是:apache-ant-1.9.4
sdk就不多介绍了。
我们安卓开发者通常情况下可能是在eclipse中完成打包,打一个包,打完了后万事大吉,但是又一些场景这种方式是不适合的,比如我要批量打包,或者有几十个甚至几百个项目要打包,这时显然无法再用原始的方式做了。
闲言少叙。我们下载到ant解压出来并把下面的bin目录设置成系统环境变量,这样我们在cmd窗口里就能使用ant了:
ant默认会找当前目录下的build.xml文件。如果要选择指定文件,可以使用ant -buildfile filename命令。
好。我们开始配置build.xml,build.xml主要做的事情就有两件:
1、从svn拉取代码;
2、编译拉取到的代码。
我们先看build.xml依赖的一个配置文件:build.properties
就是一些变量的配置。
应用信息,svn地址、svn用户名和密码,apk生成路径,最后我们在当前目录下的/product/apk目录下取包即可,最后一行是sdk的路径。
接下来看一下build.xml
<project name="test" basedir="." default="usage">default定义入口 <property name="rootdir" value="."/> <span style="white-space:pre"> </span><pre name="code" class="html"><span style="color:#ff0000;">svn拉取代码所需要的一些东西</span>
<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 file="build.properties" />上面贴的那个文件 <loadproperties srcFile="project.properties" />安卓项目里自带的一个配置文件,拉取代码后自动拿到,也可以先放到当前目录下 <target name="usage">build运行的入口 <echo message="start build"/> <antcall target="checkout"
/>拉取代码下来 </target><path id="classpath"><fileset dir="${lib-dir}" includes="***.jar" /></path>
<span style="white-space:pre"> </span>svn配置信息 <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" /> <svnSetting id="svn.setting" svnkit="true" username="${svn.user}" password="${svn.password}" javahl="false" /> <span style="white-space:pre"> </span> <target name="checkout"> <svn refid="svn.setting"> <export srcUrl="${urlRepos}" destPath="${rootdir}" force="true"/>配置svn地址用户名和密码 </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" /> <target name="prepare">准备编译,把bin目录删除,否则编译可能通不过。 <delete dir="${rootdir}/bin"/> <antcall target="deploy" />开始编译 </target> <target name="deploy"> <antcall target="release" />打release包,这个release target在安卓sdk目录中的tools/ant/build.xml目录下 <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版本太低,换一下后就搞定了。