簡體   English   中英

在非 Android 項目中使用 Gradle 的 Proguard 問題

[英]Issues with Proguard using Gradle in a non-Android project

我試圖用 Proguard 混淆我的 Java 項目的代碼。 此項目已在 Intellij 上創建並使用 Gradle 2.2.1 進行配置。 我工作的計算機上有一個代理,因此 Intellij 無法訪問 Internet。

我嘗試了幾個小時來找到一個簡單的例子來混淆我的代碼。

我試圖做:

task proguardTask(type: proguard.gradle.ProGuardTask) { println "ha"}
task proguardTask(type: proguard.gradle.ProGuardTask) << { println "ha"}

我每次都有一個例外:

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 文件:

// 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 輕松混淆我的代碼?

謝謝。

您必須在 Proguard 任務中指定 injars。

例子:

task proguard(type: proguard.gradle.ProGuardTask) {
    injars "build/libs"
}

我可以使用插件proguard-gradle混淆一個非 Android 項目的proguard-gradle

  • 在文件中指定您的 proguard 配置(保留選項)

  • 指定輸入和輸出 jars

  • 指定您的項目引用的依賴項(jar)。

     buildscript { repositories { mavenCentral() } dependencies { classpath 'net.sf.proguard:proguard-gradle:6.0.3' classpath 'net.sf.proguard:proguard-base:6.0.3' } } def dependsDir = "${buildDir}/libs/dependencies/" def outputJar = "${buildDir}/libs/${rootProject.name}.jar" task proguard(type: proguard.gradle.ProGuardTask) { configuration 'proguard.conf' injars "${outputJar}" outjars "${buildDir}/libs/${rootProject.name}_proguard.jar" libraryjars "${System.getProperty('java.home')}/lib/rt.jar" libraryjars "${dependsDir}" }
  • 將上述 gradle 任務添加到您的 build.gradle

  • 執行gradle proguard

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM