【问题标题】:Missing Google play games service classes缺少 Google play 游戏服务类
【发布时间】:2016-12-13 03:54:38
【问题描述】:

我这几天一直在为一个问题苦苦挣扎。我最近从 Eclipse 切换到 Android Studio,在尝试使用 Google 的游戏服务(排行榜和成就)设置我的新项目后,我注意到一堆类似乎丢失了,而其他类则完好无损。我可以登录谷歌服务,我可以展示广告(另一个包,但它仍然可以完美运行),其他一切似乎都很好;除了加载意图。似乎 SDK 管理器忘记将“com.google.android.gms.games.ui....”包包含到我的 sdk 中。这意味着我无法加载任何意图(无法显示排行榜或成就。我的应用程序没有崩溃,但我确实收到一条错误消息和 LogCat 中的一堆“找不到类/无法加载方法”警告.

这是我在尝试对 google 游戏服务的游戏设置意图调用 startActivityForResult(....) 时的日志,请记住,排行榜和成就会弹出相同的错误:

08-06 22:59:07.937 430-1614/? I/ActivityManager:开始 {act=com.google.android.gms.games.SHOW_SETTINGS dat=version:9452000 flg=0x4000000 pkg=com.google.android.play.games cmp=com.google.android.play.games/com.google.android.gms.games.ui.client.main.ClientSettingsActivity (有附加功能)u=0} 来自 pid 10924 08-06 22:59:07.997 430-1615/? I/ActivityManager: 启动 proc com.google.android.play.games.ui for 活动 com.google.android.play.games/com.google.android.gms.games.ui.client.main.ClientSettingsActivity: pid=11180 uid=10086 gids={1028} E/dalvikvm: 找不到 类 'android.app.ActivityManager$TaskDescription',引用自 方法 com.google.android.gms.games.ui.client.ClientFragmentActivity.instantiateGoogleApiClient** 08-06 22:59:08.317 11180-11180/? W/dalvikvm: VFY: 无法解析 新实例 27 (Landroid/app/ActivityManager$TaskDescription;) 在 Lcom/google/android/gms/games/ui/client/ClientFragmentActivity; 08-06 22:59:08.327 11180-11180/? D/dalvikvm:VFY:将操作码 0x22 替换为 0x0084 08-06 22:59:08.327 11180-11180/? D/dalvikvm:DexOpt:无法 在 0x86 处选择直接调用 0x007b Lcom/google/android/gms/games/ui/client/ClientFragmentActivity;.instantiateGoogleApiClient 08-06 22:59:08.347 11180-11180/? W/dalvikvm:无法解决 的超类 Lcom/google/android/gms/games/ui/GamesFragmentActivity$1; (55) 08-06 22:59:08.347 11180-11180/? W/dalvikvm: 类的链接 'Lcom/google/android/gms/games/ui/GamesFragmentActivity$1;'失败的 08-06 22:59:08.347 11180-11180/? E/dalvikvm: 找不到类 'com.google.android.gms.games.ui.GamesFragmentActivity$1',引用 从方法 com.google.android.gms.games.ui.GamesFragmentActivity.onCreate 08-06 22:59:08.347 11180-11180/? W/dalvikvm: VFY: 无法解析 新实例 4724 (Lcom/google/android/gms/games/ui/GamesFragmentActivity$1;) 在 Lcom/google/android/gms/games/ui/GamesFragmentActivity; 08-06 22:59:08.347 11180-11180/? D/dalvikvm:VFY:将操作码 0x22 替换为 0x0086 08-06 22:59:08.347 11180-11180/?我/dalvikvm:找不到 方法android.view.Window.setStatusBarColor,引用自方法 com.google.android.gms.games.ui.GamesFragmentActivity.updateStatusBar 08-06 22:59:08.347 11180-11180/? W/dalvikvm: VFY: 无法解析 虚拟方法 8409:Landroid/view/Window;.setStatusBarColor (I)V 08-06 22:59:08.347 11180-11180/? D/dalvikvm: VFY: 替换操作码 0x6e 在 0x0030 08-06 22:59:08.347 11180-11180/?我/dalvikvm:不能 查找方法android.view.Window.setStatusBarColor,引用自 方法 com.google.android.gms.games.ui.GamesFragmentActivity.updateStatusBar 08-06 22:59:08.347 11180-11180/? W/dalvikvm: VFY: 无法解析 虚拟方法 8409:Landroid/view/Window;.setStatusBarColor (I)V 08-06 22:59:08.347 11180-11180/? D/dalvikvm: VFY: 替换操作码 0x6e 在 0x0034 08-06 22:59:08.347 11180-11180/? E/dalvikvm:不能 查找类 'android.app.ActivityManager$TaskDescription',引用 从方法 com.google.android.gms.games.ui.GamesFragmentActivity.updateTaskDescription 08-06 22:59:08.347 11180-11180/? W/dalvikvm: VFY: 无法解析 新实例 27 (Landroid/app/ActivityManager$TaskDescription;) 在 Lcom/google/android/gms/games/ui/GamesFragmentActivity; 08-06 22:59:08.347 11180-11180/? D/dalvikvm:VFY:将操作码 0x22 替换为 0x0040 08-06 22:59:08.347 11180-11180/? W/dalvikvm:无法解决 的超类 Lcom/google/android/gms/games/ui/GamesFragmentActivity$1; (55) 08-06 22:59:08.347 11180-11180/? W/dalvikvm: 类的链接 'Lcom/google/android/gms/games/ui/GamesFragmentActivity$1;'失败的 08-06 22:59:08.347 11180-11180/? D/dalvikvm:DexOpt:无法选择 在 0x88 处直接调用 0x6ab7 Lcom/google/android/gms/games/ui/GamesFragmentActivity;.onCreate 08-06 22:59:08.347 11180-11180/? D/dalvikvm:DexOpt:无法直接选择 在 0x4f 调用 0x007c Lcom/google/android/gms/games/ui/GamesFragmentActivity;.updateTaskDescription 08-06 22:59:08.357 11180-11180/? I/dalvikvm: 找不到方法 android.app.Activity.finishAfterTransition,引用自方法 android.support.v4.app.FragmentActivity.onBackPressed 08-06 22:59:08.357 11180-11180/? W/dalvikvm: VFY: 无法解析虚拟 方法88:Landroid/app/Activity;.finishAfterTransition()V 08-06 22:59:08.357 11180-11180/? D/dalvikvm:VFY:将操作码 0x6e 替换为 0x0012 08-06 22:59:08.377 963-1448/? D/dalvikvm: WAIT_FOR_CONCURRENT_GC 阻塞 0ms 08-06 22:59:08.557 963-1448/? D/dalvikvm:GC_EXPLICIT 释放 564K,14% 释放 9888K/11399K,暂停 4ms+6ms,共179ms 08-06 22:59:08.577 11180-11180/? W/dalvikvm: VFY: 找不到签名中引用的类 (Landroid/view/SearchEvent;) 08-06 22:59:08.577 11180-11180/? I/dalvikvm: 找不到方法 android.view.Window$Callback.onSearchRequested,引用自方法 android.support.v7.internal.view.WindowCallbackWrapper.onSearchRequested 08-06 22:59:08.577 11180-11180/? W/dalvikvm: VFY: 无法解析 接口方法8386: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z 08-06 22:59:08.577 11180-11180/? D/dalvikvm:VFY:在 0x0002 08-06 22:59:08.577 处替换操作码 0x72 11180-11180/? I/dalvikvm: 找不到方法 android.view.Window$Callback.onWindowStartingActionMode,引用 从方法 android.support.v7.internal.view.WindowCallbackWrapper.onWindowStartingActionMode 08-06 22:59:08.577 11180-11180/? W/dalvikvm: VFY: 无法解析 接口方法8390: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode; 08-06 22:59:08.577 11180-11180/? D/dalvikvm:VFY:将操作码 0x72 替换为 0x0002 08-06 22:59:08.597 892-894/? D/dalvikvm: GC_CONCURRENT 已释放 3308K,27%免费14043K/19015K,暂停12ms+14ms,共74ms 08-06 22:59:08.627 11180-11183/? D/dalvikvm: GC_CONCURRENT 释放 230K, 5% E/AndroidUtils: getCallingContext():找不到调用包名 com.google.android.gms.games.ui.client.main.ClientSettingsActivity@41d70410 08-06 22:59:08.867 11180-11180/? E/ClientUiFragAct:客户端用户界面 活动必须以 startActivityForResult 08-06 开始 22:59:08.867 11180-11180/? E/GamesFragmentActivity:无法 实例化 GoogleApiClient;救助...

请记住,我尝试过使用不同的 sdk 目标(17、21、23、24),我尝试过混合和匹配不同版本的库,我尝试过添加所有服务并仅使用最低限度(游戏,加上,广告)。我已经尝试了我能想到的一切,但我对 gradle 还是很陌生,我想我只是忽略了一些相对简单的东西。我只是无法使用我的日志和我能想到的每一个单词变体在谷歌上找到一个线索来找到线索。任何帮助表示赞赏。

更新:

这是我调用 showleaderboards 方法的地方(在为游戏循环创建的更新线程中):

@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
    if (pSceneTouchEvent.isActionDown()) {

        GSGoogleServices.getInstance().showLeaderboards();

        return true;
    }

    return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
}

这是 showLeaderboards 方法本身,它启动了导致 logcat 错误的新活动:

public void showLeaderboards(){
    if(mHelper.isSignedIn()){
        mActivity.startActivityForResult(Games.getSettingsIntent(getApiClient()), RC_UNUSED);
    } else {
        mHelper.beginUserInitiatedSignIn();
    }
}

【问题讨论】:

  • 验证和 dalvikvm 警告无关紧要。你能在你调用startActivityForResult()的地方包含你的实际代码吗?
  • 我已经用我的 startActivityForResult 方法更新了原始问题,我应该添加那些使用 9.4.0 版谷歌服务捕获的日志,并构建工具 24.0.1。测试设备是运行 android 6.1 的三星 S5 和运行 android 4.1.1 的 Asus 变压器。使用以前的服务版本和构建工具时的结果相同 23.

标签: java android android-studio android-gradle-plugin


【解决方案1】:

已找到解决方案。我将 startacticityforresult 中的 RC_UNUSED 设置为 -1,这会在没有排行榜活动类的上下文的情况下启动一个新活动。将其设置为非负值解决了这个问题

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2017-09-27
    • 2018-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多