无法通过QAndroidJniObject创建java类

时间:2014-01-01 01:14:34

标签: java c++ qt qtandroidextras qandroidjniobject

尝试从c ++端创建一个java类,但不断崩溃

appBucksAdv.java

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

#include <QObject>
#include <QtAndroidExtras/QAndroidJniObject>

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

private:
QAndroidJniObject advClass_;

};

simpleJNI.cpp

#include "simpleJNI.hpp"

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

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

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

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

# 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):kernel / qcoreapplication.cpp:416(QCoreApplicationPrivate :: QCoreApplicationPrivate(int&amp;,char **,uint)):警告:未在main()线程中创建QApplication。

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

# W / dalvikvm(21397):dvmFindClassByName拒绝'org / qtproject / qt5 / android / QtExtractedText'

1。full messages

2。codes

1 个答案:

答案 0 :(得分:2)

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

E.g:

爪哇:

public class appBucksAdv extends QtActivity
{
 ...
 static appBucksAdv getActivity() { return thisActivity; }
 ...
}

C ++

QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("adv/appBucksAdv",
                                                                       "getActivity",
                                                                       "()Ladv/appBucksAdv;");