如何解决为什么从jobject或jclass或简单的QString创建QAndroidJniObject失败而没有错误?
更新:当我尝试从 jclass 创建 QAndroidJniObject 时,也会发生相同的问题。成功找到类,但未创建QAndroidJniObject且应用程序崩溃。
jclass cls = env->FindClass("com/example/MyLib/Person");
QAndroidJniObject p(cls);
这也会失败:
QAndroidJniObject string = QAndroidJniObject::fromString("TESTSTRING");
我有一个简单的示例,尝试在android应用程序中从C ++库调用Java函数。首先我要建立: libMyLib.so ,然后创建包含 libMyLib.so 的 AAR 库,然后在新测试中测试AAR android app project 。
在我的Qt库项目的libMyLib.so中,我有jniinterface.cpp
,这是函数:
JNIEXPORT void JNICALL Java_com_example_MyLib_LibraryClass_personTest(JNIEnv*,jobject,jobject person)
{
qDebug() << "C++ lib _________ Creating now QAndroidJniObject";
QAndroidJniObject p(person);
p.callMethod<void>("printPersonInfo","(I)V",29);
}
libMyLib.so
构建成功后,我将其复制到My_AAR_project\app\src\main\jniLibs\x86\libMyLib.so
的AAR android项目中
在此 My_AAR_project 中,我有两个简单的类: LibraryClass.java
public class LibraryClass {
public native void personTest(Person person);
public void testThePerson() {
Person p = new Person();
personTest(p);
}
static {
System.loadLibrary("MyLib");
}
}
另一个类是简单的 Person.java 类:
public class Person
{
public Person() {}
public static void printPersonInfo(int n)
{
System.out.println("Called printPersonInfo " + " Name: John" + " age: " + n);
}
}
现在,在我成功构建AAR库之后,我将其包含在我的测试android应用程序中,并且正在调用:
LibraryClass test = new LibraryClass();
test.testThePerson();
应用程序崩溃,最后输出是在创建QAndroidJniObject之前:
D /:C ++库_________现在创建QAndroidJniObject
A / libc:致命 信号11(SIGSEGV),代码1(SEGV_MAPERR),TID 19897中的故障加法器0x0 (ampleandroidapp),pid 19897(ampleandroidapp)
任何帮助或提示可能是什么问题?否则我做错了。
为简化我的工作,
- 在Java端创建Person对象
- 将Person对象传递给C ++库
- 在从Java接收到的Person对象上,从C ++调用
printPersonInfo
函数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。