QT for Android 安卓开发之调用Java程序
一直调不成,结果是个愚蠢的问题,备份记录一下
1.新建安卓工程
新建完之后,构建一下,就会在build下面出现一个AndroidManifest.xml文件,拷贝到代码目录,新建一个android文件夹,放到这个里面,然后在代码里面添加一下现有文件,加进来
目录结构如下:
2.双击AndroidManifest.xml,出现一个窗口,如下
按照package name新建多个文件夹,如下(必须一致,要不然报错),Java代码放到里面,(注意Java代码的文件名要和里面的类名要一致,否则报错)
3.Java调用
deepseek的例子贴一下(注意:第一行必须要写对,文件夹名/换成.)
剩下的自由发挥
//第一行必须要写对,文件夹名/换成.
package org.qtproject.example.NippleGrading_Android;import android.content.Context;
import android.widget.Toast;
import android.util.Log;public class MyJavaClass {private static Context m_context;public MyJavaClass() {// 默认构造函数}public static void setContext(Context context) {m_context = context;Log.d("MyJavaClass", "Context set successfully");}public static void showToast(String message) {Log.d("MyJavaClass", "Attempting to show toast: " + message);if (m_context != null) {Toast.makeText(m_context, message, Toast.LENGTH_SHORT).show();Log.d("MyJavaClass", "Toast shown successfully");} else {Log.e("MyJavaClass", "Context is null, cannot show toast");}}public static int addNumbers(int a, int b) {Log.d("MyJavaClass", "Adding numbers: " + a + " + " + b);return a + b;}public static String getSystemInfo() {String info = "Android " + android.os.Build.VERSION.RELEASE;Log.d("MyJavaClass", "System info: " + info);return info;}
}
4.C++调用
注意:第一个字符串,从src后的文件夹开始写起(
org/qtproject/example/NippleGrading_Android/MyJavaClass),一直到java的文件名,第二个字符串是函数名,下来是其他
// 对于返回对象的方法,使用 callStaticObjectMethodQAndroidJniObject result = QAndroidJniObject::callStaticObjectMethod("org/qtproject/example/NippleGrading_Android/MyJavaClass","getSystemInfo","()Ljava/lang/String;");QString systemInfo = result.toString();jint result1 = QAndroidJniObject::callStaticMethod<jint>("org/qtproject/example/NippleGrading_Android/MyJavaClass","addNumbers","(II)I",10, 20);qDebug() << "Java method result:" << result1;qDebug()<<"----------------------------------"+ systemInfo;
5.打印看一下