gpt4 book ai didi

Gradle:分发可执行的混淆 Jar 文件

转载 作者:行者123 更新时间:2023-12-03 03:06:08 25 4
gpt4 key购买 nike

我正在尝试使用带有 proguard 的 gradle 来混淆代码,然后生成一个 zip 文件进行分发。我想使用 distribution plugin ,但它始终包含由 jar 任务生成的 jar。有什么方法可以强制分发插件省略原始(非混淆)jar 并只包含混淆的 jar?我可以很容易地在原来的基础上添加混淆 jar,但我想分发混淆 jar 相反 因此生成的执行脚本针对混淆版本运行。

这是我的删节版 build.gradle 文件:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.3.3'
}
}

apply plugin: 'java'
apply plugin: 'application'

task obfuscate(type: proguard.gradle.ProGuardTask) {
configuration 'proguard.txt'

injars "build/libs/${rootProject.name}.jar"
outjars "build/libs/${rootProject.name}-release.jar"
}

jar.finalizedBy(project.tasks.obfuscate)

distributions {
main {
contents {
from(obfuscate) {
into "lib"
}
from(jar) {
exclude "*.jar"
}
}
}
}

我在发行版块中尝试了很多东西来尝试排除原始 jar,但似乎没有任何效果。

任何想法将不胜感激。

最佳答案

这不是最好的解决方案,但我能够通过在混淆步骤结束时重命名 jar 来解决这个问题。现在,我将原始 jar 命名为 <JAR_NAME>-original.jar我给混淆的 jar 原来的 jar 的名字。我仍然希望有更好的方法来做到这一点,但这似乎有效。

这是更新的、删节的 build.gradle文件:

import java.nio.file.Paths

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'net.sf.proguard:proguard-gradle:5.3.3'
}
}

apply plugin: 'java'
apply plugin: 'application'

def jarNameWithoutExtension = jar.archiveName.with { it.take(it.lastIndexOf(".")) }
def obfuscatedJarName = "${jarNameWithoutExtension}-release.jar"
def jarFileLocation = jar.archivePath.parent
def obfuscatedFilePath = Paths.get(jarFileLocation, obfuscatedJarName)

task obfuscate(type: proguard.gradle.ProGuardTask) {
configuration 'proguard.txt'

injars jar.archivePath
outjars obfuscatedFilePath.toString()

// Rename the original and obfuscated jars. We want the obfuscated jar to
// have the original jar's name so it will get included in the distributable
// package (generated by installDist / distZip / distTar / assembleDist).
doLast {
jar.archivePath.renameTo(Paths.get(jarFileLocation, "$jarNameWithoutExtension-original.jar").toFile())

obfuscatedFilePath.toFile().renameTo(jar.archivePath)
}
}

jar.finalizedBy(project.tasks.obfuscate)

关于Gradle:分发可执行的混淆 Jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48592618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com