一、前言
这一篇从实际出发,讲述如何创建、编译和部署Qt On Android项目。
二、ADB调试
ADB的全称为Android Debug Bridge,就是起到调试桥的作用,主要用于连接计算机与Android 设备,以便进行调试和数据传输。ADB 可以实现以下主要用途:
设备管理:允许用户连接和管理多个设备。
应用调试:通过命令行或图形界面与设备进行交互,包括安装、启动和停止应用程序,查看应用程序的日志信息,并进行性能分析。
文件传输:能够将文件从计算机传输到安卓设备,或者将设备上的文件复制到计算机上。
2.1、ADB安装
有安装过windows 安卓环境的就不说了,如果没有可以从ADB下载
下载之后解压到目录下,设置环境变量。
设置完环境变量,Win+R输入CMD打开windows Dos界面,输入adb,出现如下界面即安装成功。
Linux下安装Adb就更简单了,直接控制台输入sudo apt-get install adb,即安装完成。
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 <local> <remote> #从本地复制文件到设备
adb pull <remote> <local> #从设备复制文件到本地
adb bugreport #查看bug 报告
adb help #查看ADB 帮助
输入adb devices,出现如下则表示调试线连接正常,工况正确。
安装apk,直接输入adb install,然后文件直接从桌面拖进来,出现success即安装成功。
查看包名adb shell pm list packages,Qt默认的包名为org.qtproject.example.项目名称。
卸载apk需要根据包名。
查看当前运行的包名和activity名称。
adb shell进入后台界面,exit退出shell,这里linux指令都能用,
停止app和启动app
三、创建秘钥文件和证书
在实际的项目中,我们需要修改包名、activity名,提升apk的权限便于操作串口等操作,这时候我们就需要创建秘钥和证书。
3.1、创建秘钥
勾选对包签名的复选框,
设置秘钥密码和信息。
3.2、创建AndroidManifest
选择Create Templates创建xml文件。
这里直接下一步
AndroidManifest提供可视化和源码两个界面,这里可以选择apk图标,包名,activity名、设置权限等入口。
安装之后可以看到apk的图标已经变成我们设置的鸡腿。
查看包名,可以发现包名可以改成我们设置的名称。
3.3、提高apk权限为system
按照之前的操作,可以看到apk的权限是用户权限,如果需要提升为system,需要在xml文件添加android:sharedUserId="android.uid.system"
添加完之后编译通过,但是安装会失败,异常报错INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
这是因为使用android:sharedUserId
的同时,还需要android系统的key
,不同的系统的key
都是不一样的,一般只提供给专门的开发人员,即使你能百度到一个,也无法在其他android设备上使用。如果你是想在模拟器或者手机上设置该属性,可以直接放弃。
这里我们从厂家得到两个文件,platform.x509.pem和platform.pk8,通过openssl对其进行编译。
第一步
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文件夹下发现。
修改build.gradle文件。
再次打包、安装,可以看到apk权限已经从用户变成为system权限。
3.4、设置AndroidManifest默认打开方式
在QtCreator中,双击AndroidManifest.xml会默认有两个界面,一个android manifest editor可视化界面和一个xml的文本界面,在后面我们会直接对xml文件进行文本编辑,修改activity等信息,这时候可视化界面就会有bug,一旦使用了可视化界面,会把xml文件中的activity设置回界面相关的内容,我们自定义后面添加的都会消失不见。
我们需要在设置把该xml文件默认打开方式由android manifest editor改为文本编辑模式,才不会出现莫名其妙的问题,这点非常重要!!!