【问题标题】:GoogleApiClient builder failing to buildGoogleApiClient 构建器构建失败
【发布时间】:2017-09-16 18:55:56
【问题描述】:

我正在将 Google Smart Lock 实施到应用程序中,之前构建 Api 客户端时我没有遇到任何问题。事实上,我正在完成一些语法更改并清理代码(甚至没有触及初始化 Api 客户端的代码),当在 Api 客户端构建器上调用 build() 时,我的应用程序现在死了,因为 @987654322 @。这是显示的错误:

java.lang.AbstractMethodError: abstract method "com.google.android.gms.common.api.Api$zze com.google.android.gms.common.api.Api$zza.zza(android.content.Context, android.os.Looper, com.google.android.gms.common.internal.zzq, java.lang.Object, com.google.android.gms.common.api.GoogleApiClient$ConnectionCallbacks, com.google.android.gms.common.api.GoogleApiClient$OnConnectionFailedListener)"
                                                                                at com.google.android.gms.common.api.GoogleApiClient$Builder.build(Unknown Source)

我不知道为什么它突然开始失败,而且我找不到任何会导致此错误的更改。为什么不覆盖那个抽象方法?它嵌套在图书馆深处,所以我不明白我是如何影响它的。

我将 Google Api 客户端调用封装在一个名为 CredentialManager 的管理器中。这是我用来初始化客户端的代码:

public CredentialManager(ContextProvider contextProvider) {
    mContextProvider = contextProvider;
    mCredentialsApiClient = new GoogleApiClient.Builder(mContextProvider.getContext())
            .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
                @Override
                public void onConnected(@Nullable Bundle bundle) {
                    Log.i(CredentialManager.TAG, "Api connected");
                }

                @Override
                public void onConnectionSuspended(int i) {
                    Log.i(CredentialManager.TAG, "Connection suspended with status " + i);
                }
            })
            .enableAutoManage(mContextProvider.getContext(), connectionFailedResult -> {
                if (connectionFailedResult.hasResolution()) {
                    try {
                        connectionFailedResult.startResolutionForResult(
                                mContextProvider.getContext(),
                                CredentialManager.Codes.RESOLVE_CONNECTION_REQUEST_CODE);
                    } catch (IntentSender.SendIntentException e) {
                        // Unable to resolve, log error
                        Log.e(CredentialManager.TAG, "Resolution failed: " + e.getMessage());
                    }
                } else {
                    //instead of displaying a dialog, just let the user continue and login manually.
                    Log.e(CredentialManager.TAG, "Connection failed: " + connectionFailedResult.getErrorMessage());
                }
            })
            .addApi(Auth.CREDENTIALS_API)
            .build();
}

如果您对导致此错误的原因有任何见解,请告诉我。我已经在互联网上搜寻过任何曾经看过类似内容但找不到任何东西的人。

【问题讨论】:

    标签: android google-api google-api-client google-smartlockpasswords


    【解决方案1】:

    问题是某些 google play 服务依赖项已更新其版本,而不是用于 google smart lock 的 play-services-auth 依赖项。该 apk 可以正常编译,但在 Google Api 客户端尝试初始化时会崩溃。修复方法是使所有版本都相同,并使缓存无效+重新启动android studio,重新编译并运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 1970-01-01
      相关资源
      最近更新 更多