Facebook Account Kit Collision与Google Play服务gradle [英] Facebook Account Kit Collision with Google play services gradle

查看:106
本文介绍了Facebook Account Kit Collision与Google Play服务gradle的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将帐户工具包sdk配置为

After configuring account kit sdk as

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

并让gradle与 com.google.android.gms gradle同步作为混合版本可能导致运行时崩溃,而我的应用程序崩溃

and gradle sync it conflict with com.google.android.gms gradle as mixing versions can lead to runtime crashes and my app crash as


Firebase API初始化失败。
java.lang.reflect.InvocationTargetException
(java.lang.reflect.Method.invoke(本机方法)
com.google.firebase.FirebaseApp.zza(未知来源)
at ...

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 Play服务gradle(我认为Google Play服务gradle可能由Facebook Account Kit SDK),因为我为所有Google Play服务等级使用相同的版本。

the above error is due to mixing google play services gradle (I think Google play services gradle may be used by Facebook Account Kit SDK) because I have same version for all Google play services gradles.

Facebook Account Kit SDK方面还有另外一次崩溃

And one more crash is coming from Facebook Account Kit SDK side as

 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服务冲突的内容。

my app working without any issue. But to integrate Facebook Account Kit in my app I have to include above gradle which conflict with google play services.

完全失望,请提供帮助。

Totally disappointed, please help.

将Firebase Gradle升级为

After upgrading Firebase Gradle as

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

它不会发生冲突,但仍然从Account Kit SDK提供 RuntimeException 以上。

its not colliding but still gives above RuntimeException from Account Kit SDK.

推荐答案

对于无法获取提供程序RuntimeException 异常,看来 Application 没有先初始化, Content Providers 却先初始化了。
在Facebook帐户工具包SDK的代码中,它试图获取我的应用程序上下文。

For Unable to get provider RuntimeException exception it seems that, Application is not initialized first, Content Providers are initialized before it. And in Facebook account kit SDK's code it was trying to get my application context.

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

Now the problem was, I did implement method getApplicationContext() in application class that is getting application shared variable but that variable was setting globally and Facebook Account Kit sdk code getting Null application context.

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

Solution : setting shared variable in onCreate method instead of setting globally it resolved the problem of Unable to get provider.

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

And For Mixing issue, Account Kit SDK use 11.0.1 version for play services gradle and in my project I am having 11.0.4 that is actually not the issue because on compile time gradle takes latest gradle but In my project I am not referring below gradle which Facebook Account Kit SDK is using.

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

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

Solution : I have added above gradle with version 11.0.4 and the mixing gradle issue has been resolved.

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






由@astryk建议,如果我排除了 play-services-auth-api-phone 模块,则不会发生gradle混合错误显示,但由于 AccountKitActivity 中的该模块不包括该模块,因此在下一个按钮上单击时,我的应用程序崩溃了,


And as suggested by @astryk if I exclude play-services-auth-api-phone module then gradle mixing error is not showing but it is not including that module becasue in AccountKitActivity on next button click my application crashes as

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`

这篇关于Facebook Account Kit Collision与Google Play服务gradle的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆