Proguard - 错误:发生了JNI错误

SJ1*_*J19 2 java proguard

我一直在尝试使用ProGuard来混淆我的应用程序.我已经禁用了混淆的每个选项异常.装载机是我的主要课程.

下面的屏幕截图是我尝试运行模糊jar时的结果.混淆时也没有错误.

在此输入图像描述

我的配置

-injars 'C:\Users\Corsair\Desktop\obfuscate\Example.jar'
-outjars 'C:\Users\Corsair\Desktop\obfuscate\ExampleOut.jar'

-libraryjars 'C:\Program Files\Java\jre1.8.0_91\lib\rt.jar'

-dontskipnonpubliclibraryclassmembers
-dontshrink
-dontoptimize
-dontusemixedcaseclassnames
-dontpreverify
-dontnote
-dontwarn

-verbose

-keep class Loader
Run Code Online (Sandbox Code Playgroud)

T. *_*art 6

如果这是您使用的唯一配置,则本机方法也会被混淆.因此,它们的名称将不再与本机库中的名称匹配,因此在尝试使用加载库时,您将看到类似的错误System.loadLibrary.

您需要添加至少一个这样的规则:

-keepclasseswithmembernames,includedescriptorclasses class * {
    native <methods>;
}
Run Code Online (Sandbox Code Playgroud)

这将指示ProGuard将所有本机方法保留在它处理的任何类中.

编辑:

使其运行所需的其他规则:

  • 删除-dontpreverify,Java 7+需要预验证
  • 保持主要方法

这将保持主要方法:

-keep class Loader {
    public static void main(...);
}
Run Code Online (Sandbox Code Playgroud)