本文介绍了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.createFromParcel(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(当尝试使用解析库登陆)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!