【问题标题】:Proguard returned with error code 1. After update from ADT 16 to 18Proguard 返回错误代码 1。从 ADT 16 更新到 18 后
【发布时间】:2012-06-11 12:43:10
【问题描述】:

我曾经让Proguard 4.6 完美地在 Eclipse 3.6.2 上导出签名的应用程序。

但是,一旦我将 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”,我显然没有。

知道是什么原因造成的以及如何解决这个问题吗?

【问题讨论】:

    标签: android adt proguard


    【解决方案1】:

    我通过从 OpenJDK 7 切换回 Sun JDK 6 解决了这个问题。

    更新:

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

    【讨论】:

    • +1 每次都对我有用。虽然没有人有更永久的解决方案?
    • 在导出时关闭自动构建对我有用。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      错误消息表明传递给 ProGuard 的输入 jar 已损坏。您可以在构建失败后轻松检查这一点。也许您的磁盘分区已满。

      【讨论】:

      • 我昨天已经发布了我的发现(以及针对我的特定案例的正确解决方案)。我的磁盘分区远未满。知道为什么 Proguard 不能使用已通过 WinMerge 修补的 proguard.cfg 吗?暂时 +1。
      • 据我所知,ProGuard 可以很好地处理 CR/LF。 libproj1.jar(来自 java 运行时类)的根本原因“ZLIB 输入流意外结束”强烈表明该 jar 已损坏。这很容易检查。 ProGuard 版本或合并的配置似乎是偶然的。
      【解决方案4】:

      这可能是因为自您上次测试项目以来文件已更改,因此项目可能未完全构建。在设备上清理并运行项目,然后尝试导出。

      【讨论】:

        【解决方案5】:

        通过注释 project.propterties 中的行来解决问题,即

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-01
          • 1970-01-01
          相关资源
          最近更新 更多