0

我在我的android项目中使用proguard。每当我打开 Facebook for Android 的共享对话框时,它都会变空。

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();
}
4

1 回答 1

0

较旧的 Facebook Sdk 在 proguard 中出现错误。现在,新的 Facebook Sdk 版本 4.0.0 和 4.0.1 没有给 proguard 带来任何错误。但是为了使用新的 sdk,我更新了以下内容 1) Eclipse 不受 Android 官方支持,因此迁移到 Android Studio。2) 使用 facebook sdk 作为 Gradle 依赖项而不是项目(就像我们在 Eclipse 或旧版本的 sdk 中所做的那样)。无需导入任何项目,只需将此行添加到 gradle depedencies

compile "com.facebook.android:facebook-android-sdk:4.0.1"

就是这样,在进行了这些更改之后,proguard 工作顺利,没有错误,但我肯定遇到了很多迁移问题。祝你好运

于 2015-04-13T12:30:40.603 回答