如何使用ProGuard混淆OSGi包?

时间:2009-03-19 14:03:59

标签: obfuscation osgi rcp proguard manifest.mf

我目前正在尝试使用ProGuard模糊我的Eclipse RCP应用程序。问题是它混淆了包名(类My.Package.Class变成类似a.b.c的东西),但是将包名保存在MANIFEST.MF的Export-Package部分中。

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

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

3 个答案:

答案 0 :(得分:6)

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

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

那就是说,考虑不要浪费你的时间进行混淆。这将花费你的时间和金钱,是否有任何好处是值得怀疑的。当您的竞争对手开始拆解您的宝贵工作时,您将编写下一个版本。那么为什么要这么麻烦呢?

答案 1 :(得分:0)

ProGuard不支持内置OSGi捆绑模糊处理。 查看Proguard feature request #135了解详情。

答案 2 :(得分:0)

为OSGI声明性服务使用以下keep选项

#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 *;
}