【问题标题】:Libgdx bulletwrapper app crashes when using proguardLibgdx bulletwrapper 应用程序在使用 proguard 时崩溃
【发布时间】:2016-12-12 10:12:42
【问题描述】:

当我尝试运行启用了 proguard 的发布 apk 时,我的 libgdx/bullet 应用程序崩溃并出现以下异常:

     Process: com.my.app, PID: 14042
     java.lang.NoSuchMethodError: no static method "Lcom/badlogic/gdx/physics/bullet/linearmath/LinearMathJNI;.SwigDirector_btIDebugDraw_getDefaultColors(Lcom/badlogic/gdx/physics/bullet/linearmath/btIDebugDraw;)J"
         at com.badlogic.gdx.physics.bullet.linearmath.LinearMathJNI.swig_module_init(Native Method)
         at com.badlogic.gdx.physics.bullet.linearmath.LinearMathJNI.<clinit>(Unknown Source)
         at com.badlogic.gdx.physics.bullet.linearmath.LinearMathJNI.btGetVersion(Native Method)
         at com.badlogic.gdx.physics.bullet.linearmath.a.a(Unknown Source)
         at com.badlogic.gdx.physics.bullet.a.a(Unknown Source)
         at com.my.app.i.<init>(Unknown Source)
         at com.my.app.h$1.a(Unknown Source)
         at com.badlogic.gdx.f.a.b.b.a(Unknown Source)
         at com.badlogic.gdx.f.a.b.a(Unknown Source)
         at com.badlogic.gdx.f.a.b.a(Unknown Source)
         at com.badlogic.gdx.f.a.a.a.a(Unknown Source)
         at com.badlogic.gdx.f.a.a.a$1.a(Unknown Source)
         at com.badlogic.gdx.f.a.b.c.a(Unknown Source)
         at com.badlogic.gdx.f.a.g.a(Unknown Source)
         at com.badlogic.gdx.f.a.h.b(Unknown Source)
         at com.badlogic.gdx.backends.android.i.onDrawFrame(Unknown Source)
         at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1548)
         at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1259)

我的应用是一款游戏,崩溃仅在游戏屏幕启动时发生,而不是在初始菜单屏幕中。这是我的proguard-project.txt 文件:

-verbose

-dontwarn android.support.**
-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication
-dontwarn com.badlogic.gdx.utils.GdxBuild
-dontwarn com.badlogic.gdx.physics.box2d.utils.Box2DBuild
-dontwarn com.badlogic.gdx.jnigen.BuildTarget*
-dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild
-dontwarn com.badlogic.gdx.jnigen.*

-keep class com.badlogic.gdx.controllers.android.AndroidControllers

-keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* {
   <init>(com.badlogic.gdx.Application, android.content.Context, java.lang.Object, com.badlogic.gdx.backends.android.AndroidApplicationConfiguration);
}

-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);
}

我该如何解决这个问题?我想我需要防止 proguard 混淆项目符号调用,但不知道该怎么做。

【问题讨论】:

    标签: java android libgdx bulletphysics bullet


    【解决方案1】:
    -keep class com.badlogic.** { *; }
    -keep enum com.badlogic.** { *; }
    

    来源:this gradle file

    我也不愿意有这么多-dontwarns。应用上述内容后,看看是否可以删除它们。只有-dontwarn 当您知道这确实不是问题并且已经用尽其他方法来修复警告时。

    【讨论】:

    • 谢谢,那行得通。 -dontwarns 存在于 libgdx 生成的初始文件中,不过我会尝试看看是否可以删除它们。
    • 这很公平
    • 非常奇怪的 libgdx 生成了文件,但省略了最重要的行。
    猜你喜欢
    • 2016-12-06
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多