2016-11-15 109 views
1

我正在尝试在Android Studio上的java模块的build.gradle文件中使用proguard,并且我需要检索生成的源代码,但是当我使用proguard时项目构建任务失败。下面我显示了我想要做的和错误:在java模块中使用proguard Android Studio

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

我找到了解决我自己的问题,我希望这有助于需要它的人。

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

如果你想的ProGuard你的java lib中没有从它的输出文件夹复制的jar到你的Android模块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}" 
     } 
    } 
} 
相关问题