在Android中运行Kotlin脚本遇依赖访问错误,是否缺少依赖?
解决方案
问题核心在于Android平台默认不包含JSR223规范的javax.script API包,你添加的Kotlin脚本依赖依赖于这套API,但Android SDK并未内置,因此出现找不到父类的错误。
步骤1:补充缺失的API依赖
在Module级别的build.gradle(或build.gradle.kts)中添加javax.script-api依赖,与你已有的Kotlin脚本依赖放在一起:
implementation "javax.script:javax.script-api:1.0" implementation "org.jetbrains.kotlin:kotlin-scripting-jsr223:1.7.22" implementation "org.jetbrains.kotlin:kotlin-script-runtime:1.7.22" implementation "org.jetbrains.kotlin:kotlin-compiler-embeddable:1.7.22"
步骤2:配置Java版本兼容性
Android Gradle Plugin需要明确指定Java 8+版本以支持Kotlin脚本引擎,在android代码块中添加以下配置:
android { // 其他已有配置... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } }
步骤3:(可选)添加ProGuard规则(若开启混淆)
如果你的项目启用了代码混淆,需在proguard-rules.pro中添加规则避免脚本相关类被混淆:
-keep class javax.script.** { *; } -keep class kotlin.script.experimental.** { *; } -keep class org.jetbrains.kotlin.com.intellij.** { *; }
验证代码
修改你的Activity代码,添加日志输出验证脚本执行结果:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) val engine = KotlinJsr223DefaultScriptEngineFactory().getScriptEngine() engine.eval("val x = 3") val result = engine.eval("x + 2") Log.d("ScriptDemo", "脚本执行结果:$result") // 输出应为5 } }
内容的提问来源于stack exchange,提问作者Taylor
相关产品推荐
相关产品推荐

