Начиная с пустого проекта Qt for Android, созданного с помощью Qt Creator, как мне выполнить нативный код Java?
Например, если у меня есть этот метод Java:
class HelloJava {
public static String sayHello(int a, int b) {
return "Hello from Java, a+b=" + (a+b);
}
}
И у меня есть этот метод Qt, который должен вызвать HelloJava.sayHello()
метод:
QString call_HelloJava_sayHello(int a, int b) {
// What goes in here?
}
Где я могу разместить Java-код в моем проекте, и что находится внутри call_HelloJava_sayHello()
метод?
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>());
Так что сигнал вашей функции должен быть "(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 / Android / Java. Вы никогда не должны копировать файлы из сборки
каталог, так как эти файлы были изменены в соответствии с текущей сборкой
Настройки.
Так что, кажется, вам нужно указать это, и Java-файлы будут автоматически развернуты.
Просто добавьте это в свой .pro-файл (при условии, что ваши исходники Java размещены на /path/to/project/myjava/src
:
android {
ANDROID_PACKAGE_SOURCE_DIR=$$_PRO_FILE_PWD_/android
QT += androidextras
}
_PRO_FILE_PWD_
переменная qmake, которая будет преобразована в каталог проекта