android - getArrayLength() 返回一个巨大的数字......

标签 android java-native-interface

我试图理解jni,所以我开始破解hellojni,然后遇到了这个问题。

我的java代码如下所示:

                    short[] buf = new short[16];
                    Log.d("hello", "before!");
                    write(buf, 0, 16);

我的 C 代码如下所示:

jint
Java_com_example_hellojni_HelloJni_write(JNIEnv* env, jshortArray buf, jint off, jint len)
{
    char debug[1024];
    int ii = 0;
    jsize cbuflen = (*env)->GetArrayLength(env, buf);

    sprintf(debug, "array length: %d", cbuflen);
    LOGD(debug);
...
...

输出为:

数组长度:1079082088

为什么数组长度这么大?

最佳答案

您能显示整个 JNI 文件吗?您没有在 JNI 函数中声明目标对象。通常参数是 JNIEnv* env、jobject javaObject 等。这意味着您认为的 jshortArray 实际上是指向 Java 对象的指针,这可以解释您得到的奇怪结果。

关于android - getArrayLength() 返回一个巨大的数字......,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880021/

相关文章:

Android 设备性能评估技术

Android:在 Google Map API v2 中绘制从 A 到 B 的路线

android - 从 .aar 文件 Android 中提取代码

android - 从 Android API 级别 28 应用程序调用 native 函数

java - 如何从虚拟机调用 native 函数?

android - KOIN 图重组时,委托(delegate)函数 viewmodel() 不刷新 viewmodel 实例

android - 在 Android 中更改自定义搜索栏的宽度

android - 在android中通过命令行使用FFMPEG

java - .net 的 GC.KeepAlive 的 Java 等价物是什么?

java - JNI 新的原始类型