了解过QT for Andorid,发现qt 并不是万能的,很多时候还是需要调用JAVA的代码,
网上有一段QT调用 java代码的示例
Qt中调用java的方法
尝试之后发现按他的写法只能调用静态方法(我是QT5.5)
于是有尝试了其他的方式,写了一个QT调用 Java的 示例代码
完整代码
点我
下面是完整程序
1.写一个普通的JAVA类
//MyJavaClass.java
public class MyJavaClass
{
public static int mystatic(int n) //静态函数;
{
return n+1;
}
public int getNum() //没有参数;
{
return 12345678;
}
public int setNum( int n ) //有参调用
{
return n;
}
public String getStr(String perfix) //返回对象
{
String teststr = new String("hello " + perfix);
return teststr;
}
boolean boolTest() //返回bool类型
{
return true;
}
}
2.写一个C++类
//testclass.h
#include <jni.h>
class JavaHandler:public QObject
{
Q_OBJECT
public:
explicit JavaHandler(QObject *parent=0);
public:
//Q_INVOKABLE宏说明:因为我测试程序是用qml调用的
//返回值都是String是为了方便我在qml中显示调用结果
Q_INVOKABLE QString mystatic(int num); //静态方法
Q_INVOKABLE QString getNum(); // 无参
Q_INVOKABLE QString setNum(int num); //有参
Q_INVOKABLE QString getStr(QString perfix); //参数和返回值都是对象
Q_INVOKABLE QString boolTest(); //返回值为bool
private:
jobject m_TestObject; //java对象
};
3.C++源程序
这个示例代码的核心是
JNIEXPORT jint JNI_OnLoad(JavaVM vm,void )
基本上是原生JNI的接口,没有用QT提供的QAndroidJniObject 类
这样可以在非QT的环境里稍修改为也可以用
//testclass.cpp
#include "testclass.h"
static JavaVM* g_javaVM =