我正在尝试在我的Android应用中使用J2V8。对于Javascript中的console.log()
语句,我有一个console
变量以及类{{1}中的相应函数,如log
,error
,warn
等。 }。尽管我实现了此类,但是当我在应用程序中调用函数LogConsole
时,它将引发registerJavaMethod()
。我的代码的所有相关部分都可以在下面找到。
Console.kt
NoSuchMethodException
App.kt
import android.util.Log
interface Console {
fun error(msg: String)
fun warn(msg: String)
fun debug(msg: String)
fun log(msg: String)
}
class LogConsole : Console {
private val TAG = LogConsole::class.simpleName
override fun error(msg: String) {
Log.e(TAG, msg)
}
override fun warn(msg: String) {
Log.w(TAG, msg)
}
override fun log(msg: String) {
Log.i(TAG, msg)
}
override fun debug(msg: String) {
Log.d(TAG, msg)
}
}
运行时错误
...
private val v8 = V8.createV8Runtime()
val console = LogConsole()
val v8Console = V8Object(v8)
v8.add("console", v8Console)
v8Console.registerJavaMethod(console, "log", "log", arrayOf<Class<*>>(String::class.java))
v8Console.registerJavaMethod(console, "error", "error", arrayOf<Class<*>>(String::class.java))
v8Console.registerJavaMethod(console, "debug", "debug", arrayOf<Class<*>>(String::class.java))
v8Console.registerJavaMethod(console, "warn", "warn", arrayOf<Class<*>>(String::class.java))
v8Console.release()
...