Compose Desktop应用程序的混乱.可能是ProGuard



我们的主要任务是在Windows上(最好在Mac上(制作GUI应用程序,因此不可能/极难找到源代码(Kotlin(。问题是如何做?

理想情况下,我想知道:

1.从我们的可执行文件/可执行文件中获取源代码的工具取决于.

2.将代码混淆到前一点的工具无法工作的程度的工具。

.3.下一节是关于我在Compose Desktop中做了什么,但我并不局限于此。例如,如果你知道如何用JavaFx或其他软件中的加密Kotlin代码制作一个工作项目,请告诉我。

迄今为止所做的工作:在Compose Desktop中生成了一个.msi文件,该文件在Windows上创建文件,其中有.jar文件。我在这里打开了一个.jar,它=我漂亮的源代码,虽然是Java,但甚至变量都没有重命名!

接下来,我根据模板更改了build.gradle.kts

重要提示=我不理解这个模板。也许我做错了什么。我会添加代码,看看。但至少.msi已经建成,并且像以前一样安装了其余部分。同样的故事=我打开.jar,看到Java中变量未重命名的源代码!但是再次=甚至不确定这个模板是否应该使.jar中的代码不可读。

注意=以前从未做过/学习过自定义模糊处理。我主要在Kotlin和安卓工作室工作。对于Compose Desktop安装了IntelliJ Idea。

代码:

build.gradle.kts

import org.jetbrains.compose.compose
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
buildscript {
dependencies {
classpath("com.guardsquare:proguard-gradle:7.2.1")
}
}
repositories {
google()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
}
plugins {
kotlin("jvm") version "1.6.10"
id("org.jetbrains.compose") version "1.1.1"
}
dependencies {
implementation(compose.desktop.currentOs)
}
val obfuscate by tasks.registering(proguard.gradle.ProGuardTask::class)
fun mapObfuscatedJarFile(file: File) =
File("${project.buildDir}/tmp/obfuscated/${file.nameWithoutExtension}.min.jar")
compose.desktop {
application {
mainClass = "MainKt"
nativeDistributions {
targetFormats(TargetFormat.Exe, TargetFormat.Msi, TargetFormat.Deb)
packageName = "untitled_04"
packageVersion = "1.0.0"
}
}
}

obfuscate.configure {
dependsOn(tasks.jar.get())
val allJars = tasks.jar.get().outputs.files + sourceSets.main.get().runtimeClasspath.filter { it.path.endsWith(".jar") }
.filterNot { it.name.startsWith("skiko-awt-") && !it.name.startsWith("skiko-awt-runtime-") } // walkaround https://github.com/JetBrains/compose-jb/issues/1971
for (file in allJars) {
injars(file)
outjars(mapObfuscatedJarFile(file))
}
libraryjars("${compose.desktop.application.javaHome ?: System.getProperty("java.home")}/jmods")
configuration("proguard-rules.pro")
}

proguard-rules.pro

-keepclasseswithmembers public class MainKt {
public static void main(java.lang.String[]);
}
-dontwarn kotlinx.coroutines.debug.*
-keep class kotlin.** { *; }
-keep class kotlinx.coroutines.** { *; }
-keep class org.jetbrains.skia.** { *; }
-keep class org.jetbrains.skiko.** { *; }
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
void sourceInformation(androidx.compose.runtime.Composer,java.lang.String);
void sourceInformationMarkerStart(androidx.compose.runtime.Composer,int,java.lang.String);
void sourceInformationMarkerEnd(androidx.compose.runtime.Composer);
}

以下是配置的设置

nativeDistributions {
...
buildTypes.release.proguard {
version.set("7.3.2")
configurationFiles.from(project.file("proguard-rules.pro"))
isEnabled.set(true)
obfuscate.set(true)
}
}

默认情况下,禁用模糊处理

最新更新