gpt4 book ai didi

java - Proguard - 找不到常见的父类(super class)/java.lang.VerifyError

转载 作者:太空狗 更新时间:2023-10-29 22:57:00 26 4
gpt4 key购买 nike

我们正在开发桌面应用程序。使用以下配置标志在代码上运行 ProGuard(版本 5.3.3)时:

-dontoptimize
-allowaccessmodification
-dontusemixedcaseclassnames
-dontwarn

Proguard 给出以下错误:

Unexpected error while performing partial evaluation:
Class = [com/code/backend/e/b/b]
Method = [b(Ljava/lang/String;)Ljava/nio/file/Path;]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [com/google/common/collect/ImmutableList] (with 2 known super classes) and [com/google/common/collect/UnmodifiableIterator] (with 1 known super classes))
Unexpected error while preverifying:
Class = [com/code/backend/e/b/b]
Method = [b(Ljava/lang/String;)Ljava/nio/file/Path;]
Exception = [java.lang.IllegalArgumentException] (Can't find common super class of [com/google/common/collect/ImmutableList] (with 2 known super classes) and [com/google/common/collect/UnmodifiableIterator] (with 1 known super classes))


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task 'proguard'.
> Can't find common super class of [com/google/common/collect/ImmutableList] (with 2 known super classes) and [com/google/common/collect/UnmodifiableIterator] (with 1 known super classes)

如果将标志 -dontpreverify 添加到配置中,构建将成功。但是,当运行 jar 文件时,我们会收到以下错误:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.VerifyError: Expecting a stackmap frame at branch target 11
Exception Details:
Location:
com/code/code2/MainWindow.b(Lcom/code/code2/ClientAPIProtos$SoftwareStatus;)V @1: ifnull
Reason:
Expected stackmap frame at this location.
Bytecode:
0x0000000: 2bc6 000a 2ab4 00bc c700 04b1 2bb2 00a4
0x0000010: a500 0a2b b800 f599 0018 2ab4 00bc b601
0x0000020: 9299 0020 2ab4 00bc 03b6 0193 a700 152a
0x0000030: b400 bcb6 0192 9a00 0b2a b400 bc04 b601
0x0000040: 932b b800 f699 0012 1225 4db8 0138 4e2a
0x0000050: 04b5 00c8 a700 0f12 1e4d b801 3a4e 2a03
0x0000060: b500 c82a b400 bcb6 0191 3a04 1904 c600
0x0000070: 0c2c 1904 b601 799a 000b 2ab4 00bc 2cb6
0x0000080: 0195 2ab4 00bc b601 903a 0519 05c6 0009
0x0000090: 2d19 05a5 000b 2ab4 00bc 2db6 0194 b1

at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)

这可以通过使用 JVM 标志 -noverify 来避免。阅读线程:

Obfuscation causes VerifyError: Expecting a stackmap frame

如果可能,我们希望避免这些“无验证”标志。

注意:即使添加也会出现构建错误

-dontobfuscate
-dontshrink

最佳答案

您正在指定选项 -dontwarn抑制有关未解析引用的警告。这可能会导致在处理代码时出现问题。 ProGuard 需要这些引用,例如在预验证步骤中。该错误确实表明输入不包含所有必要的依赖项:缺少 ImmutableListUnmodifiableIterator 的一些公共(public)父类(super class)或接口(interface)。对于桌面应用程序,您应该检查是否指定了包含所有必要类的 Java 运行时 jar:

-libraryjars <java.home>/lib/rt.jar

请参阅 ProGuard 手册 > 故障排除 > Warning: can't find superclass or interface

关于java - Proguard - 找不到常见的父类(super class)/java.lang.VerifyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45411710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com