1.Ant 安装:android
ant的安装比较简单,下载以后将其解压到某个目录而后配置环境变量(新建ANT_HOME环境变量,值为ant所在的目录,而后将ANT_HOME/bin添加到path中)git
2.对已存在的Android项目提供Ant支持正则表达式
1)没引用第三方类库,在项目根目录下输入:
android update project --name test -p ./express
2)若是项目只是引用了第三方jar包,只要将jar包放在libs文件夹下就ok了,ant会在编译打包过程当中会自动将第三方jar加进去的。
3)当咱们的android 项目参考了其余library项目,首先要在library的根目录下输入:
android update lib-project -p ./windows
而后在工程的根目录下输入
android update project -p . -s --target android-14app
其中-s:subprojectseclipse
3.编译打包项目:svn
1)测试包测试
ant debug : 生成一个测试版apk,默认使用 debug key 进行签名,生成的apk(your_project_name-debug.apk)在bin目录下。ui
2)未签名包
ant release : 生成一个未签名和未aligned的apk包,生成的apk(your_project_name-release-unsigned.apk和your_project_name-release-unaligned.apk)在bin目录下
3)签名包
在项目的根目录下建一个ant.properties文件,输入以下内容,其中keystore密码和alias密码能够不指定(防泄漏),那么在命令执行的过程当中会要求你输入。
#keystore的路径,必须使用正斜杠
key.store=test.keystore
#keystore的密码
#key.store.password=*****
#别名
key.alias=test
#alias密码
#key.alias.password=******
在项目根目录下运行 ant release 命令就会帮你生成一个通过签名和aligned的apk,生成的apk(your_project_name-release.apk)在bin目录下
4)渠道包
实现批量循环打包须要一个相似于for循环的功能,在Ant的核心包里没有相关的For循环的Task,即不支持for循环,可是ant支持第三方扩展包,以支持更多的其余功能。
因而咱们要下载相应的支持for循环的扩展包。可使用开源的Ant-contrib包。下载地址:http://antcontrib.sourceforge.net/ 。下载后的解压获得的jar(ant-contrib-1.0b3.jar或者其余版本)文件放到ant的lib目录。
(1)首先在ant.properties文件中增长属性 market_channels (渠道列表,以逗号分割),version(应用程序版本名)
#渠道市场列表
market_channels=360,wandoujia,baidu
#版本号
version=1.5.1
(2)增长custom_rules.xml文件到项目根目录或者将<project></project>中的代码添加到build.xml中
<?xml version="1.0" encoding="UTF-8"?>
<project name="custom_rules" >
<!-- 渠道包打包脚本 ant deploy-->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
<classpath>
<pathelement location="lib/ant-contrib-1.0b3.jar"/>
</classpath>
</taskdef>
<target name="deploy">
<foreach target="modify_manifest" list="${market_channels}" param="channel" delimiter=",">
</foreach>
</target>
<target name="modify_manifest">
<replaceregexp flags="g" byline="false">
<!-- 匹配的内容是 android:value="*****" android:name="UMENG_CHANNEL" -->
<regexp pattern='android:value="(.*)" android:name="UMENG_CHANNEL"' />
<!-- 匹配以后将其替换为 android:value="渠道名" android:name="UMENG_CHANNEL" -->
<substitution expression='android:value="${channel}" android:name="UMENG_CHANNEL"' />
<!-- 正则表达式须要匹配的文件为AndroidManifest.xml -->
<fileset dir="" includes="AndroidManifest.xml" />
</replaceregexp>
<property name="out.release.file" location="${out.absolute.dir}/${ant.project.name}_${channel}.apk" />
<!--包 -->
<antcall target="release" />
<!--输出渠道包到bin/out目录下 -->
<copy tofile="${out.absolute.dir}/out/${ant.project.name}v${version}-${channel}.apk" file="bin/${ant.project.name}-release.apk"/>
</target>
</project>
在项目根目录下运行 ant deploy 命令就会帮你各个渠道的签名包了
,在bin目录的out目录下。
4.过程当中的报错
1)
D:\Program Files\android-sdk-windows\tools\ant\build.xml:1147: Keystore was tampered with, or password was incorrect:Password verification failed
D:\Program Files\android-sdk-windows\tools\ant\build.xml:1147: Signing key test not found
test.keystore中有错误,路径或者是别名不对
2)
这是因为library没有支持ant自动编译
3)
[aapt] invalid resource directory name: D:\work\appcompat_v7\bin\res crunch
缘由分析
透过错误信息咱们能够了解到,错误的缘由是在编译目录 bin/res 目录中产生了一个叫crunch 的目录,而根据 android 规范这是不容许的,因此就出现了这个错误。
解决办法有以下三个
将 eclipse 的自动编译先去掉勾选(crunch 是ecliplse 生成的),而后在执行ant打包。
修改 androidsdk/tools/ant/build.xml 中 aapt.ignore.assets 的值参照
<property name="aapt.ignore.assets" value="<dir>crunch:!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" />
在配置好ant 的执行环境后 cd 到源码目录 而后执行 ant release