You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用中运行Kotlin脚本遇依赖冲突问题求助

解决Android中运行Kotlin脚本的依赖冲突与缺失问题

针对你遇到的重复类和JSR223依赖缺失问题,可按以下步骤解决:

1. 修复依赖冲突与缺失

首先更新Kotlin相关依赖到稳定新版本(推荐1.9.20),同时排除冲突模块并补充JSR223 API依赖:

implementation "org.jetbrains.kotlin:kotlin-scripting-jsr223:1.9.20"
implementation "org.jetbrains.kotlin:kotlin-script-runtime:1.9.20"
implementation "org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.20" {
    // 排除导致重复类的kotlin-daemon-client模块
    exclude group: 'org.jetbrains.kotlin', module: 'kotlin-daemon-client'
}
// 补充Android缺失的JSR223 API依赖
implementation "javax.script:javax.script-api:1.0.1"

原因说明

  • 重复类错误:kotlin-compiler-embeddable自带的kotlin-daemon-embeddable与kotlin-scripting-jsr223依赖的kotlin-daemon-client包含重复类,通过排除其中一个模块解决冲突。
  • ScriptEngineFactory访问错误:Android SDK默认未包含JSR223规范的API,需手动引入javax.script-api提供相关接口。

2. 优化代码执行逻辑

脚本编译与执行属于耗时操作,直接在主线程运行可能引发ANR,建议切换到子线程执行:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 使用lifecycleScope在IO线程执行脚本
        lifecycleScope.launch(Dispatchers.IO) {
            val engine = KotlinJsr223DefaultScriptEngineFactory().getScriptEngine()
            engine.eval("val x = 3")
            val result = engine.eval("x + 2")
            // 切回主线程处理结果
            withContext(Dispatchers.Main) {
                Log.d("test", "onCreate: result=$result")
            }
        }
    }
}

3. 混淆规则配置(若开启混淆)

如果项目启用了代码混淆,需添加以下规则避免脚本相关类被混淆:

-keep class javax.script.** { *; }
-keep class kotlin.script.experimental.jsr223.** { *; }
-keep class org.jetbrains.kotlin.com.intellij.** { *; }

内容的提问来源于stack exchange,提问作者Taylor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:15:00