Android的JNI JavaScript绑定是否有效地将TypedArray / ArrayBuffer作为数组传递给Java?

时间:2011-08-09 13:34:54

标签: javascript android java-native-interface v8

在Android JNI绑定中,您可以向JavaScript公开诸如method(int[] intArray) {}之类的Java方法,将其传递给JavaScript数组,并期望绑定将该JavaScript数组转换为int[]。 Android是否具有相同的处理能力Uint8Array()

1 个答案:

答案 0 :(得分:5)

在Android的WebView中运行的JavaScript引擎不支持Uint8Arrays或任何其他类型的数组(从2.3.3开始)。

编辑:我使用模拟器进行了一些测试,并且我要混合报告。

从好的方面来说,Android 3.x的WebView中的JavaScript引擎支持类型化数组,但Float64Array除外。

在负面,通过WebView.addJavascriptInterface()到Java的JNI接口根本不会转换类型。这是我用来测试它的代码:

var u8arr = new Uint8Array(4);
u8arr.set([2, 3, 5, 7]);
android.log(u8arr);

android.log()的Java函数看起来基本上是这样的:

public void log(final int[] data) {
    final String dataInfo = (data == null) ? "NULL" : "[" + data.length + "]";
    Log.d("JsJni", "data=" + dataInfo);
    /* ... */
}

当我使用标准的Array()类型的JavaScript对象调用android.log时,我会得到人们期望的结果(数组绑定到数据,类型转换等等)。当调用android.log时Uint8Array对象(或任何其他类型的数组,包括Int8Array,Int16Array和Int32Array),数据 null

Android 3.0和3.2之间的情况相同