我们的主要任务是在Windows上(最好也在Mac上)制作一个GUI应用程序,所以不可能/非常难以找到源代码(Kotlin)。问题是=如何做?
理想情况下,我想知道:
.1.从我们的可执行文件/可执行文件中获取源代码的工具取决于。
.2.用于代码混淆的工具,达到前一点的工具无法工作的水平。
.3.下一节是关于我在Compose Desktop中所做的事情,但我并不局限于此。例如,如果你知道如何在JavaFx或其他东西中使用加密的Kotlin代码制作一个工作项目,请告诉我。
到目前为止所做的工作:在Compose Desktop中生成了一个.msi
文件,该文件在Windows上创建文件,其中有.jar
文件。我在here中打开了一个.jar
,里面有它=我漂亮的源代码,虽然是Java的,但连变量都没有重命名!
接下来,我根据template更改了build.gradle.kts
重要提示=我不理解此模板。也许我做错了什么。我会添加代码,看看。但至少.msi
得到了构建,并像以前一样安装了其余部分。同样的故事=我打开.jar
,看到Java的源代码,变量没有重命名!但是再次=甚至不确定这个模板是否应该使.jar
中的代码不可读。
注意=以前从未执行/学习过自定义模糊处理。我主要使用Kotlin和Android Studio。对于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);
}
1条答案
按热度按时间t8e9dugd1#
以下是配置的设置
默认情况下禁用模糊处理