2016-09-23 90 views
4

我设法混淆了我的Scala代码,但我无法弄清楚如何针对由sbt assembly步骤构建的jar文件运行混淆。或者至少如何在proguard步骤中构建一个胖罐子。我发现proguard有一个injar的说法,但我不知道如何将它应用于build.sbt。有人能指点我怎么能做到这一点。如何使用Proguard和SBT混淆脂肪Scala Jar

UPD事实上,由Proguard构建的JAR仅包含混淆的类,而不包含那些被Proguard忽略的类。

回答

5

若要对,是由assembly任务之前建造你应该build.sbt覆盖inputs设置一个jar文件中的Proguard的混淆:

ProguardKeys.inputs in Proguard := Seq(baseDirectory.value/"target"/s"scala-${scalaVersion.value.dropRight(2)}"/s"${name.value}-assembly-${version.value}.jar") 

这说明你的脂肪罐子作为Proguard的单个输入。你也可能想要修改用于混淆的输入库。下面是如何排除所有图书馆的例子:

ProguardKeys.libraries in Proguard := Seq() 

最后禁用输入滤波器,因为你只有一类来源:

ProguardKeys.inputFilter in Proguard := { file => None } 

上述要求,因为Proguard的将排除META-INF/MANIFEST.MF文件中的设置默认。

ProguardKeys.merge in Proguard := false 

最后加assembly依赖于你的Proguard的任务:此外,由于assembly任务已经完成这一步一步合并不再需要

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

嗨@Zyoma,我无法使用SBT -proguard插件。 Sbt一直抱怨说它无法解决依赖关系。你是否必须添加一个解析器到你的build.sbt文件才能让proguard工作?谢谢。 – jithinpt

+0

嗨@Zyoma,你用什么命令来制作混淆的jar? – jithinpt