我试图理解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/