问题描述
从使用Qt Creator创建的Android项目的空Qt开始,如何执行本机Java代码?
例如,如果我有这个java方法:
class HelloJava {
public static String sayHello(int a,int b){
returnHello来自Java,a + b =+(a + b);
}
}
我有这个Qt方法应该调用 HelloJava.sayHello()
方法:
QString call_HelloJava_sayHello b){
//这里有什么?
}
我将Java代码放在我的项目中, call_HelloJava_sayHello()
方法?
对主题非常详细:
// Java类
package org.qtproject.qt5;
class TestClass
{
static String fromNumber(int x){...}
static String [] stringArray(String s1,String s2){...}
}
// C ++代码
//第一个函数的签名是(I)Ljava / lang / String;
QAndroidJniObject stringNumber = QAndroidJniObject :: callStaticObjectMethod(org / qtproject / qt5 / TestClass,
fromNumber
(I)Ljava / lang / String;,
10 );
//第二个函数的签名是(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;
还有:
所以看来你需要指定并且自动部署java文件。
只需将它添加到你的.pro文件位于 / path / to / project / myjava / src
:
android {
ANDROID_PACKAGE_SOURCE_DIR = $$ _ PRO_FILE_PWD_ / android
QT + = androidextras
}
_PRO_FILE_PWD _
是将解析到项目目录的qmake变量。
Starting from an empty Qt for Android project, created with Qt Creator, how do I execute native Java code?
For example, if I have this java method:
class HelloJava {
public static String sayHello(int a, int b) {
return "Hello from Java, a+b=" + (a+b);
}
}
And I have this Qt method which should call the HelloJava.sayHello()
method:
QString call_HelloJava_sayHello(int a, int b) {
// What goes in here?
}
Where do I put the Java code in my project, and what goes inside the call_HelloJava_sayHello()
method?
The Qt doc is pretty verbose on the subject:
// 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>());
So the sig of your function should be "(I;I;)Ljava/lang/String;"
And also this:
So it seems you need to specify that and the java files are automatically deployed.
Just add this to your .pro file (assuming your java sources are placed at /path/to/project/myjava/src
:
android {
ANDROID_PACKAGE_SOURCE_DIR=$$_PRO_FILE_PWD_/android
QT += androidextras
}
_PRO_FILE_PWD_
is a qmake variable that will resolve to the project directory.
这篇关于如何使用QAndroidJniObject从Qt内部调用Java代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!