webentwicklung-frage-antwort-db.com.de

Google Auth-Migration zu Androidx: SignInHubActivity implementiert Lifecycle nicht

Nach der Migration zu AndroidX habe ich folgendes Problem mit der Google Auth-Bibliothek:

Auf 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)

Unter 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)

Ich verwende die folgenden lib-Versionen:

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'

Der Code stürzt ab, sobald ich eine Aktivität mit der Absicht beginne:

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

Ich habe die folgenden Eigenschaften in der Datei "settings.gradle":

Android.useAndroidX=true
Android.enableJetifier=true

Die Google Auth-Bibliothek unterstützt keine Authentifizierung mit AndroidX-Bibliotheken.

Gibt es eine Möglichkeit, eine Absicht von einer androidX-lib mit dem unterstützten lib-Verhalten zu starten?

Ich akzeptiere Antworten in Java und Kotlin.

Update 1: 27.12.2017

Google API-Client-Erstellung:

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

Kann es wegen enableAutoManage sein?

Update 2: 28.12.2018

Ich konnte mich mit folgendem Code anmelden:

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

Ich denke, es gibt kein Problem mit den Anmeldeinformationen oder den anderen Konfigurationsdateien. Auf diese Weise kann der Benutzer kein Konto auswählen.

Ich denke, dass Jetifier auf dieselbe Weise versagt.

Mit API 27 bekomme ich den gleichen Fehler.

7
4bottiglie

das gleiche Problem! Ich habe gerade die "Kern" -abhängigkeit hinzugefügt und "appcompat" der aktuellen Alpha-Version angehoben. 

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"
...
}

Ich benutze:

compileSdkVersion 28
buildToolsVersion "28.0.3"

Top 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

die Gradle-Version von Gradle Wrapper ist auf Gradle-4.10.1-all.Zip gesetzt. Auch habe ich versucht, Invalidate/restart meine AS 3.3. Ich hoffe es hilft jemandem. 

3
kot331107

Ich habe dieses Problem mit der neuesten Version der AppCompat-Bibliothek behoben:

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

In früheren Versionen hat die Klasse AppCompatActivity die Schnittstelle LifecycleOwner nicht implementiert, was zu den von Ihnen beobachteten Fehlern führte.

18

Ich habe eine Arbeit gefunden, bis ich ein Update gefunden habe oder die Bibliothek aktualisiert wurde:

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

Der Code versucht, sich unbemerkt anzumelden, wenn der Benutzer die Anmeldung nicht bereits zugelassen hat, wird die Absicht gestartet. In meinem Fall ließ mich die Absicht wählen, das Konto auszuwählen und stürzt ab, nachdem ich auf das Konto geklickt habe. Nach dem ersten Tippen funktioniert die stille Anmeldung.

1
4bottiglie

Letztes Update: Android.core: 1.2.0-alpha02 hat diese Methode in ComponentActivity.getLifeCycle () immer noch nicht

Ich aktualisiere auf die neueste Version von Android.core:

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

Die neueste Version finden Sie in https://developer.Android.com/jetpack/androidx/releases/core

0
greensuisse

Ich hatte das gleiche Problem. Ich habe es behoben, indem ich folgende Abhängigkeit geändert habe

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

zu

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

Im Grunde verwende ich jetzt eine stabile Version.

0
Ankit Rathi

Ich habe das Problem behoben, indem ich meinem Gradle diese Abhängigkeit hinzugefügt habe:

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

EDIT

Das sind die Versionen, die ich verwendet habe:

  • Grad der App-Ebene 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' 
    

    Alle com.Android.support-Bibliotheken haben die Version: 28.0.0

  • Projektlevel Gradle:

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

Note 1: Wenn Sie die untere Zeile haben, versuchen Sie, ohne zu bauen:

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

Note 2: Wenn Sie mit Android Studio 3.3 bauen (spätestens zum Zeitpunkt, als ich diese Antwort schreibe).

WARNUNG: Die API 'variant.getJavaCompiler ()' ist veraltet und wurde ersetzt durch 'variant.getJavaCompileProvider ()'. Es wird entfernt Ende 2019. Weitere Informationen finden Sie unter https://d.Android.com/r/tools/task-configuration-avoidance . Zu Bestimmen Sie, was variant.getJavaCompiler () aufruft, verwenden Sie -Pandroid.debug.obsoleteApi = true in der Befehlszeile, um einen Stack-Trace anzuzeigen. Betroffene Module: App

Ich konnte es nicht beheben, aber das Projekt einfach mit diesem Fehler auszuführen, funktioniert überraschend.

0
MBH