用gradle混淆生成的脂肪罐

时间:2019-02-04 20:52:56

标签: gradle kotlin proguard

我正在用Kotlin创建一个桌面应用程序,并且试图混淆最终输出

我使用JavaFx和Kotlin开发应用程序。我将Gradle作为构建工具使用,并且我正在搜索如何对我的jar进行模糊处理,以避免在jar上进行反向工程。生成的jar是一个胖jar(所有库都在jar中)。我已经尝试在gradle.build中使用proguard,但是每次运行构建时,使用本地Java库类(例如Object,String等)都会出现很多“找不到引用的类”的情况。

这是我当前的保护任务:

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: ProGuardTask) {
    configuration 'proguard.txt'

    injars jar.archivePath
    outjars obfuscatedFilePath.toString()
    libraryjars files(configurations.compile.collect())
    libraryjars "/usr/lib/jvm/java-11-oracle/lib/rt.jar"
    doLast {
        jar.archivePath.renameTo(Paths.get(jarFileLocation, "$jarNameWithoutExtension-original.jar").toFile())
        obfuscatedFilePath.toFile().renameTo(jar.archivePath)
    }
}

jar.finalizedBy(project.tasks.obfuscate)

proguard.txt文件当前为空 错误示例为“警告:javafx.animation.Animation:找不到超类或接口java.lang.Object”

我希望在构建项目时生成一个混淆的jar文件,但是我所得到的只是编译错误

我希望有人可以帮助我解决我的问题

1 个答案:

答案 0 :(得分:0)

JShrinker是一个jar混淆工具,提供图形用户界面。如果您不限于Pro Guard,它可能会解决您的问题。它非常用户友好,可为您节省所有其他程序几乎无法避免的配置和磁头刮擦。