在Android JNI绑定中,您可以公开Java方法(如method(int[] intArray) {}
JavaScript),将其传递给JavaScript数组,并期望绑定将该JavaScript数组转换为int[]
.Android是否具有相同的处理能力Uint8Array()
?
在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时,我会得到人们期望的结果(数组绑定到数据,类型转换等...)当使用Uint8Array对象调用android.log时(或者任何其他类型的数组,包括Int8Array,Int16Array和Int32Array),数据为空.
Android 3.0和3.2之间也是如此