最近使用项目进行Android的混淆处理,工程中加入了多个第三方的jar包,直接使用project.properties中的proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt进行混淆处理,打包APK的时候出现了proguard returned with error code 1.See console,上网查了一下出现这类问题的原因,主要介绍了三种方式,分别是Error: C:/Documents (系统找不到指定文件),java.lang.ArrayIndexOutOfBoundsException和jar文件路径找不到,针对这三种情况进行项目复查,均不存在上述问题,最后有的文章称可能是ProGuard版本太低造成的,于是去ProGuard官网下载点击打开链接最新的ProGuard,并配置proguard-project.txt相关参数解决问题,详细过程如下
首先,在ProGuard官网下载最新的ProGuard,解压文件将lib文件夹下的三个jar包覆盖到\sdk\tools\proguard\lib,重启ADT,在project.properties文件中设置混淆语句proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.tx。其次,配置proguard-project.txt,根据Log中的日志信息,在proguard-project.txt中去除相关项的混淆-dontwarn com.google.android.xx.**,重新打包APK即可实现混淆
下面整理一下上面叙述中说到的三个问题,文章引用自http://www.cnblogs.com/0616--ataozhijia/p/3730746.html
加入第三方jar包之后常出现的几个异常:
proguard returned with error code 1.See console
情况1:
Proguard returned with error code 1. See console
Error: C:/Documents (系统找不到指定文件)
后来发现是因为将整个工程放到了桌面上,而桌面的目录是C:/Documents and Settings/Administrator/桌面,在这里面有空格,而proguard进行发编译的时候是不允许有空格的
如果换了正确路径还不好用的话,直接删除proguard就好了
注意:SDK和程序路径最好不要有空格符
情况2:
Proguard returned with error code 1. See console
异常:
java.lang.ArrayIndexOutOfBoundsException
解决办法:将proguard.cfg中的"-dontpreverify"改成“-dontoptimize”
我把项目中生成的proguard文件夹(此时文件夹是空的)删掉,然后再重新运行项目,就OK 了。
情况3:
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read [[email protected]] (No such file or directory)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:230)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:200)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:178)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.execute(InputReader.java:100)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.readInput(ProGuard.java:195)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.execute(ProGuard.java:78)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.main(ProGuard.java:499)
抛出这样的异常的原因是第三方jar的引用路径不对,没有找到这个需要忽略混淆的jar包。