我一直在尝试使用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)
如果这是您使用的唯一配置,则本机方法也会被混淆.因此,它们的名称将不再与本机库中的名称匹配,因此在尝试使用加载库时,您将看到类似的错误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)