Android上使用的javascript引擎 - duktapeJava篇

在实际项目中找到两款可以在android平台使用的javascript引擎,duktapeJavaLiquidCore 本文重点关注 duktapeJava的使用

duktapeJava liquidCore
支持平台 java/android java/android
es6支持
使用便捷 一般
性能 一般
体积
相对于liquidCore duktapeJava对于java对象的支持更加便捷 , 但是需要用duktapeJava提供的转义工具,对javascript进行转义,否则无法引用java对象。

1. duktapeJava的基本使用

1.1 gradle 依赖引入

compile 'com.furture.react:DuktapeJava:1.2.0'
or
compile 'com.furture.react:DuktapeJava:1.2.0@aar'

1.2 加载javascript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
duktapeEngine = new DuktapeEngine();
duktapeEngine.execute(AssetScript.toScript(getBaseContext(), "duk.js"));
}

@Override
protected void onDestroy() {
if (duktapeEngine != null) {
duktapeEngine.destory();
duktapeEngine = null;
}
super.onDestroy();
}


  1. 首先新建一个duktape引擎对象
  2. AssetScript.toScript主要是为了转义,好让我们内置的java对象能够在javascript文件里面使用
  3. duktape.execute 执行语句

    以上四步就是实例化引擎并执行javascript的完整流程

2.javascript 调用java代码

  1. 首先要新建一个sprite 对象

sprite = new Sprite();

1
2
3
4
5
6
7
8
9
10
11
12
 	public class Sprite {

private double x = -1;

public double getX() {
return x;
}

public void setX(double x) {
this.x = x;
}
}
  1. 将sprite加载进javascript引擎

duktape.put(sprite,”sp”)

那么我们就可以在 javascript里面通过 sp.getX()调起 sprite里面的方法

2. java调用javascript函数和对象

javascript 语句如下

1
2
3
4
5
6
var obj = {
test : function() {
....
}
}

java代码:

1
2
3
4
5

JsRef ref = duktape.get("obj");
JsRef func = ref.get("test");
func.getEngine().call(func,"");