本文介绍了NullPointerExcepetion的Facebook SDK V4.5.0时启用的Proguard(当尝试使用解析库登陆)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用Facebook的ParseFacebookUtils库登陆,它的工作很好,但是当我启用Proguard的文件我在Facebook登录活动启动此异常:

 致命异常:了java.lang.RuntimeException:无法启动活动ComponentInfo {} my.package.name/com.facebook.FacebookActivity:显示java.lang.NullPointerException
       在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413)
       在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
       在android.app.ActivityThread.access $ 900(ActivityThread.java:175)
       在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1308)
       在android.os.Handler.dispatchMessage(Handler.java:102)
       在android.os.Looper.loop(Looper.java:146)
       在android.app.ActivityThread.main(ActivityThread.java:5602)
       在java.lang.reflect.Method.invokeNative(Method.java)
       在java.lang.reflect.Method.invoke(Method.java:515)
       在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)
       在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
       在dalvik.system.NativeStart.main(NativeStart.java)
通过显示java.lang.NullPointerException引起的
       在java.lang.Enum中的$ 1,创建(Enum.java:43)
       在java.lang.Enum中的$ 1,创建(Enum.java:35)
       在libcore.util.BasicLruCache.get(BasicLruCache.java:54)
       在java.lang.Enum.getSharedConstants(Enum.java:209)
       在java.lang.Enum.valueOf(Enum.java:189)
       在com.facebook.login.LoginBehavior.valueOf(LoginBehavior.java:26)
       在com.facebook.login.LoginClient $请求。(LoginClient.java)
       在com.facebook.login.LoginClient $请求。(LoginClient.java)
       在com.facebook.login.LoginClient $ $请求1.c​​reateFromParcel(LoginClient.java:2521)
       在android.os.Parcel.readParcelable(Parcel.java:2111)
       在android.os.Parcel.readValue(Parcel.java:2020)
       在android.os.Parcel.readArrayMapInternal(Parcel.java:2321)
       在android.os.Bundle.unparcel(Bundle.java:249)
       在android.os.Bundle.getString(Bundle.java:1118)
       在android.content.Intent.getStringExtra(Intent.java:5145)
       在com.google.android.gms.analytics.Tracker $ zza.zziJ(未知来源:4000)
       在com.google.android.gms.analytics.GoogleAnalytics.isInitialized(来源不明)
       在com.google.android.gms.analytics.GoogleAnalytics $ zzb.onActivityStarted(来源不明)
       在android.app.Application.dispatchActivityStarted(Application.java:219)
       在android.app.Activity.onStart(Activity.java:1087)
       在android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:535)
       在android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1177)
       在android.app.Activity.performStart(Activity.java:5461)
       在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2386)
       在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2471)
       在android.app.ActivityThread.access $ 900(ActivityThread.java:175)
       在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1308)
       在android.os.Handler.dispatchMessage(Handler.java:102)
       在android.os.Looper.loop(Looper.java:146)
       在android.app.ActivityThread.main(ActivityThread.java:5602)
       在java.lang.reflect.Method.invokeNative(Method.java)
       在java.lang.reflect.Method.invoke(Method.java:515)
       在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1283)
       在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
       在dalvik.system.NativeStart.main(NativeStart.java)

我的Proguard的文件:

  -keep类android.support.v7.internal.view.menu **,** android.support.v7!{*;}
#-keep接口android.support.v7 ** {*。 }
-keep公共类android.support.v7.widget ** {*。 }
-keep公共类android.support.v7.internal.widget ** {*。 }-keep公共类*宽android.support.v4.view.ActionProvider {
    公众和LT; INIT>(android.content.Context);
}#保留源文件名,行号,并解析类/方法的名称,便于调试
-keepattributes的SourceFile,LineNumberTable
-keepnames类com.parse ** {*。 }#所需的解析
-keepattributes *注释*
-keepattributes签名
-dontwarn android.net.SSLCertificateSocketFactory
-dontwarn android.app.Notification
-dontwarn com.squareup。**
-dontwarn奥基奥。**#所需的crashlytics
-keep类com.crashlytics ** {*。 }
-keep类com.crashlytics.android。**-dontwarn android.support.v4。**#所需的eventbus
-keepclassmembers类** {
    @ org.greenrobot.eventbus.Subscribe<方法&GT ;;
}
-keep枚举org.greenrobot.eventbus.ThreadMode {*; }
-keepclassmembers类** {
    公共无效的onEvent *(**);
}

我的清单文件:

 <元数据
            机器人:名字=com.facebook.sdk.ApplicationId
            机器人:值=@字符串/ facebook_app_id/>        <活动
            机器人:名字=com.facebook.FacebookActivity
            机器人:configChanges =键盘| keyboardHidden |屏幕布置|屏幕尺寸|定位
            机器人:标签=@字符串/ APP_NAME
            机器人:主题=@安卓风格/ Theme.Translucent.NoTitleBar/>        <供应商的android:当局=com.facebook.app.FacebookContentProviderMyAppID
            机器人:名字=com.facebook.FacebookContentProvider
            机器人:出口=真/>

登录code:

  ParseFacebookUtils.logInWithReadPermissionsInBackground(这一点,
                Collections.singletonList(public_profile),
                新LogInCallback(){
                    @覆盖
                    公共无效完成(ParseUser用户,ParseException的错误){
                        如果(用户== NULL){                            mErrorMessage = ParseErrorHandler.handleParseError(ERR);
                            showContent(真);                        }否则如果(user.isNew()){                            syncData();                        }其他{                            syncData();                        }
                    }
                });

注意:要设置 minifyEnabled虚假应用程序正常运行,所以我使用ProGuard问题文件
结果而我知道Android的Facebook的SDK文档

解决方案

I just added this line and it's working:

-keep class com.facebook.** { *; }

这篇关于NullPointerExcepetion的Facebook SDK V4.5.0时启用的Proguard(当尝试使用解析库登陆)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-17 05:27
查看更多