本文介绍了如何使用QAndroidJniObject从Qt内部调用Java代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从使用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代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-29 02:22
查看更多