2012-06-11 69 views
10

我曾经有Proguard 4.6完美地在Eclipse 3.6.2上导出已签名的应用程序。Proguard返回错误代码1.从ADT 16更新到18之后

但是,一旦我将我的ADT + SDK从16.0.0.v201112150204-238534更新为18.0.0.v201203301601-306762,我无法再导出已签名的应用程序(调试版本可以正常工作)。相反,我收到以下错误日志中的控制台:

Proguard returned with error code 1. See console 
java.io.IOException: Can't read [\\bta\wspc\LibProj1\bin\libproj1.jar] (Can't process class [com/bta/blib/proj1/BtClsProj1.class] (Unexpected end of ZLIB input stream)) 
    at proguard.InputReader.readInput(InputReader.java:230) 
    at proguard.InputReader.readInput(InputReader.java:200) 
    at proguard.InputReader.readInput(InputReader.java:178) 
    at proguard.InputReader.execute(InputReader.java:78) 
    at proguard.ProGuard.readInput(ProGuard.java:196) 
    at proguard.ProGuard.execute(ProGuard.java:78) 
    at proguard.ProGuard.main(ProGuard.java:492) 
Caused by: java.io.IOException: Can't process class [com/bta/blib/proj1/BtClsProj1.class] (Unexpected end of ZLIB input stream) 
    at proguard.io.ClassReader.read(ClassReader.java:112) 
    at proguard.io.FilteredDataEntryReader.read(FilteredDataEntryReader.java:87) 
    at proguard.io.JarReader.read(JarReader.java:65) 
    at proguard.io.DirectoryPump.readFiles(DirectoryPump.java:65) 
    at proguard.io.DirectoryPump.pumpDataEntries(DirectoryPump.java:53) 
    at proguard.InputReader.readInput(InputReader.java:226) 
    ... 6 more 
Caused by: java.lang.RuntimeException: Unexpected end of ZLIB input stream 
    at proguard.classfile.io.RuntimeDataInput.readInt(RuntimeDataInput.java:136) 
    at proguard.classfile.io.ProgramClassReader.visitProgramClass(ProgramClassReader.java:77) 
    at proguard.classfile.ProgramClass.accept(ProgramClass.java:346) 
    at proguard.io.ClassReader.read(ClassReader.java:91) 
    ... 11 more 

我搜索SO线索,但只有相关的线程我已经能够找到的有关Proguard 4.7 with Eclipse SDK 3.7.1具有一定的参考,以“三星SPEN SDK 1.5”,我显然没有。

任何想法可能导致这种情况,以及如何解决这个问题?

回答

11

通过更新Proguard到最新的4.8来解决问题。

UPDATE:虽然更新到ProGuard的4.8解决了这个问题,它重新发生在另一个项目,该项目是几乎相同的第一表现出的问题(它使用同一个库项目)的一个。知道整个环境是相同的,我不知道为什么会发生这种情况(以及为什么Proguard如此不一致)。大约两个小时后,我终于猜测:proguard.cfg文件不是通过Eclipse编辑的,而是通过WinMerge编辑的。只要我复制了工作项目中的(相同的!)proguard.cfg,问题就消失了。

显然,Proguard在CRLF和LF方面存在问题。

2

错误消息表明传递给ProGuard的输入罐已损坏。在失败的构建之后,您可以轻松地检查它。也许你的磁盘分区已满。

+0

我已经张贴昨天我发现(与我的具体情况正确的解决方案一起)。我的磁盘分区远未满。任何想法为什么Proguard不能使用已通过WinMerge修补的proguard.cfg? +1现在。 –

+2

据我所知,ProGuard处理CR/LF罚款。 libproj1.jar(来自java运行时类)的根本原因“ZLIB输入流的意外结束”强烈表明该jar已损坏。这很容易检查。 ProGuard版本或合并配置似乎是偶然的。 –

20

我解决它由OpenJDK 7的切换回太阳JDK 6

更新:

问题回来使用JDK 6 我目前的解决方案:关闭项目 - >导出时自动构建。

+6

+1每次都适合我。尽管没有人有更持久的解决方案? – 3c71

+2

导出时自动关闭生成为我工作。谢谢! –

0

发生这种情况可能是因为上次测试项目后文件已更改,因此项目可能无法完全构建。清理并运行设备上的项目,然后尝试导出。通过注释在project.propterties行解决

0

问题即

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 
相关问题