gpt4 book ai didi

java - ProGuard 混淆 - java.lang.NoSuchMethodError : getPointer

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:44 25 4
gpt4 key购买 nike

我正在尝试混淆我编写的游戏。我将其精简为一个非常基本的项目来说明问题(可以在此处找到该项目:https://github.com/dschneider/libgdx-proguard-test)。

您必须安装ant 并在终端中运行ma​​ke desktop 来编译和混淆项目。之后尝试运行混淆后的 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 不要混淆代码时,它会在之后起作用。显然有些东西被混淆了不应该被混淆的东西,但我不确定如何解决这个错误。

最佳答案

liblwjgl.so 中的 native 代码使用反射回调 LWJGL 库的 Java 代码。 ProGuard 不知道 native 代码所做的任何事情,因此它可能会删除或重命名类、字段和方法,这会破坏反射。最简单的解决方案是告诉 ProGuard 使用它们的原始名称保留所有这些:

-keep class org.lwjgl.** { *; }

GDX 库中的 libgdx.so 也是如此,所以:

-keep class com.badlogic.** { *; }

您可以通过更准确地确定需要保留哪些类、字段和方法来改进此配置。

关于java - ProGuard 混淆 - java.lang.NoSuchMethodError : getPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20910593/

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