我们使用 play 2.2.3 开发了一个 Web 应用程序,并希望对其进行混淆。我正在尝试使用sbt-proguard https://github.com/sbt/sbt-proguard插入。我把下面的行PROJECT_FOLDER/project/plugins.sbt file
addSbtPlugin("com.typesafe.sbt" % "sbt-proguard" % "0.2.2")
并将下面的行放入PROJECT_FOLDER/build.sbt file
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在游戏控制台和插件网站上他们说调用混淆器:混淆器。当我写作时混淆器:混淆器在 Play 控制台上,Play 给我错误,如下所示
[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
有人成功使用这个插件和play框架吗?
在花了几天时间尝试正确配置 sbt-proguard 后,我放弃了,只是在构建项目后使用了 proguard。
我没有将混淆作为构建部分,而是打开了由activator dist
,混淆了 jar 并将其返回到同名的 lib 文件夹中。操作方法如下:
Proguard 可以独立运行。您只需从以下位置下载 tar 文件即可来源锻造 http://sourceforge.net/projects/proguard/files/并用 a 运行 jar配置文件 like:
java -jar /path/to/proguard/lib/proguard.jar @CONF_FILE
现在对于配置文件,您需要指定:
- injar - 罐子被混淆 -
解压由 dist 创建的 zip 文件后,cd 进入 lib 文件并找到 jar 名称 YOUR_PROJECT.VERSION-sans-externalized.jar,这是您需要混淆的 jar。
outjar - 混淆后的 jar 的路径(输出)。在该过程结束时,只需将此 jar 复制回 lib 目录并将其重命名为 in jar 的名称。
-
keep - 任何需要保留其名称的包名称、类、方法或字段。您应该在网络应用程序中保留的常见内容:
3.1.控制器方法名称。
3.2. play 使用并在 application.conf 中指定的任何类,例如 ErrorHandler、ApplicationLoader
3.3.所有路由器生成的类
库 - 包含 lib 文件中除您自己的 jar 之外的所有库。
所以你的conf.pro文件应该是这样的:
-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
混淆完成并将输出 jar 复制回其旧目录和名称后,您可以压缩回您的项目,并且您已经得到了一个混淆的播放项目!
EDIT:
我真的建议看看混淆器手册 http://proguard.sourceforge.net/manual/。它有许多不同项目设置和框架的示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)