【问题标题】:How to obfuscate fat Scala Jar with Proguard and SBT如何使用 Proguard 和 SBT 混淆胖 Scala Jar
【发布时间】:2017-01-31 23:39:24
【问题描述】:

我已经设法混淆了我的 Scala 代码,但我不知道如何对由 sbt assembly 步骤构建的 jar 文件运行混淆。或者至少如何在proguard 步骤中构建一个胖罐。我发现 proguard 有一个 injar 参数,但我不知道如何将它应用于 build.sbt。有人可以指点我如何做到这一点。

UPD 实际上,Proguard 构建的 JAR 只包含混淆的类,而不是 Proguard 忽略的类中的一个类。

【问题讨论】:

    标签: scala sbt proguard obfuscation


    【解决方案1】:

    要对之前由 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
    

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

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

    【讨论】:

    • 嗨@Zyoma,我无法使用 sbt-proguard 插件。 Sbt 一直抱怨它无法解决依赖关系。您是否必须在 build.sbt 文件中添加解析器才能使 proguard 正常工作?谢谢。
    • 嗨@Zyoma,你运行的sbt命令是什么来产生混淆的jar?
    • 我不得不将最后一行更改为 (proguard in Proguard) := ((proguard in Proguard).dependsOn(assembly)).value 另外,插件似乎是 1.3 的 sbt 版本。* ,但我可能会弄错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多