如果添加 Games.API,应用程序会崩溃

Posted

技术标签:

【中文标题】如果添加 Games.API,应用程序会崩溃【英文标题】:App crashes if Games.API is added 【发布时间】:2015-09-26 21:56:07 【问题描述】:

基本上,googleApiClient 能够连接。但是如果我将 Games.API 添加到 APIclient,则会发生一些未捕获的异常。我几乎到处搜索,但似乎没有人有这个问题。一旦我从 Builder 中删除 Games.API,它就会正常连接。 但我需要 Games.API 在我的游戏中包含排行榜。 请问有人可以帮我吗?

Logcat:

07-09 00:43:19.709  14636-14636/? W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418c49a8)
07-09 00:43:19.709  14636-14636/? W/dalvikvm﹕ threadid=1: uncaught exception occurred
07-09 00:43:19.709  14636-14636/? W/System.err﹕ java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at com.google.android.gms.common.internal.zzi$zza.zzc(Unknown Source)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at com.google.android.gms.common.internal.zzi$zza.zzr(Unknown Source)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at com.google.android.gms.common.internal.zzi$zzc.zznQ(Unknown Source)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at com.google.android.gms.common.internal.zzi$zzb.handleMessage(Unknown Source)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:107)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at android.os.Looper.loop(Looper.java:194)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5405)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:525)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:838)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
07-09 00:43:19.724  14636-14636/? W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
07-09 00:43:19.724  14636-14636/? W/dalvikvm﹕ threadid=1: calling UncaughtExceptionHandler
07-09 00:43:19.725  14636-14636/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
            at com.google.android.gms.common.internal.zzi$zza.zzc(Unknown Source)
            at com.google.android.gms.common.internal.zzi$zza.zzr(Unknown Source)
            at com.google.android.gms.common.internal.zzi$zzc.zznQ(Unknown Source)
            at com.google.android.gms.common.internal.zzi$zzb.handleMessage(Unknown Source)
            at android.os.Handler.dispatchMessage(Handler.java:107)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5405)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:838)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
            at dalvik.system.NativeStart.main(Native Method)

清单:

  <meta-data android:name="com.google.android.gms.games.APP_ID"
            android:value="480680880602" />
        <meta-data
            android:name="com.google.android.gms.appstate.APP_ID"
            android:value="480680880602" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

代码:

  mGoogleApiClient = new GoogleApiClient.Builder(this)
  .addApi(Drive.API)
  .addApi(Games.API)
  .addApi(AppStateManager.API)
  .addScope(AppStateManager.SCOPE_APP_STATE)
  .addScope(Games.SCOPE_GAMES)
  .addScope(Drive.SCOPE_FILE)
  .addConnectionCallbacks(this)
  .addOnConnectionFailedListener(this)
  .build();

 public void onConnected(Bundle connectionHint) 

        Toast.makeText(Homepage.this, "CONNECTED", Toast.LENGTH_SHORT).show();

        SharedPreferences load=getSharedPreferences("mysavegame", MODE_PRIVATE);
        int a=load.getInt("score", 0);

        if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) 
      //      Games.Leaderboards.submitScore(mGoogleApiClient, "CgkI2tPA1v4NEAIQAA", a);
        
        Toast.makeText(Homepage.this, "SCORE SUBMITTED", Toast.LENGTH_SHORT).show();
        // Connected to Google Play services!
        // The good stuff goes here.
    

游戏链接:https://play.google.com/store/apps/details?id=com.iitb.nihar.declarecardgame

【问题讨论】:

您可以考虑为 Games API 使用单独的 GoogleApiClient。 Google Play 游戏生命周期(用户从 Google Play 游戏登录和退出)可以(或应该,根据 Google:developers.google.com/games/services/checklist)在一定程度上独立于游戏交互的其余部分,因此将与生命周期分开其他 Google API。不能说它是否真的有助于您的异常,但它可能值得尝试,并且无论如何可能是一个很好的设计更改。 试过了,但还是徒劳。同样的问题仍然存在。 没有想法。发生错误时日志中是否还有其他可能相关的内容?您发布的内容看起来只是过滤到您的应用进程。 不知道你有没有进步,但是我遇到了这个,它可能会帮助你解决问题:developers.google.com/games/services/android/logging 您的部分问题是您无法将 app_id 硬编码到清单中。我找到了这个讨论,因为我得到了和你完全相同的错误。我有一个无效的 app_id,它导致了崩溃。没有正确定义 app_id 也会导致此崩溃。需要在 res/values 中定义。 【参考方案1】:

也许不是您的问题的完整解决方案,但问题的一部分肯定是您将 app_id 硬编码到清单中。那是行不通的。刚刚试了一下,我也遇到了同样的崩溃。

您需要使用“@string/app_id”来引用 res/values/something.xml 文件。

**如果您将如下所示的 app_id 值添加到 /res/values/strings.xml 文件中,这将起作用。

<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" />

这将不起作用

<meta-data android:name="com.google.android.gms.games.APP_ID" android:value="123456789" />

在 /res/values/strings.xml

<resources>
    <string name="app_id">123456789</string>
</resources>

即使你在 /res/values/file.xml 中放了一个 app_id,如果它不是一个有效的 app_id,你也会遇到同样的崩溃。

【讨论】:

你拯救了我的一天...:)【参考方案2】:

我有同样的问题。我使用 Eclipse 作为 IDE,Eclipse 将访问 AndroidManifest 以检查 minSdkVersiontargetSdkVersion。而且我不知道确切的原因,但如果targetSdkVersion > 19,Games.API 将起作用。所以:

    ANDROID_HOME/sdk/extras/google/google_play_services/libproject/google-play-services_lib 复制一份Google Play 服务到您项目的同一个文件夹(实际上是同一个硬盘分区)。 将 Google Play 服务和您的项目的 AndroidManifest.xml 文件也更改为 &lt;uses-sdk android:targetSdkVersion="19"/&gt;

如果异常继续显示或者您正在使用 Android Studio。您可以尝试将您设备上的 google play service sdk 和 goole play service 升级到最新版本(https://github.com/playgameservices/play-games-plugin-for-unity/issues/489)

【讨论】:

以上是关于如果添加 Games.API,应用程序会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 协程协程异常处理 ④ ( Android 协程中出现异常导致应用崩溃 | Android 协程中使用协程异常处理器捕获异常 | Android 全局异常处理器 )

将 Yandex 翻译器添加到 Fragment 会导致“应用程序崩溃”

在httpd.conf中添加另一个要监听的端口会导致Apache崩溃

取消选择 SwiftUI 列表中的项目会使应用程序崩溃

添加一个函数调用时应用程序幻象崩溃

UITextField(有时)在键入时使应用程序崩溃