【问题标题】:Using proguard in java modules Android Studio在 Java 模块 Android Studio 中使用 proguard
【发布时间】:2016-11-15 17:27:03
【问题描述】:

我正在尝试在 Android Studio 上的 java 模块的 build.gradle 文件中使用 proguard,我需要对生成的源代码进行处理,但是当我像在其他项目中使用的那样使用 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

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

【问题讨论】:

    标签: java android-studio gradle proguard


    【解决方案1】:

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

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

    它应该可以工作!!!

    【讨论】:

      【解决方案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}"
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-29
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多