首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ProGuard混淆- java.lang.NoSuchMethodError: getPointer

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

Stack Overflow用户
提问于 2014-01-03 18:44:09
回答 1查看 1.4K关注 0票数 3

我试图混淆我写的游戏。我把它简化为一个非常基本的项目来说明这个问题(这个项目可以在这里找到:https://github.com/dschneider/libgdx-proguard-test)。

您必须安装ant并在终端中运行make桌面来编译和混淆项目。在之后尝试运行模糊化的jar时会发生以下错误:

代码语言:javascript
复制
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不要混淆代码时,它会在之后工作。显然有些东西被混淆了什么不应该混淆,但我不知道如何解决这个错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-03 22:31:31

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

代码语言:javascript
复制
-keep class org.lwjgl.** { *; }

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

代码语言:javascript
复制
-keep class com.badlogic.** { *; }

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20910593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档