【问题标题】:Issue adding BaseGameUtils to libgdx project将 BaseGameUtils 添加到 libgdx 项目的问题
【发布时间】:2015-09-11 20:59:52
【问题描述】:

UPD:我通过改变 GameHelper 构造函数的用法解决了这个问题

gameHelper = new GameHelper(this, GameHelper.CLIENT_ALL);

gameHelper = new GameHelper(this, GameHelper.CLIENT_GAMES);

但我不知道为什么它有帮助。因此,如果有人向我解释,我会很高兴)

我在将 baseGameUtils 添加到我的 libGDX 项目时遇到问题。 Gradle 链接工作正常,但是当我运行游戏时,apk 构建失败。 Gradle 控制台消息:

Executing tasks: [:android:assembleDebug]  

Configuration on demand is an incubating feature.
:android:preBuild UP-TO-DATE  
:android:preDebugBuild UP-TO-DATE  
:android:checkDebugManifest  
:android:preReleaseBuild UP-TO-DATE  
:core:compileJava UP-TO-DATE  
:core:processResources UP-TO-DATE  
:core:classes UP-TO-DATE  
:core:jar UP-TO-DATE  
:libraries:BaseGameUtils:compileLint  
:libraries:BaseGameUtils:copyReleaseLint UP-TO-DATE  
:libraries:BaseGameUtils:preBuild UP-TO-DATE  
:libraries:BaseGameUtils:preReleaseBuild UP-TO-DATE  
:libraries:BaseGameUtils:checkReleaseManifest
:libraries:BaseGameUtils:preDebugAndroidTestBuild UP-TO-DATE
:libraries:BaseGameUtils:preDebugBuild UP-TO-DATE
:libraries:BaseGameUtils:preDebugUnitTestBuild UP-TO-DATE
:libraries:BaseGameUtils:preReleaseUnitTestBuild UP-TO-DATE
:libraries:BaseGameUtils:prepareComAndroidSupportAppcompatV72000Library UP-TO-DATE
:libraries:BaseGameUtils:prepareComAndroidSupportSupportV42100Library UP-TO-DATE
:libraries:BaseGameUtils:prepareComGoogleAndroidGmsPlayServices6587Library UP-TO-DATE
:libraries:BaseGameUtils:prepareReleaseDependencies
:libraries:BaseGameUtils:compileReleaseAidl UP-TO-DATE
:libraries:BaseGameUtils:compileReleaseRenderscript UP-TO-DATE
:libraries:BaseGameUtils:generateReleaseBuildConfig UP-TO-DATE
:libraries:BaseGameUtils:generateReleaseAssets UP-TO-DATE
:libraries:BaseGameUtils:mergeReleaseAssets UP-TO-DATE
:libraries:BaseGameUtils:generateReleaseResValues UP-TO-DATE
:libraries:BaseGameUtils:generateReleaseResources UP-TO-DATE
:libraries:BaseGameUtils:mergeReleaseResources UP-TO-DATE
:libraries:BaseGameUtils:processReleaseManifest UP-TO-DATE
:libraries:BaseGameUtils:processReleaseResources UP-TO-DATE
:libraries:BaseGameUtils:generateReleaseSources UP-TO-DATE
:libraries:BaseGameUtils:processReleaseJavaRes UP-TO-DATE
:libraries:BaseGameUtils:compileReleaseJava UP-TO-DATE
:libraries:BaseGameUtils:extractReleaseAnnotations UP-TO-DATE
:libraries:BaseGameUtils:mergeReleaseProguardFiles UP-TO-DATE
:libraries:BaseGameUtils:packageReleaseJar UP-TO-DATE
:libraries:BaseGameUtils:compileReleaseNdk UP-TO-DATE
:libraries:BaseGameUtils:packageReleaseJniLibs UP-TO-DATE
:libraries:BaseGameUtils:packageReleaseLocalJar UP-TO-DATE
:libraries:BaseGameUtils:packageReleaseRenderscript UP-TO-DATE
:libraries:BaseGameUtils:packageReleaseResources UP-TO-DATE
:libraries:BaseGameUtils:bundleRelease UP-TO-DATE
:android:prepareComAndroidSupportAppcompatV72000Library UP-TO-DATE
:android:prepareComAndroidSupportSupportV42100Library UP-TO-DATE
:android:prepareComGoogleAndroidGmsPlayServices6587Library UP-TO-DATE
:android:prepareTestLibrariesBaseGameUtils10Library UP-TO-DATE
:android:prepareDebugDependencies
:android:compileDebugAidl UP-TO-DATE
:android:compileDebugRenderscript UP-TO-DATE  
:android:generateDebugBuildConfig UP-TO-DATE  
:android:generateDebugAssets UP-TO-DATE  
:android:mergeDebugAssets UP-TO-DATE  
:android:generateDebugResValues UP-TO-DATE  
:android:generateDebugResources UP-TO-DATE  
:android:mergeDebugResources UP-TO-DATE  
:android:processDebugManifest UP-TO-DATE  
:android:processDebugResources UP-TO-DATE  
:android:generateDebugSources UP-TO-DATE  
:android:processDebugJavaRes UP-TO-DATE  
:android:compileDebugJava  
:android:compileDebugNdk UP-TO-DATE  
:android:compileDebugSources  
:android:preDexDebug  
:android:dexDebug  
AGPBI: {"kind":"SIMPLE","text":"UNEXPECTED TOP-LEVEL EXCEPTION:","position":{},"original":"UNEXPECTED TOP-LEVEL EXCEPTION:"}
AGPBI: {"kind":"SIMPLE","text":"java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536","position":{},"original":"java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:501)","position":{},"original":"\tat com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:501)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:282)","position":{},"original":"\tat com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:282)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:490)","position":{},"original":"\tat com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:490)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167)","position":{},"original":"\tat com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:188)","position":{},"original":"\tat com.android.dx.merge.DexMerger.merge(DexMerger.java:188)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)","position":{},"original":"\tat com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)","position":{},"original":"\tat com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.run(Main.java:230)","position":{},"original":"\tat com.android.dx.command.dexer.Main.run(Main.java:230)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.dexer.Main.main(Main.java:199)","position":{},"original":"\tat com.android.dx.command.dexer.Main.main(Main.java:199)"}
AGPBI: {"kind":"SIMPLE","text":"\tat com.android.dx.command.Main.main(Main.java:103)","position":{},"original":"\tat com.android.dx.command.Main.main(Main.java:103)"}


FAILED

FAILURE: Build failed with an exception.

   What went wrong:
Execution failed for task ':android:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\Java\jdk1.8.0_51\bin\java.exe'' finished with non-zero exit value 2

   Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

我发现,如果我在 BaseGameUtils 的 build.gradle 中评论 com.android.support:appcompat-v7 库的编译,则游戏工作正常,但当我尝试从游戏登录 google-play 时出现崩溃。这可能是我的代码中的错误,但是从 BaseGameUtils 中排除依赖 appcompat-v7 是不对的。我应该怎么做才能用它来构建我的游戏?

android {
    buildToolsVersion "22.0.1"
    compileSdkVersion 22
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }

        instrumentTest.setRoot('tests')
    }
}
// called every time gradle gets executed, takes the native dependencies of
// the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK.
task copyAndroidNatives() {
    file("libs/armeabi/").mkdirs();
    file("libs/armeabi-v7a/").mkdirs();
    file("libs/x86/").mkdirs();

    configurations.natives.files.each { jar ->
        def outputDir = null
        if (jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")
        if (jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi")
        if (jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86")
        if (outputDir != null) {
            copy {
                from zipTree(jar)
                into outputDir
                include "*.so"
            }
        }
    }
}
task run(type: Exec) {
    def path
    def localProperties = project.file("../local.properties")
    if (localProperties.exists()) {
        Properties properties = new Properties()
        localProperties.withInputStream { instr ->
            properties.load(instr)
        }
        def sdkDir = properties.getProperty('sdk.dir')
        if (sdkDir) {
            path = sdkDir
        } else {
            path = "$System.env.ANDROID_HOME"
        }
    } else {
        path = "$System.env.ANDROID_HOME"
    }

    def adb = path + "/platform-tools/adb"
    commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.mygdx.game.android/com.mygdx.game.android.AndroidLauncher'
}
// sets up the Android Eclipse project, using the old Ant based build.
eclipse {
    // need to specify Java source sets explicitely, SpringSource Gradle Eclipse plugin
    // ignores any nodes added in classpath.file.withXml
    sourceSets {
        main {
            java.srcDirs "src", 'gen'
        }
    }

    jdt {
        sourceCompatibility = 1.6
        targetCompatibility = 1.6
    }

    classpath {
        plusConfigurations += [project.configurations.compile]
        containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES'
    }

    project {
        name = appName + "-android"
        natures 'com.android.ide.eclipse.adt.AndroidNature'
        buildCommands.clear();
        buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder"
        buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder"
        buildCommand "org.eclipse.jdt.core.javabuilder"
        buildCommand "com.android.ide.eclipse.adt.ApkBuilder"
    }
}
// sets up the Android Idea project, using the old Ant based build.
idea {
    module {
        sourceDirs += file("src");
        scopes = [COMPILE: [plus: [project.configurations.compile]]]

        iml {
            withXml {
                def node = it.asNode()
                def builder = NodeBuilder.newInstance();
                builder.current = node;
                builder.component(name: "FacetManager") {
                    facet(type: "android", name: "Android") {
                        configuration {
                            option(name: "UPDATE_PROPERTY_FILES", value: "true")
                        }
                    }
                }
            }
        }
    }
}
dependencies {
    compile project(':BaseGameUtils')
}

这是登录尝试失败时 logcat 显示的内容:

09-12 01:26:21.084 15670-15670/ru.zuko.game.android D/GameHelper: GameHelper: beginUserInitiatedSignIn: 重置尝试次数。
09-12 01:26:21.084 15670-15670/ru.zuko.game.android D/GameHelper: GameHelper: 启动用户启动的登录流程。
09-12 01:26:21.084 15670-15670/ru.zuko.game.android D/GameHelper: GameHelper: beginUserInitiatedSignIn: 开始新的登录流程。
09-12 01:26:21.084 15670-15670/ru.zuko.game.android D/GameHelper: GameHelper: 开始连接。
09-12 01:26:21.184 15670-15670/ru.zuko.game.android D/AndroidRuntime: 关闭虚拟机 09-12 01:26:21.184 15670-15670/ru.zuko.game.android W/dalvikvm:threadid=1:线程退出未捕获异常(组=0xb0cfcb20)
09-12 01:26:21.184 15670-15670/ru.zuko.game.android E/AndroidRuntime: 致命异常: main
进程:ru.zuko.game.android,PID:15670
java.lang.IllegalStateException:发生了致命的开发人员错误。查看日志以获取更多信息。
在 com.google.android.gms.internal.jl$h.b(未知来源)
在 com.google.android.gms.internal.jl$h.g(未知来源)
在 com.google.android.gms.internal.jl$b.hy(未知来源)
在 com.google.android.gms.internal.jl$a.handleMessage(未知来源)
在 android.os.Handler.dispatchMessage(Handler.java:102)
在 android.os.Looper.loop(Looper.java:136)
在 android.app.ActivityThread.main(ActivityThread.java:5017)
在 java.lang.reflect.Method.invokeNative(Native Method)
在 java.lang.reflect.Method.invoke(Method.java:515)
在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
在 dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

    标签: java android libgdx google-play google-play-services


    【解决方案1】:

    我不知道您是如何将 BaseGameUtils 添加到您的项目中的,但添加它的最佳方法是从 BaseGameUtils 复制粘贴整个包到您的 game-android 项目。您可以从您自己的项目中引用您的 Helper 类。[GameHelper, GameHelperUtils] 无需为 2 个 java 文件添加不同的项目作为依赖项。您也可以根据需要删除无用的活动代码。

    还可以在 gradle 依赖项中使用播放服务,而不是添加为库,以防万一您还没有这样做。

    【讨论】:

    • 感谢您的回答。也许你是对的,因为我被强迫从我的 gradle.build android 中排除播放服务,因为它已经包含在 BaseGameUtils 的 gradle.build 中。但是谷歌教程说只包含BaseGameUtils的一部分是不对的。我会尽量按照你的方式去做。
    • 这没有帮助,当我只包含 src 文件时,我得到了同样的错误
    • 这是一个你应该怎么做的例子。 github.com/piotr-j/Super-Flying-Gentlemen
    猜你喜欢
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多