4

我目前正在尝试使用 ProGuard 混淆我的 Eclipse RCP 应用程序。问题在于它混淆了包名(My.Package.Class 类变成了类似 abc),但将包名保留在 MANIFEST.MF 的 Export-Package 部分。

这导致我的应用程序(实际上是一组 OSGi 捆绑包)无法运行,因为无法解析 MANIFEST.MFs 的 Export-Package 部分中指定的包名称。

ProGuard 混淆基于 OSGi 的 RCP 应用程序是否有人成功?基本上,我看到了两个选择:要么完全关闭包名称混淆,要么混淆 MANIFEST.MF 的 Export-Package 部分,但我找不到实现其中任何一个的方法。Proguard 似乎只混淆了 MANIFEST.MF 中的 Bundle-Activator 类名,跳过了所有其他部分。提前致谢!

4

3 回答 3

7

关闭包名混淆;我的意思是你通过告诉世界包名称暴露了哪些重要的商业价值?

如果这确实是个问题,请将所有代码移动到完全混淆的库中,并在非混淆插件中使用该库。

也就是说,请考虑完全不要在混淆上浪费时间。这将花费您的时间和金钱,并且是否有任何好处值得怀疑。当你的竞争对手开始拆解你有价值的工作时,你将编写下一个版本。那么为什么要打扰呢?

于 2009-03-19T14:11:09.357 回答
0

ProGuard 不支持内置的 OSGi 包混淆。查看Proguard 功能请求 #135了解更多信息。

于 2013-02-27T17:19:10.883 回答
0

为 OSGI 声明式服务使用以下保留选项

#Keep all annotations.
-keepattributes *Annotation*,Exceptions
#Keep all interfaces. This is required to run OSGi services.
-keep public interface *
#Keep all Component classes
-keep @org.osgi.service.component.annotations.Component class *
#Kepp all Component classes member functions with OSGi specific annotations
-keepclassmembers @org.osgi.service.component.annotations.Component class * {
   #Keep all methods with annotatios Reference.
   @org.osgi.service.component.annotations.Reference *;
   #Keep all methods with annotatios Activate.
   @org.osgi.service.component.annotations.Activate *;
}
于 2020-11-04T15:16:44.223 回答