原文地址:http://www.cnblogs.com/stay/archive/2013/05/27/3102027.html
昨天在网上看了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="(.*)" android:name="UMENG_CHANNEL"" /> <substitution expression="android:value="${channel}" android:name="UMENG_CHANNEL"" /> <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>
下面我来做下解释
打开命令行: ant deploy
等把,apks都会出来的
p.s. 如果你有引入其他libary,如果它们没有build.xml给它们也生成一个,同3.a)