如果添加 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 以检查 minSdkVersion
或 targetSdkVersion
。而且我不知道确切的原因,但如果targetSdkVersion
> 19,Games.API
将起作用。所以:
-
从
ANDROID_HOME/sdk/extras/google/google_play_services/libproject/google-play-services_lib
复制一份Google Play 服务到您项目的同一个文件夹(实际上是同一个硬盘分区)。
将 Google Play 服务和您的项目的 AndroidManifest.xml 文件也更改为 <uses-sdk android:targetSdkVersion="19"/>
如果异常继续显示或者您正在使用 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 会导致“应用程序崩溃”