我试图用Proguard混淆我的Java项目的代码。该项目已在Intellij上创建,并使用Gradle 2.2.1进行配置。我工作的计算机上有一个代理,因此Intellij无法访问Internet。
我试了几个小时找到一个简单的例子来混淆我的代码。
我试着这样做:
task proguardTask(type: proguard.gradle.ProGuardTask) { println "ha"}
task proguardTask(type: proguard.gradle.ProGuardTask) << { println "ha"}
我每次都有例外:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':proguardTask'.
> Index: 0, Size: 0
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at proguard.ClassPath.get(ClassPath.java:77)
这是我的build.gradle文件:
// Configuration des library java
project.ext.LIBJava = [
"project1",
"project2", "project2",
"project2_OS", "project2_UI",
"project3",
"project3_Windows"
]
//----------------------------------------------------------------------------------------------------------
ext.buildOnline = false
ext.buildOnlineMapsforge = false
ext.buildAndroid = false
//----------------------------------------------------------------------------------------------------------
apply plugin: 'idea'
apply plugin: 'eclipse'
apply plugin: 'java'
buildscript {
repositories {
mavenLocal()
mavenCentral()
flatDir dirs: 'C:/Path/To/Proguard/proguard-5.1/lib'
}
dependencies {
classpath ':proguard'
}
}
def filterProjects(filter) { return subprojects.findAll { project -> filter.contains(project.name) } }
allprojects {
group = 'org.libWin'
version = '0.1.1'
}
// Configuration injection for all subprojects
subprojects {
repositories {
mavenLocal()
mavenCentral()
}
}
//----------------------------------------------------------------------------------------------------------
task proguardTask(type: proguard.gradle.ProGuardTask) {
println "ha"
}
configure(filterProjects(project.LIBJava)) {
apply plugin: 'java'
dependencies {
if (buildOnline) { // On-line
testCompile group: 'junit', name: 'junit', version: 4.11 // "$jUnitVersion"
}
}
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
}
有谁知道问题的来源?如何使用Gradle轻松地使用Proguard对我的代码进行模糊处理?
感谢。
答案 0 :(得分:3)
您必须在Proguard任务中指定连字符。
示例:
task proguard(type: proguard.gradle.ProGuardTask) {
injars "build/libs"
}
答案 1 :(得分:0)
我可以使用proguard-gradle
插件来保护非Android项目。
在文件中指定您的proguard配置(保留选项)
指定输入和输出jars
指定您的项目所引用的依赖项(jar)。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:6.0.3'
classpath 'net.sf.proguard:proguard-base:6.0.3'
}
}
def dependsDir = "${buildDir}/libs/dependencies/"
def outputJar = "${buildDir}/libs/${rootProject.name}.jar"
task proguard(type: proguard.gradle.ProGuardTask) {
configuration 'proguard.conf'
injars "${outputJar}"
outjars "${buildDir}/libs/${rootProject.name}_proguard.jar"
libraryjars "${System.getProperty('java.home')}/lib/rt.jar"
libraryjars "${dependsDir}"
}
将上述gradle任务添加到build.gradle
执行gradle proguard