Facebook 帐户工具包与 Google 播放服务 gradle 发生冲突
Facebook Account Kit Collision with Google play services gradle
将account kit sdk配置为
后
compile 'com.facebook.android:account-kit-sdk:4.+'
和 gradle 同步它与 com.google.android.gms gradle
冲突,因为 混合版本可能导致运行时崩溃 而我的应用程序崩溃
Firebase API initialization failure.
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.google.firebase.FirebaseApp.zza(Unknown Source)
at ...
以上错误是由于混用了google播放服务gradle(我认为Google播放服务gradle可能被Facebook Account Kit SDK使用)因为我所有 Google 播放服务 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.access00(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.access00(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 播放服务冲突。
非常失望,请帮忙。
将 Firebase Gradle 升级为
后
compile 'com.google.firebase:firebase-messaging:11.6.0'
它没有发生冲突,但仍然高于 RuntimeException
来自 Account Kit SDK。
你使用的 firebase feature/service 是什么,你可以分享你的 gradle 依赖项的片段以便更好地理解这里的问题吗?
可能是库冲突的原因。在这里查看依赖项;
https://mvnrepository.com/artifact/com.facebook.android/account-kit-sdk/4.27.0
看看你是否可以提交问题到 facebook 来更新它。
或者如果您只需要 facebook 进行身份验证,您可以使用 Facebook Android Sdk
要解决此问题,您可以执行以下操作
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 正在使用的相同版本的库。
对于Unable to get provider RuntimeException异常似乎是,Application没有先初始化,Content Providers在它之前被初始化。
在 Facebook 帐户工具包 SDK 的代码中,它试图获取我的应用程序上下文。
现在的问题是,我确实在获取应用程序共享变量的应用程序 getApplicationContext()
中实现了方法 getApplicationContext()
,但该变量是全局设置的,而 Facebook Account Kit sdk 代码获取的是 Null 应用程序上下文。
解决方案:在 onCreate 方法中设置共享变量而不是全局设置它解决了 Unable to get provider.
的问题
并且对于混合问题,Account Kit SDK 使用 11.0.1 版本播放服务 gradle 并且在我的项目中我有 11.0.4 这实际上不是问题,因为在编译时 gradle 需要最新的 gradle 但在我的项目中我不是指下面 gradle 正在使用哪个 Facebook Account Kit SDK。
compile 'com.google.android.gms:play-services-auth-api-phone:11.0.1'
解决方案 : 我在上面 gradle 添加了版本 11.0.4 和混合 gradle 问题已解决
compile 'com.google.android.gms:play-services-auth-api-phone:11.0.4'
并且 如果我排除 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.onReceive(AccountKitActivity.java:176)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
at android.support.v4.content.LocalBroadcastManager.access[=12=]0(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager.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`
将account kit sdk配置为
后 compile 'com.facebook.android:account-kit-sdk:4.+'
和 gradle 同步它与 com.google.android.gms gradle
冲突,因为 混合版本可能导致运行时崩溃 而我的应用程序崩溃
Firebase API initialization failure. java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at com.google.firebase.FirebaseApp.zza(Unknown Source) at ...
以上错误是由于混用了google播放服务gradle(我认为Google播放服务gradle可能被Facebook Account Kit SDK使用)因为我所有 Google 播放服务 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.access00(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.access00(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 播放服务冲突。
非常失望,请帮忙。
将 Firebase Gradle 升级为
后compile 'com.google.firebase:firebase-messaging:11.6.0'
它没有发生冲突,但仍然高于 RuntimeException
来自 Account Kit SDK。
你使用的 firebase feature/service 是什么,你可以分享你的 gradle 依赖项的片段以便更好地理解这里的问题吗?
可能是库冲突的原因。在这里查看依赖项; https://mvnrepository.com/artifact/com.facebook.android/account-kit-sdk/4.27.0
看看你是否可以提交问题到 facebook 来更新它。
或者如果您只需要 facebook 进行身份验证,您可以使用 Facebook Android Sdk
要解决此问题,您可以执行以下操作
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 正在使用的相同版本的库。
对于Unable to get provider RuntimeException异常似乎是,Application没有先初始化,Content Providers在它之前被初始化。 在 Facebook 帐户工具包 SDK 的代码中,它试图获取我的应用程序上下文。
现在的问题是,我确实在获取应用程序共享变量的应用程序 getApplicationContext()
中实现了方法 getApplicationContext()
,但该变量是全局设置的,而 Facebook Account Kit sdk 代码获取的是 Null 应用程序上下文。
解决方案:在 onCreate 方法中设置共享变量而不是全局设置它解决了 Unable to get provider.
的问题并且对于混合问题,Account Kit SDK 使用 11.0.1 版本播放服务 gradle 并且在我的项目中我有 11.0.4 这实际上不是问题,因为在编译时 gradle 需要最新的 gradle 但在我的项目中我不是指下面 gradle 正在使用哪个 Facebook Account Kit SDK。
compile 'com.google.android.gms:play-services-auth-api-phone:11.0.1'
解决方案 : 我在上面 gradle 添加了版本 11.0.4 和混合 gradle 问题已解决
compile 'com.google.android.gms:play-services-auth-api-phone:11.0.4'
并且 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.onReceive(AccountKitActivity.java:176)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
at android.support.v4.content.LocalBroadcastManager.access[=12=]0(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager.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`