从使用Qt创建的Android项目的空Qt开始,如何执行本机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()方法中的内容呢?
发布于 2014-11-23 22:31:34
Qt医生在这个问题上非常详细:
// 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模板。and部署Qt工具将应用程序模板从Qt复制到构建目录,然后在此基础上复制ANDROID_PACKAGE_SOURCE_DIR的内容,覆盖所有现有文件。更新步骤,其中的部分源文件是自动修改,以反映您的其他设置,然后运行的结果合并包。例如,如果您想为您的应用程序创建一个自定义AndroidManifest.xml,那么将其直接放置到此变量中指定的文件夹中。您还可以在ANDROID_PACKAGE_SOURCE_DIR/src中添加自定义Java文件。 注意:当添加自定义版本的构建文件(如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变量,它将解析到项目目录。
https://stackoverflow.com/questions/27094100
复制相似问题