首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过QAndroidJniObject创建java类

无法通过QAndroidJniObject创建java类
EN

Stack Overflow用户
提问于 2014-01-01 01:14:34
回答 1查看 1.3K关注 0票数 0

尝试从c++端创建一个java类,但是继续崩溃

appBucksAdv.java

代码语言:javascript
复制
package adv;

import org.qtproject.qt5.android.bindings.QtApplication;
import org.qtproject.qt5.android.bindings.QtActivity;

import android.os.Bundle;

public class appBucksAdv extends QtActivity
{
}

simpleJNI.hpp

代码语言:javascript
复制
#include <QObject>
#include <QtAndroidExtras/QAndroidJniObject>

class simpleJNI : public QObject
{
Q_OBJECT
public:
explicit simpleJNI(QObject *parent = nullptr);

private:
QAndroidJniObject advClass_;

};

simpleJNI.cpp

代码语言:javascript
复制
#include "simpleJNI.hpp"

simpleJNI::simpleJNI(QObject *parent) :
QObject(parent),
advClass_("adv/appBucksAdv") //crash when I create the java class
{
}

错误消息:# W/dalvikvm(21397):拒绝'org/qtproject/qt5/android/QtMessageDialogHelper‘的dvmFindClassByName

D/dalvikvm(21397):尝试加载lib /data/data/org.qtproject.example.androidTest/lib/libQt5QuickParticles.so 0x4176efd0

D/dalvikvm(21397):已加载在同一个CL 0x4176efd0中的共享库'/data/data/org.qtproject.example.androidTest/lib/libQt5QuickParticles.so‘

D/dalvikvm(21397):尝试加载lib /data/data/org.qtproject.example.androidTest/lib/libandroidTest.so 0x4176efd0

D/dalvikvm(21397):添加共享库/data/data/org.qtproject.example.androidTest/lib/libandroidTest.so 0x4176efd0

D/dalvikvm(21397):在/data/data/org.qtproject.example.androidTest/lib/libandroidTest.so 0x4176efd0中没有找到JNI_OnLoad,跳过init

W/Qt (21397):(QCoreApplicationPrivate::QCoreApplicationPrivate(int&,/qcoreapplication.cpp:416 QApplication char**,uint):警告:QApplication不是在主()线程中创建的。

W/dalvikvm(21397):拒绝'org/qtproject/qt5/android/QtNativeInputConnection‘的dvmFindClassByName

W/dalvikvm(21397):dvmFindClassByName拒绝‘org/qtproject/qt5 5/android/QtExtractedText’

1.完整讯息

2.电码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-16 23:35:55

您正在加载正确的活动吗?您需要编辑清单,使其加载您的自定义活动。您还应该避免自己调用QtActivity类的构造函数(advClass_("adv/appBucksAdv")),因为它将再次尝试准备应用程序。您可能需要的是活动的句柄,既然您已经在扩展QtActivity类,只需添加一个返回句柄的静态函数即可。

例如:

爪哇:

代码语言:javascript
复制
public class appBucksAdv extends QtActivity
{
 ...
 static appBucksAdv getActivity() { return thisActivity; }
 ...
}

C++

代码语言:javascript
复制
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("adv/appBucksAdv",
                                                                       "getActivity",
                                                                       "()Ladv/appBucksAdv;");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20864758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档