Не удается создать класс Java с помощью QAndroidJniObject

Попробуйте создать Java-класс со стороны C++, но продолжайте падать

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): общий lib '/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): добавлен общий lib /data/data/org.qtproject.example.androidTest/lib/libandroidTest.so 0x4176efd0

# D / dalvikvm (21397): JNI_OnLoad не найден в /data/data/org.qtproject.example.androidTest/lib/libandroidTest.so 0x4176efd0, пропуская инициализацию

# W/Qt (21397): kernel/qcoreapplication.cpp:416 (QCoreApplicationPrivate::QCoreApplicationPrivate(int&, char**, uint)): ПРЕДУПРЕЖДЕНИЕ: QApplication не был создан в главном потоке ().

# W / dalvikvm (21397): dvmFindClassByName отклоняет 'org / qtproject / qt5 / android / QtNativeInputConnection'

# W / dalvikvm (21397): dvmFindClassByName отклоняет 'org / qtproject / qt5 / android / QtExtractedText'

1. полные сообщения

2. коды

1 ответ

Решение

Вы загружаете правильную активность? вам нужно отредактировать манифест, чтобы он загружал ваши собственные действия. Вам также следует избегать вызова конструктора класса QtActivity самостоятельно (advClass_("adv/appBucksAdv")), поскольку он попытается снова подготовить приложение. Вероятно, вам нужен дескриптор действия, и, поскольку вы уже расширяете класс QtActivity, просто добавьте статическую функцию, которая возвращает ему дескриптор.

Например:

Джава:

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

C++

QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod("adv/appBucksAdv",
                                                                       "getActivity",
                                                                       "()Ladv/appBucksAdv;");
Другие вопросы по тегам