qt for android 调用java代码 实现自动更新APP

8 篇文章 0 订阅

用的是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

 

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值