2

我正在为 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 代码中使用的签名完全相同。

有任何想法吗?提前致谢!!

4

2 回答 2

4

您在类型签名的末尾缺少分号,Java 类类型签名的形式为:

L fully-qualified-class-name ;

也是如此,该方法的完整类型签名将Object是.Ljava/lang/Object;(I)Ljava/lang/Object;

于 2013-04-19T19:50:37.323 回答
4

你签名错了。不要手动构造 JNI 签名:从 javap -s 的输出中复制和粘贴。在这种情况下,您缺少分号。

于 2013-04-20T00:17:16.080 回答