gpt4 book ai didi

java-native-interface - 在 Android NDK 中编写 native 方法签名的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 11:47:27 26 4
gpt4 key购买 nike

我有 NDK 库和相应的 Java 类的工作实现。但我无法向该类添加重载方法。目前我的类(class)包含:

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);

到目前为止,一切正常。但接下来我修改我的类(class):
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 签名不包含参数。

那么,我做错了什么?

最佳答案

您应该使用 javah生成这些签名的工具。

要使用它,请在您拥有 native 的位置构建类文件。功能。你会得到一个class文件。

运行javah -jni com.organisation.class_with_native_func ,它会为你生成一个头文件。

它比自己编辑要干净得多。

关于java-native-interface - 在 Android NDK 中编写 native 方法签名的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4031281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com