web-dev-qa-db-ja.com

Android認証へのGoogle認証の移行: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ライブラリはAndroidXライブラリでの認証をサポートしていませんか?

サポートされているlibの動作でandroidX libからインテントを開始する方法はありますか?

Javaとkotlin言語の両方で回答を受け入れます。

更新1:2017年12月27日

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:2018年12月28日

次のコードでログインできました。

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

だから私は資格情報や他の構成ファイルに問題はないと思います。これにより、ユーザーはアカウントを選択できなくなります。

Jetifierは同じように失敗していると思います。

API 27では、同じエラーが発生します。

16
4bottiglie

同じ問題! 「コア」依存関係を追加し、「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に設定されます。また、Invalidate/restart AS 3.3を試みました。それが誰かを助けることを願っています。

7
kot331107

Appcompatライブラリの最新バージョンを使用して、この問題を修正しました。

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

以前のバージョンでは、クラスAppCompatActivityLifecycleOwnerインターフェースを実装していなかったため、エラーが発生しました。

18

修正が見つかるか、ライブラリが更新されるまで、回避策を見つけました。

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

ユーザーがまだサインインを許可していない場合、コードはサイレントサインインを試み、インテントを開始します。私の場合、意図によりアカウントを選択でき、アカウントをタップするとクラッシュします。最初のタップ後、サイレントサインインが機能します。

1
4bottiglie

最新の更新: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 にあります。

0
greensuisse

同じ問題がありました。次の依存関係を変更して修正しました

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

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

したがって、基本的には現在安定版リリースを使用しています。

0
Ankit Rathi

私のグラドルにこの依存関係を追加することで問題を修正しました:

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

[〜#〜] edit [〜#〜]

これらは私が使用したバージョンです:

  • アプリレベルの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を使用してスタックトレースを表示します。影響を受けるモジュール:アプリ

私はそれを修正することができませんでしたが、このエラーが存在するプロジェクトを実行するだけで驚くほど動作します。

0
MBH