如何在Android应用的脚本主机中运行Kotlin脚本

5vf7fwbs  于 2023-09-29  发布在  Android
关注(0)|答案(1)|浏览(167)

我想在Android中运行Kotlin脚本(以字符串形式):

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val engine = KotlinJsr223DefaultScriptEngineFactory().getScriptEngine()
        engine.eval("val x =3")
        val result = engine.eval("x+2")
        Log.d("test", "onCreate: result=$result")
    }
}

我添加的依赖关系:

implementation "org.jetbrains.kotlin:kotlin-scripting-jsr223:1.4.0"
implementation "org.jetbrains.kotlin:kotlin-script-runtime:1.4.0"
implementation "org.jetbrains.kotlin:kotlin-compiler-embeddable:1.4.0"

但是我不能编译代码,错误是“重复的类”:

Duplicate class org.jetbrains.kotlin.daemon.common.WallTotalProfiler found in modules jetified-kotlin-daemon-client-1.4.0 (org.jetbrains.kotlin:kotlin-daemon-client:1.4.0) and jetified-kotlin-daemon-embeddable-1.4.0 (org.jetbrains.kotlin:kotlin-daemon-embeddable:1.4.0)

如果我移除kotlin-compiler-embeddable的依赖项,重复类错误就消失了。但是会出现一个新的错误:

Cannot access 'javax.script.ScriptEngineFactory' which is a supertype of 'kotlin.script.experimental.jsr223.KotlinJsr223DefaultScriptEngineFactory'. Check your module classpath for missing or conflicting dependencies

我该怎么做?

kse8i1jr

kse8i1jr1#

正如错误所说,你的模块中有重复的类。这意味着一个类包含在你添加的两个或多个依赖项中。您应该检查这些模块的依赖项,并使用exclude从它们中排除重复的依赖项,以便只有一个依赖项包含重复的依赖项。
您可以阅读更多关于Gradle的exclude here
此外,您可以使用Gradle的dependencies命令来生成项目所有依赖项的树。
请注意,还有其他方法可以解决此问题,只需搜索“删除Gradle模块中的重复类”或类似的内容:)

相关问题