2014-07-10 10 views
7

Abbiamo sviluppato un'applicazione Web con il gioco 2.2.3 e vogliamo offuscarla. Sto cercando di usare il plugin sbt-proguard. Ho messo la linea qui sotto per PROJECT_FOLDER/progetto/plugins.sbt file disbt-proguard con riproduzione 2.2.3

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

e mettere le linee di seguito per PROJECT_FOLDER/build.sbt file di

proguardSettings 

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

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

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

non sono sicuro Proguard è funziona quando dico dist. sulla console di gioco e sul sito Web del plugin che dicono chiama proguard: proguard. Quando scrivo Proguard: Proguard su console di gioco, Giocare mi dà errore mostrato di seguito

[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 

C'è qualcuno di utilizzare questo plugin con quadro con successo il gioco?

risposta

0

Dopo aver bruciato alcuni giorni per provare a configurare correttamente sbt-proguard, ho rinunciato e ho appena utilizzato proguard dopo aver completato il progetto.

Invece di includere l'offuscamento come parte di una build, ho aperto il file zip generato da activator dist, ho offuscato il vaso e lo ho riportato di nuovo nella cartella lib con lo stesso nome. Ecco come farlo:

Proguard può funzionare da solo. È sufficiente scaricare il file tar da sourceforge ed eseguire il vaso con un file di configurazione piace:

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

Ora, per il file di configurazione, è necessario specificare:

  1. injar - il vaso di essere offuscato -
    Dopo aver decompresso il file zip creato da dist, cd nel file lib e trovato i nomi jar YOUR_PROJECT.VERSION-sans-externalized.jar, questo è il jar che è necessario nascondere.
  2. outjar - il percorso per il vaso offuscato (output). Alla fine del processo basta copiare questo jar nella directory lib e rinominarlo con il nome del jar in.

  3. keep - qualsiasi nome-pacchetto, classe, metodo o campo che deve mantenere il suo nome. Cose comuni da tenere in una webapp:

    3.1. nomi dei metodi del controller.

    3.2. qualsiasi classe utilizzata da play e specificata in application.conf come ErrorHandler, ApplicationLoader

    3.3. Tutte le classi generate dal router

  4. Librerie: includere tutte le librerie nel file lib tranne i propri jar.

Quindi il tuo conf.file di pro vorrei qualcosa di simile:

-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 

Dopo offuscamento è fatto ed è stato copiato il vaso di uscita posteriore al suo antico dir e il nome, è possibile comprimere indietro il vostro progetto e hai un progetto di gioco offuscato!

EDIT:

Consiglio vivamente guardando il proguard manual. Ha molti esempi per diversi setup e framework di progetto.