2014-07-10 100 views
7

我們使用play 2.2.3開發了一個Web應用程序,並且想要對其進行混淆。我正在嘗試使用sbt-proguard插件。我把線下到PROJECT_FOLDER /項目/ plugins.sbt文件sbt-proguard with play 2.2.3

addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2") 

,並把該線下方PROJECT_FOLDER/build.sbt文件

proguardSettings 

ProguardKeys.options in Proguard ++= Seq("-dontnote", "-dontwarn", "-ignorewarnings") 

ProguardKeys.options in Proguard += ProguardOptions.keepMain("Application") 

inConfig(Proguard)(javaOptions in ProguardKeys.proguard := Seq("-Xmx2g")) 

我不知道proguard的是當我說dist在播放控制檯和插件網站上工作時,他們說打電話proguard:proguard。當我寫的ProGuard:玩控制檯上的ProGuard,播放給了我錯誤下面

[info] Reading program jar [/Users/kamil/DEVELOPMENT/play-2.2.3/repository/local/net.sf.ehcache/ehcache-core/2.6.6/jars/ehcache-core.jar] (filtered) 
[info] Reading program jar [/Users/kamil/DEVELOPMENT/play-2.2.3/repository/cache/org.json/json/jars/json-20140107.jar] (filtered) 
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/jce.jar] 
[info] Reading library jar [/Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/rt.jar] 
[error] Error: The output jar is empty. Did you specify the proper '-keep' options? 
[trace] Stack trace suppressed: run last proguard:proguard for the full output. 
[error] (proguard:proguard) Proguard failed with exit code [1] 
[error] Total time: 35 s, completed 10.Tem.2014 09:45:23 

顯示是否有使用這個插件與遊戲框架成功地人?

回答

0

在試圖使sbt-proguard配置正確之後燒了幾天後,我放棄了,並在構建項目之後使用了proguard。

而不是將混淆作爲構建部分,我打開由activator dist生成的zip文件,混淆jar並將其返回到具有相同名稱的lib文件夾中。這裏是如何做到這一點:

Proguard可以自己運行。您只需從sourceforge下載tar文件並運行一個配置文件罐子喜歡:

java -jar /path/to/proguard/lib/proguard.jar @CONF_FILE 

現在的配置文件,您需要指定:

  1. injar - 罐子被混淆 -
    解壓縮由dist創建的zip文件後,cd進入lib文件並找到jar名稱YOUR_PROJECT.VERSION-sans-externalized.jar這是您需要混淆的jar。
  2. outjar - 混淆jar(輸出)的路徑。在這個過程結束時,將這個jar複製回lib目錄並將其重命名爲jar中的名稱。

  3. 保留 - 任何需要保留其名稱的包名,類,方法或字段。常見的事情,你應該保持在一個Web應用程序:

    3.1。控制器方法名稱。

    3.2。任何遊戲使用並在application.conf中指定的類,如ErrorHandler,ApplicationLoader

    3.3。所有路由器生成的類

  4. 庫 - 包含lib文件中除您自己的罐子以外的所有庫。

因此,你的conf。親文件應該像這樣的事情:

-injars /path/to/jar/project-version-sans-externalized.jar(!META-INF) 
-outjars /path/to/obfuscated/jar.jar 


-keepnames class com.example.ErrorHandler 
-keepnames class com.example.ApplicationLoader  

-keepnames class controllers.** 
-keepclassmembernames class controllers.** { 
    <methods>;  
} 

-keeppackagenames controllers.**, router.**, views.** 
-keep class router.** {*;} 
-keepnames class router.** {*;} 
-keepclassmembers class router.** {*;} 
-keep class views.** {*;} 
-keepnames class views.** {*;} 
-keepclassmembers class views.** {*;} 
-libraryjars /usr/lib/jvm/latest/jre/lib/rt.jar 
-libraryjars /path/to/lib/library1.jar 
-libraryjars /path/to/lib/library2.jar 

混淆步驟完成後,你複製輸出罐子回到其舊目錄和名稱,你可以壓縮回到你的項目,你已經有了一個模糊的遊戲項目!

編輯:

我真的建議看proguard manual。它有許多不同項目設置和框架的例子。