10

将 account kit sdk 配置为

  compile 'com.facebook.android:account-kit-sdk:4.+'

并且 gradle sync 它与混合版本冲突com.google.android.gms gradle可能导致运行时崩溃和我的应用程序崩溃

Firebase API 初始化失败。java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at com.google.firebase.FirebaseApp.zza(Unknown Source) at ...

上述错误是由于混合了 google play services gradle(我认为 Google play services gradle 可能被 Facebook Account Kit SDK 使用),因为我对所有 Google play services gradle 都有相同的版本。

Facebook Account Kit SDK 方面又发生了一次崩溃,因为

 java.lang.RuntimeException: Unable to get provider com.facebook.accountkit.internal.AccountKitInitProvider: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
                                                       at android.app.ActivityThread.installProvider(ActivityThread.java:5260)
                                                       at android.app.ActivityThread.installContentProviders(ActivityThread.java:4808)
                                                       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4748)
                                                       at android.app.ActivityThread.access$1700(ActivityThread.java:153)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       at android.os.Looper.loop(Looper.java:154)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5529)
                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
                                                    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
                                                       at com.facebook.accountkit.internal.Initializer.initialize(Initializer.java:99)
                                                       at com.facebook.accountkit.internal.AccountKitController.initialize(AccountKitController.java:592)
                                                       at com.facebook.accountkit.internal.AccountKitInitProvider.onCreate(AccountKitInitProvider.java:31)
                                                       at android.content.ContentProvider.attachInfo(ContentProvider.java:1758)
                                                       at android.content.ContentProvider.attachInfo(ContentProvider.java:1733)
                                                       at android.app.ActivityThread.installProvider(ActivityThread.java:5257)
                                                       at android.app.ActivityThread.installContentProviders(ActivityThread.java:4808) 
                                                       at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4748) 
                                                       at android.app.ActivityThread.access$1700(ActivityThread.java:153) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                       at android.os.Looper.loop(Looper.java:154) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:5529) 
                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739) 
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 

但删除后

  compile 'com.facebook.android:account-kit-sdk:4.+'

我的应用程序没有任何问题。但是要将 Facebook Account Kit 集成到我的应用程序中,我必须在 gradle 上包含与 google play 服务冲突的内容。

完全失望,请帮忙。


将 Firebase Gradle 升级为

compile 'com.google.firebase:firebase-messaging:11.6.0'

它没有冲突,但仍然RuntimeException从 Account Kit SDK 提供。

4

4 回答 4

11

要解决此问题,您可以执行以下操作

compile ('com.facebook.android:account-kit-sdk:4.27.0') {
        exclude group: 'com.google.android.gms', module: 'play-services-auth-api-phone'
        exclude group: 'com.google.android.gms', module: 'play-services-auth'
    }
    compile 'com.google.android.gms:play-services-auth:11.6.0'
    compile 'com.google.firebase:firebase-messaging:11.6.0'

这将从 Facebook 的 SDK 中删除过时的支持 gms 库,然后换入 Firebase 正在使用的相同版本的库。

于 2017-11-10T22:16:43.470 回答
3

可能图书馆的冲突可能是原因。在此处查看依赖项; https://mvnrepository.com/artifact/com.facebook.android/account-kit-sdk/4.27.0

看看您是否可以向 facebook 提交问题以进行更新。

或者如果您只需要 facebook 进行身份验证,您可以使用Facebook Android Sdk

在此处输入图像描述

于 2017-11-07T13:32:38.470 回答
2

firebase ru 使用什么功能/服务,您可以分享您的 gradle 依赖项的片段,以便更好地理解这里的问题吗?

于 2017-11-07T09:22:56.400 回答
2

对于Unable to get provider RuntimeException异常,看起来,Application没有先初始化,Content Providers在它之前被初始化。在 Facebook 帐户工具包 SDK 的代码中,它试图获取我的应用程序上下文。

现在的问题是,我确实getApplicationContext()在应用程序类中实现了获取应用程序共享变量的方法,但该变量是全局设置的,Facebook Account Kit sdk 代码获取 Null 应用程序上下文。

解决方案:在onCreate方法中设置共享变量,而不是全局设置,解决了无法获取提供者的问题。

对于混合问题,Account Kit SDK 使用11.0.1版本来播放服务 gradle,在我的项目中我有11.0.4这实际上不是问题,因为在编译时 gradle 需要最新的 gradle 但在我的项目中我没有在下面提到Facebook Account Kit SDK 正在使用的 gradle。

compile 'com.google.android.gms:play-services-auth-api-phone:11.0.1'

解决方案:我在 11.0.4 版本的gradle上面添加了混合 gradle 问题已经解决。

compile 'com.google.android.gms:play-services-auth-api-phone:11.0.4'

正如@astryk 所建议的那样,如果我排除play-services-auth-api-phone模块,则不会显示 gradle 混合错误,但它不包括该模块,因为AccountKitActivity中的下一个按钮单击我的应用程序崩溃为

Crash Report Thread:main Exception:java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/auth/api/phone/SmsRetriever;
at com.facebook.accountkit.internal.PhoneLoginController.createSmsToken(PhoneLoginController.java:250)
at com.facebook.accountkit.internal.PhoneLoginController.logIn(PhoneLoginController.java:188)
at com.facebook.accountkit.internal.LoginManager.logInWithPhoneNumber(LoginManager.java:372)
at com.facebook.accountkit.internal.AccountKitController.logInWithPhoneNumber(AccountKitController.java:631)
at com.facebook.accountkit.ui.PhoneLoginFlowManager.logInWithPhoneNumber(PhoneLoginFlowManager.java:57)
at com.facebook.accountkit.ui.ActivityPhoneHandler.onPhoneLoginComplete(ActivityPhoneHandler.java:189)
at com.facebook.accountkit.ui.AccountKitActivity$1.onReceive(AccountKitActivity.java:176)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:5529)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.auth.api.phone.SmsRetriever" on path: DexPathList[[zip file "/data/app/com.myapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myappList item -1/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
... 16 more
Suppressed: java.lang.ClassNotFoundException: com.google.android.gms.auth.api.phone.SmsRetriever
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 17 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available`
于 2017-11-13T05:48:45.803 回答