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
相关产品推荐
相关产品推荐

