如有转载,请声明出处:http://blog.csdn.net/zhongkejingwang/article/details/37914219
为什么要写这篇博客,因为我被这个东西折磨了两天,网上说的好多都有问题,最坑爹的就是版本不同导致的错误。下面分享一下我总结出来的快捷的ant打包方式以及遇到的一些问题和解决方法(在windows环境下)。
ant打包有什么好处?
在eclipse中当我们的android项目需要打包出来的时候,往往是手动打包,如果有签名文件则需要输密码,选择输出目录等等操作,很麻烦。打包一个apk还好,当需要打包多个apk的时候,比如发布应用时需要打包各个平台的渠道包,几十上百个渠道号,一旦有改动或者版本升级时需要重新打包的时候,手动打包就不是很好的方式了。这时候可以用ant自动打包。ant打包出来的apk和我们手动打包出来的是一样的,它只不过是自动执行已经写好的打包命令而已。OK,下面讲一下如何使用ant进行打包,待会儿我会演示我遇到的打包失败的情况和解决方式。第一次写博客,有点啰嗦......
配置ANDROID_HOME环境变量
ant打包
问题1
D:\Program Files\Android\android-sdk\tools\ant\build.xml:397: The Android Ant-based build system requires Ant 1.8.0 or later. Current version is 1.7.1
问题2
[dx] java.nio.BufferOverflowException
[dx] at java.nio.Buffer.nextPutIndex(Buffer.java:501)
[dx] at java.nio.HeapByteBuffer.putShort(HeapByteBuffer.java:296)
[dx] at com.android.dex.Dex$Section.writeShort(Dex.java:818)
[dx] at com.android.dex.Dex$Section.writeTypeList(Dex.java:870)
[dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:437)
[dx] at com.android.dx.merge.DexMerger$3.write(DexMerger.java:423)
[dx] at com.android.dx.merge.DexMerger$IdMerger.mergeUnsorted(DexMerger.java:317)
[dx] at com.android.dx.merge.DexMerger.mergeTypeLists(DexMerger.java:423)
[dx] at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:163)
[dx] at com.android.dx.merge.DexMerger.merge(DexMerger.java:187)
[dx] at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
[dx] at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:230)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:199)
[dx] at com.android.dx.command.Main.main(Main.java:103)
加入混淆和签名
<?xml version="1.0" encoding="UTF-8"?>
<project
name="MainActivity"
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>
#下面这句是自动生成的
sdk.dir=D:\\Program Files\\Android\\android-sdk
#数字签名文件
key.store=jingchen.keystore
#别名alias
key.alias=jingchen
#数字签名的密码
key.store.password=111111
#alias的密码
key.alias.password=111111
#这里设置混淆代码,在当前项目的proguard-project.txt中编写混淆规则
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt