在 java 个模块 Android Studio 中使用混淆器
Using proguard in java modules Android Studio
我试图在 build.gradle 文件中为 Android Studio 上的 java 模块使用混淆器,我需要对生成的源代码进行混淆,但是当我将混淆器用作我曾经在其他项目中构建任务失败。下面我展示了我正在尝试做的事情和错误:
import proguard.gradle.ProGuardTask
apply plugin: 'java'
task proguardFiles(dependsOn: compileJava, type: ProGuardTask) {
//
}
Error:Cause: startup failed:
script '...Path\build.gradle': 1: unable to resolve class proguard.gradle.ProGuardTask
@ line 1, column 1.
import proguard.gradle.ProGuardTask
^
1 error
对解决方案有什么想法吗?
我找到了我自己的问题的解决方案,希望这对需要它的人有所帮助。
包含在 gradle 文件的顶部:
import proguard.gradle.ProGuardTask
在其他地方进入同一个文件或项目配置(gradle 文件)把这个:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.2.1'
}
}
最后定义您的自定义 proguardTask:
task proguardFiles(type: ProGuardTask, dependsOn: compileJava) {
printmapping "$buildDir/outputs/mapping/mapping.txt"
configuration 'proguard-rules.pro'
libraryjars files(configurations.compile.findAll {}.collect())
injars sourceSets.main.output
outjars "$buildDir/libs/myJarName-${version}.jar"
}
它应该可以工作!!!
如果您想保护您的 java 库而不将 jar 从其输出文件夹复制到您的 android 模块库文件夹,这是一个可行的解决方案:
import proguard.gradle.ProGuardTask
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.3.3'
}
}
task proguardFiles(type: ProGuardTask, dependsOn: compileJava) {
// make jar task wait for proguardFiles task finish
tasks.jar.dependsOn.add(proguardFiles)
println "proguarding"
printmapping "$buildDir/mapping.txt"
configuration 'proguard-rules.pro'
libraryjars files(configurations.compile.findAll {}.collect())
injars sourceSets.main.output
// files output type, don't use jar
outjars "$buildDir/libs/${project.name}"
delete "$buildDir/libs/${project.name}"
doLast {
println "copying product:${sourceSets.main.output.classesDir}"
// replace orginal class files with proguarded class files
delete "${sourceSets.main.output.classesDir}"
copy {
from "$buildDir/libs/${project.name}"
into "${sourceSets.main.output.classesDir}"
}
}
}
我试图在 build.gradle 文件中为 Android Studio 上的 java 模块使用混淆器,我需要对生成的源代码进行混淆,但是当我将混淆器用作我曾经在其他项目中构建任务失败。下面我展示了我正在尝试做的事情和错误:
import proguard.gradle.ProGuardTask
apply plugin: 'java'
task proguardFiles(dependsOn: compileJava, type: ProGuardTask) {
//
}
Error:Cause: startup failed:
script '...Path\build.gradle': 1: unable to resolve class proguard.gradle.ProGuardTask
@ line 1, column 1.
import proguard.gradle.ProGuardTask
^
1 error
对解决方案有什么想法吗?
我找到了我自己的问题的解决方案,希望这对需要它的人有所帮助。
包含在 gradle 文件的顶部:
import proguard.gradle.ProGuardTask
在其他地方进入同一个文件或项目配置(gradle 文件)把这个:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.2.1'
}
}
最后定义您的自定义 proguardTask:
task proguardFiles(type: ProGuardTask, dependsOn: compileJava) {
printmapping "$buildDir/outputs/mapping/mapping.txt"
configuration 'proguard-rules.pro'
libraryjars files(configurations.compile.findAll {}.collect())
injars sourceSets.main.output
outjars "$buildDir/libs/myJarName-${version}.jar"
}
它应该可以工作!!!
如果您想保护您的 java 库而不将 jar 从其输出文件夹复制到您的 android 模块库文件夹,这是一个可行的解决方案:
import proguard.gradle.ProGuardTask
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.3.3'
}
}
task proguardFiles(type: ProGuardTask, dependsOn: compileJava) {
// make jar task wait for proguardFiles task finish
tasks.jar.dependsOn.add(proguardFiles)
println "proguarding"
printmapping "$buildDir/mapping.txt"
configuration 'proguard-rules.pro'
libraryjars files(configurations.compile.findAll {}.collect())
injars sourceSets.main.output
// files output type, don't use jar
outjars "$buildDir/libs/${project.name}"
delete "$buildDir/libs/${project.name}"
doLast {
println "copying product:${sourceSets.main.output.classesDir}"
// replace orginal class files with proguarded class files
delete "${sourceSets.main.output.classesDir}"
copy {
from "$buildDir/libs/${project.name}"
into "${sourceSets.main.output.classesDir}"
}
}
}