18

迁移到 AndroidX 后,我遇到了 Google Auth lib 的以下问题:

在 Android 9 API 28 上:

java.lang.IncompatibleClassChangeError: Class 'com.google.android.gms.auth.api.signin.internal.SignInHubActivity' does not implement interface 'androidx.lifecycle.LifecycleOwner' in call to 'androidx.lifecycle.Lifecycle androidx.lifecycle.LifecycleOwner.getLifecycle()' (declaration of 'androidx.lifecycle.LiveData' appears in /data/app/fourbottles.bsg.workinghours4b-G1onPKgFFE-l3aqjx0qDJw==/split_lib_dependencies_apk.apk)
    at androidx.lifecycle.LiveData.observe(LiveData.java:172)
    at androidx.loader.app.LoaderManagerImpl$LoaderInfo.setCallback(LoaderManagerImpl.java:100)
    at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:400)
    at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
    at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.zzn(Unknown Source:80)
    at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.onActivityResult(Unknown Source:68)
    at android.app.Activity.dispatchActivityResult(Activity.java:7454)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:4353)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:4402)
    at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

在 Android 5.0.2 API 22 上

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'androidx.lifecycle.Lifecycle$State androidx.lifecycle.Lifecycle.getCurrentState()' on a null object reference
    at androidx.lifecycle.LiveData.observe(LiveData.java:172)
    at androidx.loader.app.LoaderManagerImpl$LoaderInfo.setCallback(LoaderManagerImpl.java:100)
    at androidx.loader.app.LoaderManagerImpl.createAndInstallLoader(LoaderManagerImpl.java:400)
    at androidx.loader.app.LoaderManagerImpl.initLoader(LoaderManagerImpl.java:421)
    at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.zzn(Unknown Source)
    at com.google.android.gms.auth.api.signin.internal.SignInHubActivity.onActivityResult(Unknown Source)
    at android.app.Activity.dispatchActivityResult(Activity.java:6139)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:3535)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3582) 
    at android.app.ActivityThread.access$1300(ActivityThread.java:144) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5221) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

我正在使用以下库版本:

implementation 'com.google.android.gms:play-services-gcm:16.0.0'
implementation 'com.google.android.gms:play-services-auth:16.0.1'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.multidex:multidex:2.0.1'

一旦我开始有意图的活动,代码就会崩溃:

val signInIntent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient)
startActivityForResult(signInIntent, LOGIN_WITH_GOOGLE_CODE)

我在 settings.gradle 文件中有以下属性:

android.useAndroidX=true
android.enableJetifier=true

Google Auth 库不支持使用 AndroidX 库进行身份验证?

有没有办法从一个支持 lib 行为的 androidX lib 开始一个意图?  

我接受 java 和 kotlin 语言的答案。

更新 1: 27.12.2017

谷歌api客户端创建:

 GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

 googleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, googleSignInOptions)
                .build();

可能是因为enableAutoManage

更新 2:28.12.2018

我设法使用以下代码登录:

Task<GoogleSignInAccount> sign = googleSignInClient.silentSignIn();
GoogleSignInAccount result = sign.getResult();

所以我认为凭据或其他配置文件没有问题。这样,用户将无法选择帐户。

我认为 Jetifier 以同样的方式失败。

使用 API 27 我得到了同样的错误。

4

6 回答 6

18

我通过使用最新版本的 appcompat 库解决了这个问题:

implementation "androidx.appcompat:appcompat:1.1.0-rc01"

在以前的版本中,类AppCompatActivity没有实现LifecycleOwner接口,从而导致您观察到的错误。

于 2019-03-04T08:18:20.037 回答
8

同样的问题!我刚刚添加了“核心”依赖项并将“appcompat”提升到最新的 alpha 版本,它有所帮助。

dependencies {

implementation "androidx.core:core:1.1.0-alpha03"
implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation "androidx.annotation:annotation:1.0.1"
implementation "androidx.recyclerview:recyclerview:1.1.0-alpha01"
implementation "androidx.appcompat:appcompat:1.1.0-alpha01"
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation "androidx.cardview:cardview:1.0.0"
implementation "com.google.android.material:material:1.1.0-alpha02"

implementation "com.google.firebase:firebase-core:16.0.6"
implementation "com.google.firebase:firebase-auth:16.1.0"
implementation "com.google.firebase:firebase-storage:16.0.5"
implementation "com.google.firebase:firebase-perf:16.2.3"
implementation 'com.firebaseui:firebase-ui-database:4.3.0'

implementation "com.google.android.gms:play-services-auth:16.0.1"
implementation "com.google.android.gms:play-services-location:16.0.0"
implementation "com.google.android.gms:play-services-maps:16.0.0"
...
}

我用:

compileSdkVersion 28
buildToolsVersion "28.0.3"

顶级 gradle.build:

dependencies {
    classpath 'com.android.tools.build:gradle:3.3.0'
    classpath 'com.google.gms:google-services:4.2.0'
    ...
}

gradle.properties:

android.debug.obsoleteApi=true
android.enableR8 = true
android.useAndroidX=true
android.enableJetifier=true

gradle wrapper 的 gradle 版本设置为 gradle-4.10.1-all.zip。我还尝试使我的 AS 3.3无效/重新启动。希望它会帮助某人。

于 2019-01-16T19:10:50.893 回答
1

在找到修复程序或更新库之前,我找到了解决方法:

Task<GoogleSignInAccount> sign = googleSignInClient.silentSignIn();

if(sign.isSuccessful())
{
    GoogleSignInAccount resultAccount = sign.getResult();
    handleGoogleLogin(resultAccount);
}else
{
     Intent signInIntent = googleSignInClient.getSignInIntent();
     startActivityForResult(signInIntent, GOOGLE_SIGN_IN_CODE);
}

代码尝试静默登录,如果用户不允许登录,将启动 Intent。在我的情况下,意图让我选择帐户并在点击帐户后崩溃。第一次点击后,静默登录将起作用。

于 2019-01-15T21:40:20.827 回答
1

最新更新:android.core:1.2.0-alpha02 在 ComponentActivity.getLifeCycle() 中仍然没有那个方法

我更新到最新版本的 android.core:

dependencies {
    // ...
    def core_version = "1.2.0-alpha04"
    implementation "androidx.core:core:$core_version"
    implementation "androidx.core:core-ktx:$core_version"
}

最新版本可以在 https://developer.android.com/jetpack/androidx/releases/core找到

于 2019-09-09T00:03:07.263 回答
0

我有同样的问题。我通过更改以下依赖来修复它

implementation 'androidx.core:core-ktx:1.1.0-alpha05'

implementation 'androidx.core:core-ktx:1.0.1'

所以基本上我现在正在使用稳定版本。

于 2019-04-17T14:08:01.280 回答
0

我通过将此依赖项添加到我的 gradle 来解决此问题:

implementation 'androidx.arch.core:core-runtime:2.0.1-alpha01'

编辑

这些是我用过的版本:

  • 应用级 gradle compileSdkVersion = 28, buildToolsVersion = "28.0.3"

    implementation "com.google.android.gms:play-services-auth:16.0.1"
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.vectordrawable:vectordrawable:1.0.1'
    implementation 'androidx.arch.core:core-runtime:2.0.1-alpha01' 
    

    所有 com.android.support 库的版本为:28.0.0

  • 项目级等级:

    classpath 'com.android.tools.build:gradle:3.3.0'
    classpath 'com.google.gms:google-services:4.2.0'
    

注意 1:如果您有以下行,请尝试在没有它的情况下构建:

implementation "androidx.legacy:legacy-support-v4:1.0.0"

注意 2:如果您使用 Android Studio 3.3 构建(我写这个答案时的最新版本),我在尝试迁移到 androidX 时遇到这些错误:

警告:API 'variant.getJavaCompiler()' 已过时,已替换为 'variant.getJavaCompileProvider()'。它将在 2019 年底被删除。有关更多信息,请参阅 https://d.android.com/r/tools/task-configuration-avoidance。要确定调用 variant.getJavaCompiler() 的内容,请在命令行上使用 -Pandroid.debug.obsoleteApi=true 以显示堆栈跟踪。受影响的模块:app

我无法修复它,但是仅运行存在此错误的项目就可以出人意料地工作。

于 2019-01-15T21:09:57.513 回答