LibGDX类无法创建(缺失无参构造):Google Play控制台问题求助
解决LibGDX在Google Play控制台的无参构造缺失错误
问题原因
你遇到的com.badlogic.gdx.scenes.scene2d.f是被ProGuard混淆后的类名,实际对应LibGDX scene2d包下的某个核心类(比如Actor、Group这类基础组件)。本地IntelliJ运行正常是因为debug模式未开启混淆,而Google Play发布的是混淆后的release包,ProGuard删除或修改了这些类的无参构造,导致反射实例化失败。
当前你的ProGuard配置仅保护了scene2d.ui下的类,但scene2d核心包的类未被保留,而这些类大量依赖反射创建实例,必须保留无参构造和完整类结构。
修改后的ProGuard配置
-verbose -dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication # Required if using Gdx-Controllers extension -keep class com.badlogic.gdx.controllers.android.AndroidControllers # 保护scene2d核心包及UI包的类,保留无参构造和内部枚举 -keep class com.badlogic.gdx.scenes.scene2d.**{ **[] $VALUES; <init>(); # 强制保留无参构造 *; } -keep class com.your.game.data.**{ **[] $VALUES; *; } # Required if using Box2D extension -keepclassmembers class com.badlogic.gdx.physics.box2d.World { boolean contactFilter(long, long); void beginContact(long); void endContact(long); void preSolve(long, long); void postSolve(long, long); boolean reportFixture(long); float reportRayFixture(long, float, float, float, float, float); }
关键修改说明
- 把原有的
com.badlogic.gdx.scenes.scene2d.ui.**替换为com.badlogic.gdx.scenes.scene2d.**,覆盖整个scene2d包的类 - 添加
<init>();规则,强制ProGuard保留这些类的无参构造,避免反射失败
内容的提问来源于stack exchange,提问作者Ajax12Ajax
相关产品推荐
相关产品推荐

