在Eclipse下的android项目,构建工具使用的是ant,而在Android Studio下的android项目,构建工具选择的是gradle,由于我在手的项目是Eclipse项目,所以,研究了一下ant。。
常见的,一个应用打包时,需要针对不同应用市场做数据统计,而应用市场又比较多,一个一个针对性的打包又比较麻烦,那么就有人想到在编译打包之前,改变特定文件的特定代码,是的打包后的apk携带的key值与代码里的不一样,也有很多对应的多渠道打包的第三方插件,例如蓝贝壳儿,360什么的,但是,毕竟是第三方,自己用起来怎么也不放心,于是就有了下文。。
首先要知道,Android SDK提供了打包所需要的Ant,但是,是一个阉割的,那么我们要纯的,纯洁的,,就要到官网上自己下载了(http://ant.apache.org/bindownload.cgi) ,安装到自己的电脑,配置好环境变量(我的叫ANT_HOME),在path中添加上
%ANT_HOME%/bin;%ANT_HOME%/lib;
还需要一个渠道jar,百度ant-contrib就好了,把它放在ant的lib文件夹下,环境就算搞定了。。
这时候去小黑框试试ant命令能不能用呀~~
如果一切没问题,那么进入到项目的目录下,按住shift+鼠标右键,打开小黑框,输入
android update project -n (project name) -p .
括号和括号里的换成你的项目名称,这样就可以在你的项目里面生成一个build.xml文件了,打开看看,里面大概是下面的样子(注释已经删除,实在太多)
<?xml version="1.0" encoding="UTF-8"?>
<project
name="android"
default="help" >
<property file="local.properties" />
<property file="ant.properties" />
<property environment="env" />
<condition
property="sdk.dir"
value="${env.ANDROID_HOME}" >
<isset property="env.ANDROID_HOME" />
</condition>
<loadproperties srcFile="project.properties" />
<fail
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
unless="sdk.dir" />
<import
file="custom_rules.xml"
optional="true" />
<import file="${sdk.dir}/tools/ant/build.xml" />
</project>
可以看到,里面的
property
标签引入了外部文件,但是这两个外部XML文件并不在项目中,所以要手动创建,创建完之后,他们分别是干嘛的,可以百度,一大堆呢
总之,ant.properties里面配置的向下面
apk.dir=./apk
,可以配置一些打包使用到的签名文件信息,例如文件名,密码什么的,也可以配置一些需要的字段,打包时候从这里面取,取得方式是
${apk.dir}
在一个文件是
local.properties
l里面配置了你的SDK路径,,像这样
sdk.dir=D:\Users\Sdk
还可以看到
import
标签引入了两个文件,其中一个是SDK的build.xml文件,另一个是一个叫
custom_rules.xml
的文件,这个也需要自己创建,里面就是写一些编译时候的规则,当然,可以直接讲规则写在build.xml文件中,但是那样做会是的build.xml文件太冗余了,不还维护,所以放在外面,通过导入的方式比较好。。
然后就可以写规则了,怎么写?上代码你看看就会了。。
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >
<!-- 引用ant-contlib这个扩展包,声明一下 -->
<taskdef resource="net/sf/antcontrib/antcontrib.properties" >
<classpath>
<pathelement location="${ant.ANT_HOME}/lib/ant-contrib-1.0b3.jar" />
</classpath>
</taskdef>
<!-- 定义一个时间变量,打完包后跟名字一起命名apk -->
<tstamp>
<format
pattern="yyyyMMddhhmm"
property="pktime"
unit="hour" />
</tstamp>
<!-- 创建apk存放目录 -->
<mkdir dir="${apk.dir}" >
</mkdir>
<import file="buildfiles/1067.xml" optional="true" description="彩虹谷"/>
<!-- 打包生产环境命令就用这个 -->
<target name="all" >
<antcall target="1067" />
</target>
</project>
引入了一个1067.xml的文件,他这样:
<!-- +++++++++++++++++++++++++++++++++ 修改文件 +++++++++++++++++++++++++++++++ -->
<!-- 修改应用名 -->
<replaceregexp byline="false" encoding="UTF-8" flags="g" >
<regexp pattern="__APPNAME__" />
<substitution expression="哈哈哈哈哈" />
<fileset dir="res/values/" >
<include name="**/*.xml"></include>
</fileset>
</replaceregexp>
<!-- 修改应用图标 -->
<delete file="res/drawable-hdpi/ic_launcher.png"/>
<copy tofile="res/drawable-hdpi/ic_launcher.png" file="saas_hdpi/1067.png"/>
<!-- +++++++++++++++++++++++++++++++++ 打包 +++++++++++++++++++++++++++++++ -->
<property
name="out.final.file"
location="${apk.dir}/哈哈哈哈哈_${pktime}.apk" />
<antcall target="clean" />
<antcall target="release" />
${pktime}
就是上面定义的时间戳喽,,,是在不爱写太多字,能说话就好了。。。
完事之后,在小黑框使用ant命令执行
target
对应的name就好了,一个target可以使用好几个antcall。。。这样就可以一次打包好多应用了。。
网友评论