簡體   English   中英

Android Studio | Libgdx | 添加Kryonet庫 - NoClassDefFoundError

[英]Android Studio | Libgdx | Adding Kryonet Library - NoClassDefFoundError

我目前正在開發Android游戲並希望實現多人游戲。 所以我想使用Kryonet:

  • 我下載了這個庫( https://github.com/EsotericSoftware/kryonet/releases
  • 在我的核心模塊中創建了一個libs文件夾
  • 將kryonet-2.21-all.jar復制到其中
  • 並在build.gradle中將其添加為Module:

     dependencies { compile files('src/libs/kryonet-2.21-all.jar') } 

在Android Studio中它似乎工作,我可以訪問所有導入等,但在我的設備上運行應用程序時...它崩潰了

07-16 00:00:44.419  12176-12196/com.cookedapps.robotredemption.android E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 3363
Process: com.cookedapps.robotredemption.android, PID: 12176
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/esotericsoftware/kryonet/Server;
        at com.cookedapps.robotredemption.server.GameServer.<init>(GameServer.java:20)
        at com.cookedapps.robotredemption.states.Play.<init>(Play.java:73)
        at com.cookedapps.robotredemption.handlers.GameStateManager.getState(GameStateManager.java:39)
        at com.cookedapps.robotredemption.handlers.GameStateManager.pushState(GameStateManager.java:49)
        at com.cookedapps.robotredemption.handlers.GameStateManager.<init>(GameStateManager.java:21)
        at com.cookedapps.robotredemption.main.Game.create(Game.java:41)
        at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:241)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.esotericsoftware.kryonet.Server" on path: DexPathList[[zip file "/data/app/com.cookedapps.robotredemption.android-2/base.apk"],nativeLibraryDirectories=[/data/app/com.cookedapps.robotredemption.android-2/lib/arm, /vendor/lib, /system/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
        at com.cookedapps.robotredemption.server.GameServer.<init>(GameServer.java:20)
        at com.cookedapps.robotredemption.states.Play.<init>(Play.java:73)
        at com.cookedapps.robotredemption.handlers.GameStateManager.getState(GameStateManager.java:39)
        at com.cookedapps.robotredemption.handlers.GameStateManager.pushState(GameStateManager.java:49)
        at com.cookedapps.robotredemption.handlers.GameStateManager.<init>(GameStateManager.java:21)
        at com.cookedapps.robotredemption.main.Game.create(Game.java:41)
        at com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged(AndroidGraphics.java:241)
        at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1520)
        at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)
Suppressed: java.lang.ClassNotFoundException: com.esotericsoftware.kryonet.Server
        at java.lang.Class.classForName(Native Method)
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
        ... 10 more
 Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

我嘗試/ gradlew清潔cmd和其他東西,但沒有任何幫助。 請給我一個暗示,因為幾個小時后我就卡住了..謝謝!

確保添加:

dependencies {
 compile files('src/libs/kryonet-2.21-all.jar') 
}

project(":android")

在您的build.gradle文件中,而不僅僅是桌面項目

我找到了解決方案。 我做錯了。 如何將Kryonet添加到libgdx - Android項目:

  • 轉到root build.gradle
  • 轉到project(":core") - dependencies並添加:

compile "com.esotericsoftware:kryo:3.0.1" compile ("com.esotericsoftware:kryonet:2.22.0-RC1") { exclude module : 'kryo' }

  • 使用Gradle文件同步項目

重要的是添加Kryonet,排除Kryo並單獨添加Kryo。 像那樣你可以避免這個例外:

UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define

我希望我可以幫助這個人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM