1

私は現在 Android ゲームに取り組んでおり、マルチプレイヤーを実装したいと考えています。だから私はKryonetを使いたかった:

  • ライブラリをダウンロードしました ( https://github.com/EsotericSoftware/kryonet/releases )
  • コアモジュールに libs フォルダーを作成しました
  • kryonet-2.21-all.jar をそれにコピーしました
  • build.gradleにモジュールとして追加しました:

    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

cmd などで /gradlew clean を試しましたが、何も役に立ちませんでした。これで数時間立ち往生しているヒントを教えてください..ありがとう!

4

2 に答える 2

2

解決策を見つけました。私は間違ったアプローチをしていました。Kryonet を libgdx - Android プロジェクトに追加する方法:

  • ルート 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

これで誰かを助けることができれば幸いです!

于 2015-07-18T14:25:09.200 に答える
2

以下を必ず追加してください。

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

project(":android")

デスクトッププロジェクトだけでなく、build.gradleファイルにも

于 2015-07-18T13:46:09.287 に答える