2023-01-21 234
我有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应用程序开始,不会变得不舒服,但是当它调用第二种方法时,请称呼第一个C ++函数,但未调用第二个函数.我还有其他参数的方法,但它们都没有超载,因此它们各自的JNI签名不包含参数.
那么,我在做什么错?
您必须在原始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);
您应该使用javah工具来生成这些签名.
要使用它,构建具有native函数的类文件.您将获得class文件.
运行javah -jni com.organisation.class_with_native_func,它将为您生成标头文件.
它比自己编辑要干净得多.
以上所述是小编给大家介绍的在Android NDK中编写本地方法签名的正确方法是什么?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26336.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态