Android应用在使用BaseGameActivity时崩溃了。

11

有点难以描述。我想使用Google Play游戏服务来访问我的游戏的排行榜。 我尝试像这里所示的访问游戏API那样使用BaseGameActivity。

尝试了一些方法,做了一些搜索,但无法解决问题。当启动BaseGameActivity时,我的应用程序崩溃了。 日志错误显示:

03-10 17:44:54.071: E/AndroidRuntime(31435): FATAL EXCEPTION: main
03-10 17:44:54.071: E/AndroidRuntime(31435): java.lang.IllegalStateException: A
 fatal  developer error has occurred. Check the logs for further information.
03-10 17:44:54.071: E/AndroidRuntime(31435):    at     com.google.android.gms.internal.dw$h.b(Unknown Source)
03-10 17:44:54.071: E/AndroidRuntime(31435):    at com.google.android.gms.internal.dw$h.b(Unknown Source)
03-10 17:44:54.071: E/AndroidRuntime(31435):    at com.google.android.gms.internal.dw$b.bR(Unknown Source)
03-10 17:44:54.071: E/AndroidRuntime(31435):    at com.google.android.gms.internal.dw$a.handleMessage(Unknown Source)

控制台显示:

[2014-03-10 17:47:18 - BaseGameUtils] 找不到BaseGameUtils.apk!

答案: 我必须在清单文件中进行两个关于应用程序ID的元数据条目。 未经过滤的日志列出了相应的错误。

这两个条目是:

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

教程中只提到了其中一个条目。


你把项目导入为库了吗?在你的项目构建属性中,isLibrary 部分应该取消选中。 - Shubhank
已导入,检查一下。 按照教程所述,isLibrary已被勾选。将尝试取消勾选。 - FokTheRock
有同样的问题,有什么消息吗?谢谢 - Maxim Shoustin
从“答案”问题更新中猜测 - 你发现元数据是问题所在了吗? - user1406716
谢谢!我也遇到了同样的问题,它让我疯狂。 - selsine
2个回答

3
我刚刚完成了排行榜的设置,虽然很麻烦,但我做到了并且它可以工作。以下是一些可能直接或间接帮助您的建议。我使用Eclipse。
  • 对于Google Play API,最低SDK版本为9,因此请在清单中将其放在自己的行上:
  • < uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19"/> //任何目标

  • 将BaseGameUtils项目导入您的工作区。您不必修改此代码。
  • 导入google-play-services_lib。它在您的sdk文件夹中。我的sdk文件夹位于我的eclipse文件夹旁边。无论如何,这在:sdk / extras / google / google_play_services / libproject / google-play-services_lib中。您不必修改此代码。
  • 在包资源管理器选项卡中(通常在左侧与所有项目文件夹一起),右键单击YourProject。然后单击属性(Alt + Enter)。然后单击Android。在Android页面的底部应该是“库”。单击添加按钮并添加BaseGameUtils和google-play-services_lib。不要单击“是图书馆”。
  • 确保所有相关项目中的android-support-v4.jar文件都使用相同的最新版本。您可以通过在“包资源管理器”选项卡中右键单击项目并转到 - &gt; Android工具 - &gt;添加支持库来更新支持文件。然后您接受并更新。 您还可以进一步检查以查看所有列出的项目是否具有此更新的jar,方法是右键单击您的项目,然后转到属性。然后单击Java Build Path,然后单击库选项卡。您应该看到支持jar列表。如果没有,请在项目中找到它的位置并添加jar。如果不这样做,您可能会遇到所谓的JAR MIXMATCH。当然,您将在控制台中看到确切的问题,因此很容易修复和诊断。
  • 您的清单应为: < meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" /> < meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

最后一行使用@integer查看google_play_services_version,因此每当Google Play版本更改时,您无需执行任何操作。不要硬编码版本号值,否则您将经常需要手动更新它。

  • MyProject继承自BaseGameActivity。

  • 然后要调用排行榜并更新它,他们的示例代码只有两行非常好。如下所示。 https://developers.google.com/games/services/android/leaderboards 您需要传递在将应用链接到Google Play开发者控制台时给您的排行榜ID。它是一个字符串,看起来像这样:“DkbGvageyBASEWEFCx”。 如果未连接,则更新和获取排行榜将崩溃。请查看以下完整示例代码。

    //更新 if(getApiClient().isConnected()) //getAPIClient是BaseGameUtils的一部分 Games.Leaderboards.submitScore(getApiClient(), leaderboardID, score);

    //显示 if(getApiClient().isConnected()) startActivityForResult(Games.Leaderboards.getLeaderboardIntent(getApiClient(), leaderboardID), 1337);

  • 最后,如果您使用具有与您在Google Play商店上拥有的SHA1(安全哈希算法)不同的SHA1的不同密钥库的应用程序,则会出现错误,您将无法连接。因此,如果您上传了具有类似于ab:cd:de…的SHA1的密钥库的应用程序,并且正在调试应用程序,则可能会遇到问题,因为Eclipse将使用具有不同SHA1的默认Android调试密钥库。 您将无法连接,因此无法使用任何Google Play服务。

  • 我建议您查看名为“ Trivial Quest”的示例代码。 https://github.com/playgameservices/android-samples 它在eclipse_compat下。此示例代码显示了如何登录并解锁成就。如果您可以登录,则可以轻松完成成就和排行榜。

  • 有很多东西,但您只给了我们一个小部分的拼图。如果您有任何其他问题,请告诉我们。


谢谢你的指导。 正如你在上面看到的,我自己找到了解决方案。所以这对我来说没有帮助,但对于一些其他有问题实现Google Play高分榜的程序员可能会有帮助。 - FokTheRock

0

我认为,也许你需要在依赖项中添加Google Play服务库。

在这一行中:

03-10 17:44:54.071: E/AndroidRuntime(31435): at com.google.android.gms.internal.dw$h.b(Unknown Source)

你可能遇到了与谷歌地图依赖项相关的问题,使用来自Google Play服务的GMS库用于地图和其他服务。如果你遇到了问题,可能是因为你在项目中添加了错误的版本。

对于你来说最好的方法是下载适用于游戏的Google Play服务并将其放入你的项目依赖项中。

https://developers.google.com/games/services/downloads/(此Google Play服务专门针对游戏)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接