首页 > 解决方案 > Java 的 ByteArray 的签名是什么?

问题描述

我试图onEventChannel通过 JNI 通过 C++ 调用:

class MainActivity: FlutterActivity(){
    companion object {
        @JvmStatic
        private fun onEventChannel(b: ByteArray): Int {
            Log.d(TAG, "onEventChannel");
            return 0;
        }
    }

我试过了,(Ljava/lang/byte;)I但它们都不起作用。(Ljava/lang/ByteArray;)IonEventChannel

java的签名是ByteArray什么?

标签: javakotlinjava-native-interface

解决方案


(免责声明:我不了解 Flutter,也没有使用过 JNI。)

没有java.lang.byte*之类的类,也没有java.lang.ByteArray.

在 Kotlin/JVM 上,ByteArray编译成一个简单的原始数组——byte[]在 Java 中会被调用。

这有 JVM 描述符[B。(你可以通过打印来看到这一点ByteArray(0).toString(),它以[B(在@和哈希码之前)开头。血淋淋的细节在JVM Spec中。)

所以我建议尝试[B


(* 有java.lang.Byte 但这是用于装箱字节的原始包装类。)


推荐阅读