Based on Dynamically evaluating templated Strings in Kotlin, I've tried, for special and rares uses, run Kotlin scripts stored as strings. My Android Studio
is updated (3.4.1). My computer runs Windows
.
The script test is stored here.
I've added JS223.Jar
file in the libs
folder, added as a library and put a dependence in the gradle (app).
The source code is
import javax.script.*
val engine = ScriptEngineManager().getEngineByExtension("kts")!!
engine.eval("val x = 3")
val res = engine.eval("x + 2")
Based on a real usage, I've copied from JetBrain/Kotlin in GitHub the setIdeaIoUseFallback()
code without dependence
However, with or without setIdeaIoUseFallback()
previous call , the above code gives a crazy runtime error in ScriptEngineManager()
call
java.lang.NoClassDefFoundError: Failed resolution of: Lsun/misc/Service
Javax.script.ScriptEngineManager.initEngines(ScriptEngineManager.java:90)
javax.script.ScriptEngineManager.access$0(ScriptEngineManager.java:86)
javax.script.ScriptEngineManager$1.run(ScriptEngineManager.java:80)
java.security.AccessController.doPrivileged(AccessController.java:41)
javax.script.ScriptEngineManager.init(ScriptEngineManager.java:78)
javax.script.ScriptEngineManager.<init>(ScriptEngineManager.java:51)
br.com.greatsolutions.paulo.kotlinfirst.MainActivity.onCreate(MainActivity.kt:65)