diff --git a/jadx-plugins/jadx-script/jadx-script-plugin/build.gradle.kts b/jadx-plugins/jadx-script/jadx-script-plugin/build.gradle.kts index e0dac26f0..da555f312 100644 --- a/jadx-plugins/jadx-script/jadx-script-plugin/build.gradle.kts +++ b/jadx-plugins/jadx-script/jadx-script-plugin/build.gradle.kts @@ -10,4 +10,6 @@ dependencies { implementation(kotlin("scripting-jvm-host")) implementation("io.github.microutils:kotlin-logging-jvm:3.0.5") + + testImplementation(project(":jadx-core")) } diff --git a/jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/ScriptEval.kt b/jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/ScriptEval.kt index 01ea2029c..9b9f017e0 100644 --- a/jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/ScriptEval.kt +++ b/jadx-plugins/jadx-script/jadx-script-plugin/src/main/kotlin/jadx/plugins/script/ScriptEval.kt @@ -11,7 +11,6 @@ import kotlin.script.experimental.api.ResultWithDiagnostics import kotlin.script.experimental.api.ScriptCompilationConfiguration import kotlin.script.experimental.api.ScriptDiagnostic.Severity import kotlin.script.experimental.api.ScriptEvaluationConfiguration -import kotlin.script.experimental.api.compilerOptions import kotlin.script.experimental.api.constructorArgs import kotlin.script.experimental.host.toScriptSource import kotlin.script.experimental.jvmhost.BasicJvmScriptingHost @@ -39,9 +38,7 @@ class ScriptEval { } fun buildCompileConf(): ScriptCompilationConfiguration { - return createJvmCompilationConfigurationFromTemplate() { - compilerOptions(listOf("-Xuse-k2")) - } + return createJvmCompilationConfigurationFromTemplate() } fun buildEvalConf(scriptData: JadxScriptData): ScriptEvaluationConfiguration { diff --git a/jadx-plugins/jadx-script/jadx-script-plugin/src/test/kotlin/JadxScriptPluginTest.kt b/jadx-plugins/jadx-script/jadx-script-plugin/src/test/kotlin/JadxScriptPluginTest.kt new file mode 100644 index 000000000..a7a40a19d --- /dev/null +++ b/jadx-plugins/jadx-script/jadx-script-plugin/src/test/kotlin/JadxScriptPluginTest.kt @@ -0,0 +1,36 @@ +package jadx.plugins.script + +import jadx.api.JadxArgs +import jadx.api.JadxDecompiler +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.Test +import java.io.File +import kotlin.system.measureTimeMillis +import kotlin.time.DurationUnit +import kotlin.time.toDuration + +class JadxScriptPluginTest { + + @Test + fun integrationTest() { + val args = JadxArgs() + args.inputFiles.run { + add(getSampleFile("hello.smali")) + add(getSampleFile("test.jadx.kts")) + } + val elapsed = measureTimeMillis { + JadxDecompiler(args).use { jadx -> + jadx.load() + assertThat(jadx.classes) + .hasSize(1) + .allMatch { it.name == "HelloJadx" } + } + } + println("Elapsed time: ${elapsed.toDuration(DurationUnit.MILLISECONDS)}") + } + + private fun getSampleFile(file: String): File { + val resFile = javaClass.classLoader.getResource("samples/$file") + return File(resFile!!.toURI()) + } +} diff --git a/jadx-plugins/jadx-script/jadx-script-plugin/src/test/resources/samples/hello.smali b/jadx-plugins/jadx-script/jadx-script-plugin/src/test/resources/samples/hello.smali new file mode 100644 index 000000000..255b70928 --- /dev/null +++ b/jadx-plugins/jadx-script/jadx-script-plugin/src/test/resources/samples/hello.smali @@ -0,0 +1,10 @@ +.class LHelloWorld; +.super Ljava/lang/Object; + +.method public static main([Ljava/lang/String;)V + .registers 2 + sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream; + const-string v0, "Hello, World" + invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V + return-void +.end method diff --git a/jadx-plugins/jadx-script/jadx-script-plugin/src/test/resources/samples/test.jadx.kts b/jadx-plugins/jadx-script/jadx-script-plugin/src/test/resources/samples/test.jadx.kts new file mode 100644 index 000000000..f5f9462bf --- /dev/null +++ b/jadx-plugins/jadx-script/jadx-script-plugin/src/test/resources/samples/test.jadx.kts @@ -0,0 +1,20 @@ +import jadx.api.CommentsLevel + +val jadx = getJadxInstance() +jadx.args.commentsLevel = CommentsLevel.NONE +jadx.args.isDeobfuscationOn = false +jadx.args.renameFlags = emptySet() + +jadx.rename.all { name -> + when (name) { + "HelloWorld" -> "HelloJadx" + else -> null + } +} + +jadx.afterLoad { + println("Loaded classes: ${jadx.classes.size}") + jadx.classes.forEach { + println("Class '${it.name}':\n${it.code}") + } +}