PolygonShape Native Method не найден с использованием нового проекта libgdx gradle

У меня есть проект LibGDX в студии Android, который использует gradle. Он работал хорошо до сегодняшнего утра, но из-за изменений в LibGDX теперь расширение box2d работает неправильно.

Я думаю, что уже сделал правильный импорт:

  • build.gradle(корень проекта)
project(":core") {
    apply plugin: "java"


    dependencies {
        compile "com.badlogicgames.gdx:gdx:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-box2d:$gdxVersion"
        compile fileTree (dir:'../libs', include:['*.jar'])
    }
}


project(":desktop") {
    apply plugin: "java"

    dependencies {
        compile project(":core")
        compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
        compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
        compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
        compile "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-desktop"
        compile fileTree (dir:'../libs', include:['*.jar'])
    }
}

(остальная часть build.gradle опущена для простоты)

Однако, когда я пытаюсь использовать PolygonShape, я получаю следующую ошибку:

Исключение в потоке "Приложение LWJGL" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.UnsatisfiedLinkError: com.badlogic.gdx.physics.box2d.PolygonShape.newPolygonShape() J at com.badlogic.gdx.backends.lwjgl.LwjglApplication $1.run(LwjglApplication.java:120) Вызвано: java.lang.UnsatisfiedLinkError: com.badlogic.gdx.physics.box2d.PolygonShape.newPolygonShape() J at com.badlogic.gdx.physics.box2d.PolygonShape.newPolygonShape(Native Метод) при com.badlogic.gdx.physics.box2d.PolygonShape. (PolygonShape.java:29)   в com.marclabsoftware.app.utilities.BodyEditorLoader. (BodyEditorLoader.java:34)   в com.marclabsoftware.app.utilities.Utilities.init(Utilities.java:81)   в com.marclabsoftware.app.App.create(App.java:50) в com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)   в com.badlogic.gdx.backends.lwjgl.LwjglApplication $1.run(LwjglApplication.java:114)

Есть ли способ исправить эту ошибку? Спасибо за любой ответ

Ответ 1

Проблема заключается в том, что вы пытаетесь загрузить PolygonShapes до того, как загрузилась собственная библиотека для Box2D. Как объясняется здесь, родные библиотеки Box2D загружаются в статический инициализатор класса World.

Я не уверен, является ли это предполагаемым поведением, но похоже, что крайний регистр был упущен при реорганизации кода Box2D в расширение.

Вы можете обойти это, создав World или загрузив собственную библиотеку Box2D, прежде чем загружать свои полигоны/тела/что угодно.

Я не совсем уверен, как загружать собственные библиотеки, но простой new World(args) должен отлично работать.