【发布时间】:2015-03-26 13:35:27
【问题描述】:
我在我的 android 项目中使用 proguard。 每当我打开 Android 版 Facebook 的共享对话框时,它都会变空。
facebook sdk 版本是 3.23.1
if(FacebookDialog.canPresentShareDialog(thisObj, FacebookDialog.ShareDialogFeature.SHARE_DIALOG)){
OpenGraphObject object = OpenGraphObject.Factory.createForPost("namespace:"+obj.object);
object.setProperty("title", obj.title);
object.setProperty("image", obj.image);
object.setProperty("url", obj.url);
object.setProperty("description", obj.description);
OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);
action.setType("namespace:"+obj.action);
action.setProperty(obj.object, object);
FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(thisObj, action, obj.object).build();
fbUiLifecycleHelper.trackPendingDialogCall(shareDialog.present());
}
此代码在没有 proguard 的情况下使用时完美运行,所有内容都可以轻松共享,我还在 Facebook 上正确提交了密钥哈希以用于不同的签名。
每当我使用 Proguard 混淆时,共享对话框中的标题、图像或描述为空,所有数据都会丢失,有时会显示错误,有时会无错误地关闭
-keep class com.facebook.** { *; }
-keepattributes 签名
我也使用了许多 proguard 标签,包括这些标签,但共享对话框完美运行的唯一情况是我通过标签“-dontobfuscate”禁用混淆。
希望有人遇到类似问题并可以帮助我。
有时日志会显示诸如序列化错误之类的错误,我也尝试了来自 proguard 官方网站的许多代码,如下所示,但这从未解决问题,自从我在 stackoverflow 上搜索问题并使用各种 proguard 编译 apk 文件以来已经 2 天了选项。
-keepnames class * implements java.io.Serializable
-keepclassmembernames class * implements java.io.Serializable {
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}
【问题讨论】:
-
Facebook sdks 表示您不需要执行任何额外步骤:developers.facebook.com/docs/android/getting-started#proguard.
-
@JaredBurrows 前一天 Facebook 页面显示了这个 -keep class com.facebook.** { *; } -keepattributes 签名
-
如果您使用最新的 4.0.0 SDK,您将不再需要采取任何特殊步骤。
-
@GokhanCaglar 我使用 eclipse 和 facebook 提供的指南仅适用于 android studio,你能帮忙将它导入 eclipse。
标签: android facebook proguard facebook-android-sdk facebook-share