【问题标题】:java.lang.NoSuchMethodError: No static method isAtLeastR()Zjava.lang.NoSuchMethodError:没有静态方法 isAtLeastR()Z
【发布时间】:2020-03-23 11:29:23
【问题描述】:

我的应用程序运行良好,但突然我开始收到此错误

java.lang.NoSuchMethodError: 类 Landroidx/core/os/BuildCompat 中没有静态方法 isAtLeastR()Z;或其超类('androidx.core.os.BuildCompat' 的声明出现在 /data/app/com.app.goflatmates-RZKwS2h6hav==/base.apk 中) 在 com.google.android.gms.common.util.PlatformVersion.isAtLeastR(com.google.android.gms:play-services-basement@@17.2.0:21) 在 com.google.android.gms.common.api.GoogleApi.zaa(com.google.android.gms:play-services-base@@17.2.0:128) 在 com.google.android.gms.common.api.GoogleApi.(com.google.android.gms:play-services-base@@17.2.0:23) 在 com.google.android.gms.common.api.GoogleApi.(com.google.android.gms:play-services-base@@17.2.0:54) 在 com.google.android.gms.auth.api.signin.GoogleSignInClient.(未知来源:3) 在 com.google.android.gms.auth.api.signin.GoogleSignIn.getClient(未知来源:3

问题出在这一行

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build(); 

mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

【问题讨论】:

  • 不知何故,编译和执行中的androidx.core.os.BuildCompat 不一致。

标签: android gmail-api


【解决方案1】:

我在使用 React Native 时也遇到了这个问题。我通过在我的 app/build.gradle 中设置它来修复它:

dependencies {
    // ...
    implementation 'com.google.android.gms:play-services-base:17.1.0'
    // ...
}

这是因为几天前 Google play-services-base 库引入了一项重大更改。如果您使用implementation 'com.google.android.gms:play-services-base:+',它将下载该库的最新版本,并将该错误引入您的应用程序。希望对您有所帮助。

【讨论】:

  • 奇怪的是,这个问题只发生在 Android 10 上。旧版本运行良好。但是更改为特定版本对所有版本都有效。
  • 是的。他们也没有真正记录他们所做的更改,因此在您的应用抛出错误之前您不知道。
  • v 17.2.0 存在一些问题。降级到 v17.1.0 节省了我的时间。新的更新 v17.2.1 似乎也可以工作
【解决方案2】:
/**
     * Checks if the device is running on a pre-release version of Android R or newer.
     * <p>
     * <strong>Note:</strong> This method will return {@code false} on devices running release
     * versions of Android. When Android R is finalized for release, this method will be deprecated
     * and all calls should be replaced with {@code Build.VERSION.SDK_INT >= Build.VERSION_CODES.R}.
     *
     * @return {@code true} if R APIs are available for use, {@code false} otherwise
     */
    public static boolean isAtLeastR() {
        return VERSION.CODENAME.length() == 1 && VERSION.CODENAME.charAt(0) >= 'R'
                && VERSION.CODENAME.charAt(0) <= 'Z';
    }

Android Q 是最终版本,不再需要此方法。它 将在支持库的未来版本中删除。

请降级

 implementation 'com.google.android.gms:play-services-base:17.1.0'
 implementation 'com.google.android.gms:play-services-base:17.0.0' //OR

【讨论】:

    【解决方案3】:

    bug 出现在com.google.android.gms:play-services-base:17.2.0 之前的回答说降级到 17.1.0 是正确的,但是谷歌现在已经修复了这个问题,所以你可以升级到 17.2.1,它也可以正常工作。

    这三个是一起更新的,所以如果你正在使用它们,请将它们全部更新:

    com.google.android.gms:play-services-base:17.2.1
    com.google.android.gms:play-services-basement:17.2.1
    com.google.android.gms:play-services-tasks:17.0.2
    

    来源:https://developers.google.com/android/guides/releases

    【讨论】:

      【解决方案4】:

      我通过在我的 app/build.gradle 中设置它来修复它

      dependencies {
          // ...
          configurations.all {
              resolutionStrategy.force 'com.google.android.gms:play-services-base:17.1.0'
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-10-24
        • 2018-09-21
        • 2018-05-20
        • 2016-12-27
        • 1970-01-01
        • 2019-09-05
        • 2018-04-10
        • 2018-08-02
        相关资源
        最近更新 更多