使用 [java/lang/String] 的 Proguard 警告

Proguard warning with [java/lang/String]

我遇到了混淆器问题。我在混淆器中有一些规则,其中之一是:

-keep class org.jmrtd.** { *; }
-dontwarn org.jmrtd.**

但我在构建时收到此警告

Unexpected error while performing partial evaluation:
  Class       = [org/jmrtd/MRTDFileSystem]
  Method      = [readBinary(II)[B]
  Exception   = [java.lang.IllegalArgumentException] (Can't find common super class of [java/lang/String] (with 2 known super classes) and [org/jmrtd/MRTDFileSystem$MRTDFileInfo] (with 1 known super classes))
Unexpected error while preverifying:
  Class       = [org/jmrtd/MRTDFileSystem]
  Method      = [readBinary(II)[B]
  Exception   = [java.lang.IllegalArgumentException] (Can't find common super class of [java/lang/String] (with 2 known super classes) and [org/jmrtd/MRTDFileSystem$MRTDFileInfo] (with 1 known super classes))

有人可以帮助我吗? 谢谢。

看起来像是库 jar 的问题。您确定所有库都配置正确吗? MRTDFileInfoMRTDFileSystem 的内部 class,可能会在内部引用。

处理步骤如下:

Input Jar --> Strink --> Optimize --> Obfuscate --> Preverify --> output jar

根据您的错误跟踪,您在预验证步骤中遇到错误:预验证时出现意外错误

如果你想跳过这个错误,你可以简单地使用防止 Proguard 预验证:

-dontpreverify

它将跳过预验证,但我怀疑 jar 是否会 运行 正确

我建议您正确提供您的库 jar,以便 proguard 可以引用它们。

除了 -dontwarn 之外,您还可以使用 -ignorewarnings

希望这有助于调试问题。