带有ArrayList的JNI上的NoSuchMethodError

时间:2013-04-19 16:00:49

标签: android arraylist android-ndk java-native-interface

我正在开发一个Android应用程序,它使用JNI代码进行一些CPU密集型计算。我在Java上的一个本机方法将ArrayList作为参数传递给JNI层。

当我尝试使用ArrayList的get(int index)时:

jmethodID getAtIndex = env->GetMethodID(listClass, "get", "(I)Ljava/lang/Object");

我得到了:

NoSuchMethodError: no method with name='get' signature=
'(I)Ljava/lang/Object' in class Ljava/util/ArrayList;

但是,当我使用javap -s java.util.ArrayList获取该方法的签名时,我得到的签名与我在JNI代码上使用的签名完全相同。

有什么想法吗? 在此先感谢!!

2 个答案:

答案 0 :(得分:4)

您在类型签名的末尾缺少分号,Java类类型签名的格式如下:

L fully-qualified-class-name ;

因此ObjectLjava/lang/Object;,方法的完整类型签名为(I)Ljava/lang/Object;

答案 1 :(得分:4)

你签名错了。不要手工构建JNI签名:从javap -s的输出中复制和粘贴。在这种情况下,你错过了一个分号。