3

Qt Creator で作成された空の Qt for Android プロジェクトから始めて、ネイティブ Java コードを実行するにはどうすればよいですか?

たとえば、次の Java メソッドがあるとします。

class HelloJava {
    public static String sayHello(int a, int b) {
        return "Hello from Java, a+b=" + (a+b);
    }
}

そして、HelloJava.sayHello()メソッドを呼び出す必要があるこのQtメソッドがあります:

QString call_HelloJava_sayHello(int a, int b) {
    // What goes in here?
}

プロジェクトのどこに Java コードを配置すればよいcall_HelloJava_sayHello()ですか? メソッドの内部には何が入りますか?

4

1 に答える 1

1

Qt docは、この件に関してかなり冗長です。

// Java class
package org.qtproject.qt5;
class TestClass
{
   static String fromNumber(int x) { ... }
   static String[] stringArray(String s1, String s2) { ... }
}


// C++ code

// The signature for the first function is "(I)Ljava/lang/String;"
QAndroidJniObject stringNumber = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/TestClass",
                                                                           "fromNumber"
                                                                           "(I)Ljava/lang/String;",
                                                                           10);

// the signature for the second function is "(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"
QAndroidJniObject string1 = QAndroidJniObject::fromString("String1");
QAndroidJniObject string2 = QAndroidJniObject::fromString("String2");
QAndroidJniObject stringArray = QAndroidJniObject::callStaticObjectMethod("org/qtproject/qt5/TestClass",
                                                                          "stringArray"
                                                                          "(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;"
                                                                           string1.object<jstring>(),
                                                                           string2.object<jstring>());

したがって、関数のsigは次のようになります"(I;I;)Ljava/lang/String;"

そしてこれも:

ANDROID_PACKAGE_SOURCE_DIR: この変数を使用して、デフォルトの Android パッケージ テンプレートに追加や変更を加えることができるディレクトリを指定できます。androiddeployqt ツールは、アプリケーション テンプレートを Qt からビルド ディレクトリにコピーし、その上に ANDROID_PACKAGE_SOURCE_DIR の内容をコピーして、既存のファイルを上書きします。他の設定を反映するためにソース ファイルの一部が自動的に変更される更新ステップは、結果のマージされたパッケージで実行されます。たとえば、アプリケーション用にカスタムの AndroidManifest.xml を作成する場合は、これをこの変数で指定されたフォルダーに直接配置します。カスタム Java ファイルを ANDROID_PACKAGE_SOURCE_DIR/src に追加することもできます。

注: カスタム バージョンのビルド ファイル (strings.xml、libs.xml、AndroidManifest.xml など) をプロジェクトに追加する場合は、必ず $QT/src/ にあるパッケージ テンプレートからそれらをコピーしてください。アンドロイド/ジャバ。これらのファイルは現在のビルド設定に一致するように変更されているため、ビルド ディレクトリからファイルをコピーしないでください。

そのため、それを指定する必要があるようで、Java ファイルは自動的にデプロイされます。

これを.proファイルに追加するだけです(Javaソースが次の場所にあると仮定します/path/to/project/myjava/src

android {
    ANDROID_PACKAGE_SOURCE_DIR=$$_PRO_FILE_PWD_/android
    QT += androidextras
}

_PRO_FILE_PWD_プロジェクト ディレクトリに解決される qmake 変数です。

于 2014-11-23T22:31:34.227 に答える