0

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 rejecting '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): JNI_OnLoad が /data/data/org.qtproject.example.androidTest/lib/libandroidTest.so 0x4176efd0 に見つからず、init をスキップ

# W/Qt (21397): kernel/qcoreapplication.cpp:416 (QCoreApplicationPrivate::QCoreApplicationPrivate(int&, char**, uint)): 警告: QApplication は main() スレッドで作成されませんでした。

# W/dalvikvm(21397): 'org/qtproject/qt5/android/QtNativeInputConnection' を拒否する dvmFindClassByName

# W/dalvikvm(21397): 'org/qtproject/qt5/android/QtExtractedText' を拒否する dvmFindClassByName

1.メッセージ全文

2.コード

4

1 に答える 1

2

正しいアクティビティをロードしていますか? カスタム アクティビティをロードするには、マニフェストを編集する必要があります。また、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;");
于 2014-01-16T23:35:55.910 に答える