And*_*kov 21 java-native-interface android-ndk
我有一个NDK库和相应的Java类的工作实现.但我无法将重载方法添加到该类.目前我的班级包含:
package com.package;
public class MyClass
{
  public static native String getFileName();
  static
  {
    System.loadLibrary("mylib");
  }
}
我的jniwrappers.cpp文件有以下声明:
JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName(_JNIEnv* env, jobject thiz);
到目前为止一切正常.但接下来我修改了我的课程:
package com.package;
public class MyClass
{
  public static native String getFileName();
  public static native String getFileName(int index);
  ...
}
并添加到jniwrappers.cpp另一个声明:
JNIEXPORT jstring JNICALL
Java_com_package_MyClass_getFileName__I(_JNIEnv* env, jobject thiz, jint index);
它编译得很好,Android应用程序启动,没有得到UnsatisfiedLinkError,但是当它调用带参数的第二个方法时,第一个C++函数被调用但不是第二个.我在该类中有其他方法参数,但它们都没有重载,所以它们各自的JNI签名不包含参数.
那么,我做错了什么?
st0*_*0le 26
您应该使用javah工具生成这些签名.
要使用它,请构建具有native函数的类文件.你会得到一个class文件.
运行javah -jni com.organisation.class_with_native_func,它会为您生成一个头文件.
它比自己编辑它要清晰得多.
ric*_*chq 22
__现在它必须在原始getFileName函数的末尾添加一个它已经重载.您的2 C函数原型现在应该如下所示:
JNIEXPORT jstring JNICALL Java_com_package_MyClass_getFileName__
  (JNIEnv *, jclass);
JNIEXPORT jstring JNICALL Java_com_package_MyClass_getFileName__I
  (JNIEnv *, jclass, jint);
| 归档时间: | 
 | 
| 查看次数: | 20320 次 | 
| 最近记录: |