用的是qt 5.11.1
1:新建一个qt项目
2:找到项目---构建和运行----Build Android APK---- Create Templates ,点击,生成 android文件。
3:打开Visual Studio Code新建文件,保存为java文件,文件名为mmActivity(名字就这个,等你会了自己再命名),将以下代码复制进去保存。保存的时候要用UTF-8格式的保存。如果是用QT新建的java文件,它的格式是UTF-8 whit BOM的,要用Visual Studio Code打开,用UTF-8格式保存。否则会有错误 错误: 非法字符: '\ufeff'。 参考链接:AndroidStudio非法字符: '\ufeff'解决
package my.demo.myJava;
import org.qtproject.qt5.android.bindings.QtActivity;
import java.io.File;
import android.net.Uri;
import android.content.Intent;
public class mmActivity extends org.qtproject.qt5.android.bindings.QtActivity
{
public static void installApk(String filePath,QtActivity activity)
{
Intent intent = new Intent();
// 执行动作
intent.setAction(Intent.ACTION_VIEW);
File file = new File(filePath);
// 执行的数据类型
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
activity.startActivity(intent);
};
public static int haha()
{
return 8;
}
};
4:注意java文件里的第一行 package my.demo.myJava; 这个是包名,这个很重要,其他地方也用的到。这个包名也是java文件的路径名。
5:进入qt新建的项目的目录,在目录android里新建src文件夹,这个是java的源码路径。按照这个 package my.demo.myJava;,在src文件里新建my文件夹,进入my文件夹,新建demo文件夹,进入demo文件夹,新建myJava文件夹,进入myJava文件夹,将刚才新建的java文件mmActivity复制过来。 其中src文件夹一定是要的。 my/demo/myJava 文件夹是java文件的路径,如果换了java文件的路径,一定要修改 java文件的 这一句 package my.demo.myJava; 变成你对应的路径。
6:进入Qt在android里添加现有文件,将刚才的mmActivity.java文件添加进来。
7:修改代码
pro文件
在pro文件里添加 androidextras 模块
QT += androidextras
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
void installApk(const QString &filePath); //更新自己
};
#endif // MAINWINDOW_H
mainwindow.cpp 这里要注意,添加三个头文件
#include <QAndroidJniObject>
#include <QAndroidJniEnvironment>
#include <QtAndroid>
还要注意 QAndroidJniObject::callStaticMethod<void>(
"my/demo/myJava/mmActivity",
"installApk",
"(Ljava/lang/String;Lorg/qtproject/qt5/android/bindings/QtActivity;)V",
jFilePath.object<jstring>(),
activity.object<jobject>()
);
其中 my/demo/myJava/mmActivity 是我们新建的java的文件路径和文件名,是java的包名和类名。要保持一致。
还要注意 更新APP的安装包的路径:
QString filename = "/storage/emulated/0/shichun/android-build-debug.apk";
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAndroidJniObject>
#include <QAndroidJniEnvironment>
#include <QtAndroid>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString filename = "/storage/emulated/0/shichun/android-build-debug.apk";
installApk(filename);
}
void MainWindow::installApk(const QString &filePath)
{
QAndroidJniObject jFilePath = QAndroidJniObject::fromString(filePath);
QAndroidJniObject activity = QtAndroid::androidActivity();
QAndroidJniObject::callStaticMethod<void>(
"my/demo/myJava/mmActivity",
"installApk",
"(Ljava/lang/String;Lorg/qtproject/qt5/android/bindings/QtActivity;)V",
jFilePath.object<jstring>(),
activity.object<jobject>()
);
}
这样就搞定了。
源码在这里:https://download.csdn.net/download/u012230798/10958518