我们的主要任务是在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)
}
}
默认情况下,禁用模糊处理