2014-07-10 2 views
7

Wir haben eine Webanwendung mit play 2.2.3 entwickelt und wollen diese verschleiern. Ich versuche, sbt-proguard Plugin zu verwenden. Ich habe die Linie unten an PROJECT_FOLDER/Projekt/plugins.sbt Dateisbt-proguard mit play 2.2.3

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

und setzen Sie die folgenden Zeilen zu PROJECT_FOLDER/build.sbt Datei

proguardSettings 

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

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

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

Ich bin nicht sicher proguard ist Arbeiten, wenn ich sage dist auf Spielkonsole und auf der Plugin-Website sagen sie Anruf Proguard: Proguard. Als ich proguard schreiben: proguard auf Spielkonsole, gibt Play-Fehler mir gezeigt, unter

[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 

Gibt es jemand erfolgreich dieses Plugin mit Spiel-Framework?

Antwort

0

Nach ein paar Tagen auf dem Versuch, sbt-proguard richtig konfiguriert zu machen, gab ich auf, und nur proguard nach dem Bau des Projekts.

Anstatt die Verschleierung als Build-Teil zu integrieren, öffnete ich die von activator dist generierte Zip-Datei, verschleierte das Jar und gab es zurück in den lib-Ordner mit dem gleichen Namen. Hier ist, wie es geht:

Proguard kann eigenständig laufen. Sie geben einfach die TAR-Datei aus sourceforge herunterladen und das Glas mit einem Konfigurationsdatei laufen mag:

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

nun für die Konfigurationsdatei, Sie müssen angeben:

  1. injar - das Glas verschleiert werden -
    Nach dem Entpacken der ZIP-Datei, die von der dist erstellt wurde, cd in die lib-Datei und fand die Jar-Namen YOUR_PROJECT.VERSION-sans-externalized.jar das ist das Glas, das Sie verschleiern müssen.
  2. outjar - der Pfad für das verschleierte Glas (Ausgang). Am Ende des Prozesses kopieren Sie einfach dieses jar zurück in das lib-Verzeichnis und benennen Sie es in den Namen des in jar um.

  3. keep - jeder Paketname, Klasse, Methode oder Feld, der seinen Namen behalten muss. Allgemeine Dinge, die Sie in einer Webanwendung aufbewahren sollten:

    3.1. Controller-Methodennamen.

    3.2. jede Klasse, die von play verwendet und in der application.conf wie ErrorHandler, ApplicationLoader

    angegeben wird 3.3. Alle vom Router generierten Klassen

  4. Bibliotheken - schließen Sie alle Bibliotheken in der lib-Datei mit Ausnahme Ihrer eigenen JAR-Dateien ein.

Also Ihre Konf.Pro Datei soll wie folgt erhalten:

-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 

Nach Verschleierung getan wird und Sie die Ausgabe Glas zurück zu seinem alt dir und dem Namen kopiert, können Sie Ihr Projekt zip zurück und Sie haben ein verschleiertes Spiel Projekt bekommen!

EDIT:

Ich empfehle wirklich am proguard manual suchen. Es gibt viele Beispiele für verschiedene Projekteinstellungen und Frameworks.