前言
上一篇介绍的是Qt5.15.2进行apk文件安装,本文档介绍的是,使用Qt6.2.2
虽然Qt6好多功能还在开发中,但新功能也很多如3D。笔者尝试了下,也可以正常使用的
本次文档,记录通过jni进行APK文件安装
一、实现方法
Qt使用jni安装的原理基本相同,实现方法主要分如下两种:
1.使用jni直接调用已写好的java代码
2.使用jni直接调用java接口
两者需要了解下java相关的代码,后者要求更高一点,每一步操作,都要经过jni。前者需要额外编写java代码,后者直接在C++中调用即可
笔者本次使用的是后者,我们看下如何实现
二、新建Qt项目
本文档着重实现apk安装,因此非相关部分,就不详细介绍了
1.新建一个Qt Quick项目
2.编写工具类Tool,并将实例注册到qml上下文中
3.qml界面放入一个Label和一个Button,并实现调用工具类Tool的installApk()函数
4.生成android相关配置文件
三、修改AndroidManifest ,注册FileProvider
1.修改包名Package name
此步非必要,但建议读者实际使用时,修改成自己的
2.添加权限Permissions
权限代码添加如下
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
...>
...
</application>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
</manifest>
(1)android.permission.REQUEST_INSTALL_PACKAGES
这个权限在下拉菜单中,是找不到的,需要手工添加到AndroidManifest.xml中
Android7.0引入“私有目录被限制访问”,“StrictMode API 政策”。
targetsdkversion大于25(android 7.1.1及以上),必须声明REQUEST_INSTALL_PACKAGES权限,见官方说明
(2)android.permission.READ_EXTERNAL_STORAGE
若android版本在6.0及以上,可以不用添加。因为从Android6.0开始,引入的动态权限控制(Runtime Permissions),需要运行时,实时获取才行。
3.添加FileProvider
若android版本在7.0及以上,必须要注册FileProvider
添加如下代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
...>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="edu.xidianqd.updatefileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/update_files" />
</provider>
..