JS in Android (Google V8)

简介 由于项目动态化的需要,希望在 Android 应用中嵌入脚本语言。常见有 Lua 与 Js。Lua 的集成在之前的文章中已经介绍过。lua 是一个非常轻量的语言,专为嵌入而生,这是他的优势。但因为太轻了,可以说几乎没有标准库,这也使得用起来不是很方便。但目前最大的问题是 lua 脚本无法完美地运行在 web 与微信小程序中,而 js 在这方面有先天的优势。 为了更加紧密地结合原生应用,要求是不依赖 webview,而是程序本身与脚本语言进行交互。鉴于 js 不像 lua 那样原生提供了交互 api,所以必须考虑嵌入一个脚本引擎来实现。 目前常见的 js 引擎有下面几个 V8:是 Google 开发的一个开源 js 引擎,使用 c++ 作为开发语言,性能极高。j2v8 项目通过 JNI 将其移植到了 java。 Rhino: 是一个 Mozilla 开发的开源 js 引擎。它的特点是完全使用 java 实现,在和 java 的交互上有先天优势。并已经被作为 JDK6/7 标准库默认的脚本引擎。(在 Android 中被移除了,需要手动导入 jar)在 JDK8 中被 Nashorn 取代。 JsCore: 是 WebKit 内核默认的开源 js 引擎,由苹果使用 C 开发。AndroidJSCore 通过 JNI 移植到了 Android,但是此项目已停止维护并合并到 LiquidCore。 关于上面三个引擎在 Android 上的效率表现,可以参照网易杭州前端技术部的 测试文章。总体来看 Rhino 表现极差,毕竟是纯 java 实现也可以理解了。V8 表现优异,而且 j2v8 封装的很好,最终决定使用这个方案了。...

June 4, 2019 · Chenhe