【问题标题】:Gradle task to obfuscate java application with Proguard使用 Proguard 混淆 Java 应用程序的 Gradle 任务
【发布时间】:2021-03-09 07:55:52
【问题描述】:
我需要混淆一个依赖于许多外部 jar 的 Java 应用程序。该应用程序由许多模块组成,每个模块都包含 API 和实现 jar。基本上我需要创建一个 gradle 任务来混淆所有这些 jar,这些 jar 可以稍后在 Jenkins 的构建过程中使用。关于 Proguard 的文档很多,但大部分都包含在 Android 应用程序中。
已经在这里参考了官方的 Proguard 文档:Proguard Gradle Plugin
【问题讨论】:
标签:
java
gradle
proguard
obfuscation
【解决方案1】:
我可以通过以下 gradle 配置来实现这一点
-
复制所有依赖的jar到一个目录
def dependsDir = "${System.getProperty('user.dir')}/dependencies/"
task copyDepends(type: Copy) {
from configurations.compile
into "${dependsDir}"
}
-
创建一个类型为proguard.gradle.ProGuardTask的 gradle 任务。injars 列表在目录中可用,并在 gradle 任务中迭代名称。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:6.0.3'
classpath 'net.sf.proguard:proguard-base:6.0.3'
}
}
task proguard(type: proguard.gradle.ProGuardTask) {
configuration 'proguard.conf'
def inputDir = new File("${System.getProperty('user.dir')}/inputJars")
def outputDir = "${System.getProperty('user.dir')}/inputJars"
println ("List of jars for obfuscation : ")
inputDir.eachFileRecurse (FileType.FILES) { file ->
println(file.getName())
injars file
outjars "${outputDir}/${file.getName()}"
}
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
libraryjars "${System.getProperty('java.home')}/lib/jce.jar"
libraryjars "${System.getProperty('user.dir')}/dependencies/"
}