我试图混淆我写的游戏。我把它简化为一个非常基本的项目来说明这个问题(这个项目可以在这里找到:https://github.com/dschneider/libgdx-proguard-test)。
您必须安装ant并在终端中运行make桌面来编译和混淆项目。在之后尝试运行模糊化的jar时会发生以下错误:
Exception in thread "main" java.lang.NoSuchMethodError: getPointer
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1894)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851)
at java.lang.Runtime.load0(Runtime.java:795)
at java.lang.System.load(System.java:1062)
at org.lwjgl.Sys$1.run(Sys.java:70)
at java.security.AccessController.doPrivileged(Native Method)
at org.lwjgl.Sys.b(Sys.java:66)
at org.lwjgl.Sys.c(Sys.java:95)
at org.lwjgl.Sys.<clinit>(Sys.java:112)
at org.lwjgl.openal.AL.<clinit>(AL.java:59)
at com.badlogic.gdx.backends.openal.OpenALAudio.<init>(OpenALAudio.java:70)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.<init>(LwjglApplication.java:82)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.<init>(LwjglApplication.java:64)
at com.libgdxproguard.test.Main.main(Main.java:14)我是不是遗漏了什么?当我告诉ProGuard不要混淆代码时,它会在之后工作。显然有些东西被混淆了什么不应该混淆,但我不知道如何解决这个错误。
发布于 2014-01-03 22:31:31
liblwjgl.so中的本机代码使用反射调用LWJGL库的Java代码。ProGuard不知道本机代码所做的任何事情,因此它可能会删除或重命名类、字段和方法,从而破坏反射。最简单的解决方案是告诉ProGuard保留所有它们的原始名称:
-keep class org.lwjgl.** { *; }GDX库中的libgdx.so也是如此,因此:
-keep class com.badlogic.** { *; }您可以通过更精确地确定需要保留哪些类、字段和方法来细化此配置。
https://stackoverflow.com/questions/20910593
复制相似问题