Proguard 删除了 Facebook Sdk 共享对话框内容
Proguard removed Facebook Sdk Share Dialog Content
我在 android 项目中使用混淆器。
每当我为 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 混淆时,共享对话框中的标题、图片或描述都是空的,所有数据都会丢失,有时会显示错误,有时会无误地关闭
-保持 class com.facebook.** { *; }
-keepattributes 签名
我还使用了许多混淆标签,包括这些标签,但共享对话框完美运行的唯一情况是我通过标签“-dontobfuscate”禁用混淆。
希望有人有类似的问题可以帮助我。
有时日志会显示序列化错误之类的错误,我也尝试了 proguard 官方网站的许多代码,如下所示,但这并没有解决问题,自从我在 Whosebug 上搜索问题并使用编译 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 Sdk 使用 proguard 时出错。
现在新的 Facebook Sdk 版本 4.0.0 和 4.0.1 没有给出任何混淆器错误。
但是为了使用新的 SDK,我更新了以下内容
1) Android 未正式支持 Eclipse,因此已迁移至 Android Studio。
2) 将 facebook sdk 用作 Gradle 依赖项而不是项目(就像我们在 Eclipse 或旧版本的 sdk 中所做的那样)。无需导入任何项目,只需将此行添加到 gradle depedencies
compile "com.facebook.android:facebook-android-sdk:4.0.1"
就是这样,在这些更改之后,proguard 可以顺利无误地工作,但我确实遇到了很多迁移问题。祝你好运
我在 android 项目中使用混淆器。 每当我为 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 混淆时,共享对话框中的标题、图片或描述都是空的,所有数据都会丢失,有时会显示错误,有时会无误地关闭
-保持 class com.facebook.** { *; }
-keepattributes 签名
我还使用了许多混淆标签,包括这些标签,但共享对话框完美运行的唯一情况是我通过标签“-dontobfuscate”禁用混淆。
希望有人有类似的问题可以帮助我。
有时日志会显示序列化错误之类的错误,我也尝试了 proguard 官方网站的许多代码,如下所示,但这并没有解决问题,自从我在 Whosebug 上搜索问题并使用编译 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 Sdk 使用 proguard 时出错。 现在新的 Facebook Sdk 版本 4.0.0 和 4.0.1 没有给出任何混淆器错误。 但是为了使用新的 SDK,我更新了以下内容 1) Android 未正式支持 Eclipse,因此已迁移至 Android Studio。 2) 将 facebook sdk 用作 Gradle 依赖项而不是项目(就像我们在 Eclipse 或旧版本的 sdk 中所做的那样)。无需导入任何项目,只需将此行添加到 gradle depedencies
compile "com.facebook.android:facebook-android-sdk:4.0.1"
就是这样,在这些更改之后,proguard 可以顺利无误地工作,但我确实遇到了很多迁移问题。祝你好运