首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Proguard在非Android项目中使用Gradle的问题

Proguard在非Android项目中使用Gradle的问题
EN

Stack Overflow用户
提问于 2015-01-21 22:50:31
回答 2查看 3.1K关注 0票数 6

我正在尝试用Proguard混淆我的Java项目的代码。此项目是在Intellij上创建的,并使用Gradle 2.2.1进行配置。我工作的电脑上有一个代理服务器,所以Intellij无法访问互联网。

我花了几个小时来找一个简单的例子来混淆我的代码。

我试着去做:

代码语言:javascript
复制
task proguardTask(type: proguard.gradle.ProGuardTask) { println "ha"}
task proguardTask(type: proguard.gradle.ProGuardTask) << { println "ha"}

每次我都会得到一个异常:

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
// 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的代码?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-07-11 10:45:33

您必须在您的Proguard任务中指定task。

示例:

代码语言:javascript
复制
task proguard(type: proguard.gradle.ProGuardTask) {
    injars "build/libs"
}
票数 3
EN

Stack Overflow用户

发布于 2020-11-12 17:59:26

我可以用插件proguard-gradle来保护一个非Android项目。

  • 在文件

中指定保护配置(保留选项

  • 指定输入和输出jars

  • 指定项目引用的依赖项(jars)。

buildscript {存储库{ mavenCentral() }依赖{ classpath 'net.sf.proguard:proguard-gradle:6.0.3‘classpath 'net.sf.proguard:proguard-base:6.0.3’}} def dependsDir =“${buildDir}/mavenCentral/ dependencies /”def outputJar = "${buildDir}/libs/${rootProject.name}.jar“任务前导(类型: proguard.gradle.ProGuardTask) {配置'proguard.conf‘命令”${outputJar}“outjars "${buildDir}/libs/${rootProject.name}_proguard.jar”libraryjars "${System.getProperty('java.home')}/lib/rt.jar“libraryjars "${dependsDir}”}

  • 将上述gradle任务添加到您的build.gradle

执行gradle proguard

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28070090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档