2

我正在尝试用 proguard 混淆一个捆绑包。由于项目特定的原因,我的包中包含库 jar,例如:

bundle.jar
   |
   |-META-INF
   |
   |-library.jar
   |
   \-org (and the rest of my source tree)

META-INF 中的 Manifest.mf 文件包括以下行:

Bundle-ClassPath: .,library.jar

这都是自动生成的,而且很好。

现在,当 proguard 试图混淆 library.jar 中的方法时,问题就出现了(假设我有充分的理由这样做)。在这些情况下,它不会找到 library.jar,因为它不是依赖库的一部分,并且 proguard 似乎忽略了清单文件中的 Bundle-Classpath 条目。

所以,问题是:这能做到吗?还是 proguard 完全与 osgi 无关,根本无法处理这些标签?有没有办法可以为 proguard 提供一个 in-jar 依赖项?

谢谢!

4

3 回答 3

2

为什么不在使用 Proguard 混淆之后而不是之前将捆绑包与它的嵌入式 JAR 组合起来呢?

于 2012-06-08T17:54:41.697 回答
2

是的,ProGuard 完全与 OSGi 无关。它故意独立于任何平台。

此外,ProGuard 处理类文件,可选地在 jars 内,可选地在 wars 内,可选地在 ear 内,可选地在 zips 内,但不处理 jars 内的 jars 内的类文件。

参照。ProGuard 手册 > 使用 > 类路径。

于 2012-06-08T21:40:34.460 回答
1

如果您使用 bnd(maven、bndtools 等),您可以展开一个 jar 文件。使用以下说明:

 Include-Resource: @library.jar

在这种情况下,您将获得一个也可以在类路径上使用的普通 JAR。这对混淆器应该没有问题。如果要从此库中导出包,请使用 -exportcontents 而不是 Export-Package,它们具有相同的语法。

于 2013-06-10T06:31:38.623 回答