2012-06-11 68 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 
相關問題