Google Auth мигрирует на androidx: SignInHubActivity не реализует жизненный цикл - программирование

Google Auth мигрирует на androidx: SignInHubActivity не реализует жизненный цикл

После перехода на AndroidX я столкнулся с этой проблемой с библиотекой Google Auth:

На 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)

Я использую следующие версии lib:

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 lib не поддерживает аутентификацию с помощью библиотек AndroidX?

Есть ли способ начать намерение с androidX lib с поддерживаемым поведением lib?

Я принимаю ответы как на Java, так и на языке котлин.

Обновление 1: 27.12.2017

Создание клиента Google 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 я получаю ту же ошибку.

4b9b3361

Ответ 1

та же проблема! Я только что добавил "базовую" зависимость и увеличил "appcompat" до последней альфа-версии, и это помогло.

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 для gradle установлена на gradle-4.10.1-all.zip. Также я пытался аннулировать/перезапустить мой AS 3.3. Надеюсь, это кому-нибудь поможет.

Ответ 2

Я исправил эту проблему, используя последнюю версию библиотеки appcompat:

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

В предыдущих версиях класс AppCompatActivity не реализовывал интерфейс LifecycleOwner, что приводило к ошибкам, которые вы наблюдали.

Ответ 3

Я нашел обходной путь, пока не найду исправление или не обновлю библиотеку:

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);
}

Код попытается войти в систему без вывода сообщений, если пользователь не разрешил вход в систему, начнется намерение. В моем случае намерение позволило мне выбрать учетную запись и вылетает после нажатия на учетную запись. После первого нажатия будет работать тихий вход.

Ответ 4

Я исправил проблему, добавив эту зависимость в мой 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

  • Gradle уровня проекта:

    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 'option.getJavaCompiler()' устарел и был заменен на 'variable.getJavaCompileProvider()'. Он будет удален в конце 2019 года. Для получения дополнительной информации см. Https://d.android.com/r/tools/task-configuration-avoidance. Чтобы определить, что вызывает option.getJavaCompiler(), используйте -Pandroid.debug.obsoleteApi = true в командной строке для отображения трассировки стека. Затронутые модули: приложение

Мне не удалось это исправить, но просто запуск проекта с этой ошибкой существует удивительно.

Ответ 5

У меня была такая же проблема. Я исправил это, изменив следующую зависимость

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

в

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

Так что сейчас я использую стабильную версию.

Ответ 6

Последнее обновление: 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