在java模块Android Studio中使用proguard

时间:2016-11-15 17:27:03

标签: java android-studio gradle proguard

我试图在build.gradle文件中使用proguard来获取Android Studio上的java模块,我需要模仿生成的源代码,但是当我在其他项目中使用proguard时,构建任务失败了。下面我展示了我尝试做的事情以及错误:

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

关于解决方案的任何想法?

2 个答案:

答案 0 :(得分:4)

我找到了自己的问题的解决方案,我希望这对需要它的人有所帮助。

包含在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"
}

它应该可以工作!!!

答案 1 :(得分:2)

如果你想在没有将jar从输出文件夹复制到你的android模块lib文件夹的情况下编写你的java lib,这是一个可行的解决方案:

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}"
        }
    }
}