2016-09-23 76 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