如何使用 Proguard 和 SBT 混淆胖 Scala Jar

How to obfuscate fat Scala Jar with Proguard and SBT

我设法混淆了我的 Scala 代码,但我不知道如何运行 混淆通过 sbt assembly 步骤构建的 jar 文件。或者至少如何在 proguard 步骤中构建一个 fat jar。我发现混淆器有一个 injar 参数,但我不知道如何将它应用到 build.sbt。谁能指出我该怎么做。

UPD 实际上,由 Proguard 构建的 JAR 仅包含混淆的 classes 而不是来自那些被 Proguard 忽略的单个 class。

为了 运行 Proguard 混淆之前由 assembly 任务构建的 jar 文件,您应该覆盖 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

最后将 assembly 依赖项添加到您的 Proguard 任务:

(ProguardKeys.proguard in Proguard) <<= (ProguardKeys.proguard in Proguard).dependsOn(assembly)