当前位置: 首页 > 知识库问答 >
问题:

如何用Proguard和SBT混淆fat Scala Jar

呼延英奕
2023-03-14

我已经设法对Scala代码进行了模糊处理,但我不知道如何对由SBT Assembly步骤构建的jar文件运行模糊处理。或者至少在ProGuard步骤中如何构建fat jar。我发现proguard有一个injar参数,但我不知道如何将它应用于build.sbt。谁能告诉我怎么才能做到这一点。

UPD,实际上,Proguard构建的JAR只包含模糊的类,而不包含Proguard忽略的类。

共有1个答案

鲍俊杰
2023-03-14

要对以前由assembly任务生成的jar文件运行Proguard模糊处理,您应该重写build.sbt中的inputs设置:

proguardInputs in Proguard := Seq((assemblyOutputPath in assembly).value)

这将指定fat jar作为ProGuard的单个输入。此外,您可能希望修改用于模糊处理的输入库。下面是一个如何排除所有库的示例:

proguardLibraries in Proguard := Seq()

最后禁用输入筛选器,因为您只有一个类源:

proguardInputFilter in Proguard := { file => None }

上面的设置是必需的,因为Proguard默认情况下会排除meta-inf/manifest.mf文件。此外,由于assembly任务已执行此步骤,因此不再需要合并步骤:

proguardMerge in Proguard := false

最后向Proguard任务添加assembly依赖项:

(ProguardKeys.proguard in Proguard) <<= (ProguardKeys.proguard in Proguard).dependsOn(assembly)
 类似资料:
  • 我正在尝试使用sbt发布ProGuard jar模糊处理的文件。到目前为止,我已经有了这段代码,但它并没有使用将模糊化的jar推送到本地ivy2 repo中: 你以前有没有做过这样的事情或者有什么想法? 非常感谢。

  • 我对混淆有问题。为了获得更好的想象力: JAVA代码 本机代码 在我想发布一个混淆版本之前,一切都很好。这个类中的Java类(例如)和方法的名称被proGuard重命名为“a”和“a()”(这可能并不总是相同的),但在本机代码中,方法和类的原始名称保持不变,因为它被硬编码为字符串,如下所示: ...有没有办法动态设置方法名?

  • 我正在努力解决JavaFX应用程序的模糊问题。以本项目为基础: Proguard配置文件:-dontoptimized-dontshrink 有人有JavaFX模糊处理的经验吗?

  • 问题内容: 是否可以仅将ProGuard用于混淆。我不希望ProGuard从我的项目中删除任何类。我打算使用ProGuard只是为了混淆,以防止进行反向工程。 问题答案: 是的,通过指定 您可以在ProGuard手册中找到有关所有配置选项的详细信息。 请注意,缩小和优化可能有助于防止反向工程。

  • 我有一个罐子用另一个罐子做库。我希望它们都被混淆。 引用ProGuard文档: ProGuard要求指定输入jar的库jar(或war、ears、zips或目录)。这些本质上是编译代码所需的库。ProGuard使用它们来重建正确处理所必需的类依赖关系。库罐子本身始终保持不变。您仍然应该将它们放在最终应用程序的类路径中。

  • 我尝试在android studio中使用Proguard,但Proguard似乎没有混淆类名,例如,我的应用程序结构和配置: 和配置 但当我尝试在应用程序中触发异常时: ADB控制台中列出了异常: 只有方法被混淆了,MainActivity.class没有