【问题标题】:Where does a GoogleClientApiConnected exception come from?GoogleClientApiConnected 异常从何而来?
【发布时间】:2019-11-06 08:10:52
【问题描述】:

对于一个项目,我正在创建一个 android 应用程序,其中包括一个 WebView、一个可以从后台切换到前台的 serviceLocationManager,首先依赖于 NETWORK_PROVIDER,然后是 GPS_PROVIDER。 在非常随机的情况下,在启动应用程序时,我会在我的 logcat 输出中发现此异常:

E/GoogleApiClientConnecting: GoogleApiClient connecting is in step STEP_SERVICE_BINDINGS_AND_SIGN_IN but received callback for step STEP_GETTING_REMOTE_SERVICE
    java.lang.Exception
        at qw.b(PG:25)
        at qw.c(PG:36)
        at Iw.c(PG:3)
        at Gx.c(PG:2)
        at ly.d(PG:15)
        at gy.a(PG:19)
        at iy.c(PG:6)
        at hy.handleMessage(PG:46)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at oG.dispatchMessage(PG:1)
        at android.os.Looper.loop(Looper.java:214)
        at android.os.HandlerThread.run(HandlerThread.java:65)

我检查了我的代码和我的依赖项,我似乎没有任何与 GoogleApiClient 相关的内容(我发现它已经过时了)。我不(有意识地)使用 Google Play 商店集成或类似的东西。

这个异常似乎会大大降低我的 WebView 的速度(每个 XHR 或 fetch 几乎都停止了 3 秒)。这怎么可能相关,我不知道。

另外,它仅在启动或重新启动应用程序时偶尔发生(有时在清除所有数据后)。

任何帮助将不胜感激,这让我很烦。

【问题讨论】:

  • 您为您的方法注册了错误的回调。检查您的导入和回调方法。
  • 但我没有在我的应用程序中注册任何内容。我什至没有使用“GoogleApiClient”之类的东西。不知何故,这个 message 最终出现在我的应用程序的 MessageQueue 中,我不知道如何。
  • 如果您不直接使用 GoogleApiClient 似乎是您的库之一。运行 gradle app:dependencies 来检查它的来源。同样发布没有混淆的日志会更有用;)
  • 我做到了。没有任何迹象表明任何 GoogleApi 依赖项。我同意,不必只看到混淆的堆栈跟踪应该有帮助,但这就是我得到的。顺便提一句。我什至无法调试此异常。不知何故,该执行没有被中断。
  • 你能告诉我们你的依赖列表吗?

标签: android google-api-client


【解决方案1】:

我发现的唯一解决方法是完全禁用设备上的“Google Play Protect”(设置 -> Google -> 安全 -> Google Play Protect -> 顶部的 Cogwheel -> 常规 -> 使用 Play Protect 扫描应用程序) .

这是非常具有侵入性和潜在危险的。 (不过,我的评价已经足够了。)

【讨论】:

    【解决方案2】:

    我们刚刚找到了一个很好的解决方案来解决这个问题。 Google 似乎正在使用 Google-Play-Protect 检查您在应用程序中调用的每个 URL。由于某种原因,某些 URL 无法通过此 URL-Check,因此 Google-Play-Protect 在检查 URL 时会卡住。

    为了解决这个问题,我们找到了一种将我们在应用程序中使用的 URL 列入白名单的方法。您可以通过在 webview 对象上调用以下方法将 URL 列入白名单:

    webviewObject.setSafeBrowsingWhitelist(listOfURLs, null);
    

    我们还注意到,这大大提高了调用这些特定 URL 的性能。一些 URL 的打开延迟比以前低得多。

    【讨论】:

      【解决方案3】:

      正如 cmets 中所提到的,它与 Google 服务的使用有关。通过查看 Google Gms 库的来源,您可以找到原因。在库初始化期间。

      1) 具体而言,Google 服务在 Android 中初始化为 Bound Service。并且很少有 int 标志只用于注释,只要GoogleApiClient 准备好不可用。通过使用两个值 STEP_SERVICE_BINDINGS_AND_SIGN_INSTEP_GETTING_REMOTE_SERVICE。其中一些resources decompiled and you can check them here

      2) 为了解决您的问题,您需要从其他依赖项检查该服务的初始化。根库是com.google.android.gms。您可以通过调用./gradlew app:dependencies 来检查这个库是否在使用中。

      3) 在找到这个库的同时,您可以检查什么是过时的。 GoogleApiClient 的使用在 2017 年被弃用和删除。所以它可能仍然被需要更新的旧库使用。

      【讨论】:

      • 嘿,谢谢你的信息。 > 我检查了我的代码和依赖项..我已经检查过了,com.google.android.gms 不在./gradlew app:dependencies 的输出中
      • @shoesel 分享您的Application 文件和 MainActivity`。让我们检查一下你在那里初始化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      相关资源
      最近更新 更多