Qt应用开发(安卓篇)——Hello Qt On Android

一、前言

        这一篇从实际出发,讲述如何创建、编译和部署Qt On Android项目。

二、ADB调试

        ADB的全称为Android Debug Bridge,就是起到调试桥的作用,主要用于连接计算机与Android 设备,以便进行调试和数据传输。ADB 可以实现以下主要用途:

设备管理:允许用户连接和管理多个设备。

应用调试:通过命令行或图形界面与设备进行交互,包括安装、启动和停止应用程序,查看应用程序的日志信息,并进行性能分析。

文件传输:能够将文件从计算机传输到安卓设备,或者将设备上的文件复制到计算机上。

 2.1、ADB安装

        有安装过windows 安卓环境的就不说了,如果没有可以从ADB下载

Qt应用开发(安卓篇)——Hello Qt On Android

        下载之后解压到目录下,设置环境变量。

Qt应用开发(安卓篇)——Hello Qt On Android

        设置完环境变量,Win+R输入CMD打开windows Dos界面,输入adb,出现如下界面即安装成功。

Qt应用开发(安卓篇)——Hello Qt On Android

        Linux下安装Adb就更简单了,直接控制台输入sudo apt-get install adb,即安装完成。

Qt应用开发(安卓篇)——Hello Qt On Android

 2.2、ADB部署和调试

         接上文Qt应用开发(安卓篇)——Linux下Qt15.5.2配置Android-CSDN博客

         创建完项目,得到APK文件,插入USB调试线,充电线就是了。

        这里罗列一些常用的Adb命令,网上有很多,大家随便搜索就有了。

adb devices #查看连接设备

adb install test.apk # 安装应用

adb uninstall com.tbb.power #卸载应用,需要指定包名

adb shell dumpsys window | findstr mCurrentFocus #查看当前运行的包名和activity名

adb shell dumpsys activity | find "mResumedActivity"#Android8以上 查看当前运行的包名和activity名

adb shell dumpsys activity | find "mFocusedActivity"#Android7以下 查看当前运行的包名和activity名

adb shell pm list packages #列出手机装的所有app 的包名

adb shell am start com.tbb.power/org.qtproject.qt5.android.bindings.QtActivity #启动应用

adb shell am force-stop com.tbb.power #强制停止应用

adb shell dumpsys package #包信息Package Information

adb shell dumpsys meminfo #内存使用情况Memory Usage

adb logcat #查看日志,程序qdebug的内容在这里

adb logcat -c #清除log 缓存

adb reboot #重启

adb get-serialno #获取序列号

adb shell getprop ro.build.version.release #查看Android 系统版本

adb shell top -s 10 #查看占用内存前10 的app

adb push   #从本地复制文件到设备

adb pull   #从设备复制文件到本地

adb bugreport #查看bug 报告

adb help #查看ADB 帮助

 输入adb devices,出现如下则表示调试线连接正常,工况正确。

Qt应用开发(安卓篇)——Hello Qt On Android

安装apk,直接输入adb install,然后文件直接从桌面拖进来,出现success即安装成功。

Qt应用开发(安卓篇)——Hello Qt On Android

查看包名adb shell pm list packages,Qt默认的包名为org.qtproject.example.项目名称。

Qt应用开发(安卓篇)——Hello Qt On Android

卸载apk需要根据包名。

Qt应用开发(安卓篇)——Hello Qt On Android

 查看当前运行的包名和activity名称。

Qt应用开发(安卓篇)——Hello Qt On Android

Qt应用开发(安卓篇)——Hello Qt On Android

adb shell进入后台界面,exit退出shell,这里linux指令都能用,

Qt应用开发(安卓篇)——Hello Qt On Android

停止app和启动app

Qt应用开发(安卓篇)——Hello Qt On Android

三、创建秘钥文件和证书

        在实际的项目中,我们需要修改包名、activity名,提升apk的权限便于操作串口等操作,这时候我们就需要创建秘钥和证书。

3.1、创建秘钥

        勾选对包签名的复选框,

Qt应用开发(安卓篇)——Hello Qt On Android

 设置秘钥密码和信息。

Qt应用开发(安卓篇)——Hello Qt On Android

3.2、创建AndroidManifest

        选择Create Templates创建xml文件。

Qt应用开发(安卓篇)——Hello Qt On Android

        这里直接下一步

Qt应用开发(安卓篇)——Hello Qt On Android

        AndroidManifest提供可视化和源码两个界面,这里可以选择apk图标,包名,activity名、设置权限等入口。

Qt应用开发(安卓篇)——Hello Qt On Android

        安装之后可以看到apk的图标已经变成我们设置的鸡腿。

Qt应用开发(安卓篇)——Hello Qt On Android

查看包名,可以发现包名可以改成我们设置的名称。 Qt应用开发(安卓篇)——Hello Qt On Android

3.3、提高apk权限为system

        按照之前的操作,可以看到apk的权限是用户权限,如果需要提升为system,需要在xml文件添加android:sharedUserId=”android.uid.system”

Qt应用开发(安卓篇)——Hello Qt On Android

        添加完之后编译通过,但是安装会失败,异常报错INSTALL_FAILED_SHARED_USER_INCOMPATIBLE Qt应用开发(安卓篇)——Hello Qt On Android

         这是因为使用android:sharedUserId的同时,还需要android系统的key,不同的系统的key都是不一样的,一般只提供给专门的开发人员,即使你能百度到一个,也无法在其他android设备上使用。如果你是想在模拟器或者手机上设置该属性,可以直接放弃。

        这里我们从厂家得到两个文件,platform.x509.pem和platform.pk8,通过openssl对其进行编译。

Qt应用开发(安卓篇)——Hello Qt On Android

第一步
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt

第二步
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name platform

第三步
keytool -importkeystore -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass android -alias platform

在项目部署界面导入编译出来的.keystore文件,勾选Sign package,这里要注意,工程项目关闭重新打开之后,这里需要又重新设置,默认不保存,可以通过编译出来的文件在debug还是release文件夹下发现。 

Qt应用开发(安卓篇)——Hello Qt On Android

修改build.gradle文件。

Qt应用开发(安卓篇)——Hello Qt On Android

再次打包、安装,可以看到apk权限已经从用户变成为system权限。

Qt应用开发(安卓篇)——Hello Qt On Android

3.4、设置AndroidManifest默认打开方式

        在QtCreator中,双击AndroidManifest.xml会默认有两个界面,一个android manifest editor可视化界面和一个xml的文本界面,在后面我们会直接对xml文件进行文本编辑,修改activity等信息,这时候可视化界面就会有bug,一旦使用了可视化界面,会把xml文件中的activity设置回界面相关的内容,我们自定义后面添加的都会消失不见。

        我们需要在设置把该xml文件默认打开方式由android manifest editor改为文本编辑模式,才不会出现莫名其妙的问题,这点非常重要!!!

Qt应用开发(安卓篇)——Hello Qt On Android

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/d598088542.html