VS2015+QT5.9.2开发一个adb_tool.exe工具(二)

  • 前言
  • 开发思路
  • 原型图
  • 编码
  • 总结


前言

上一次做完adb_tool.exe的demo之后,本来想先研究一下单元测试,但是又来了几个需求说需要一个开机自启动、卸载和重启手机的功能。又开始倒腾变更内容的开发。
这里先附上一个adb命令速查地址,我认为写得比较全面:
https://www.wanandroid.com/blog/show/2310

开发思路

首先是直接使用adb命令操作并且实验,验证上面所讲的三个需求能否使用adb命令实现,然后再在QT界面实现功能,实验的结果如下:
自启动功能
查阅了一些资料没有很好的方案解决让应用开机自启,都引导我使用androidk开发才可以,目前只能先考虑手动启动应用。
应用启动的命令格式

adb shell am start [options] <INTENT>

此处发现一个关键难点就是获取应用包名和startAcitivity名,卸载功能也需要应用包名,它执行命令其实是下面这样的

adb shell am start com.tencent.qqmusic/.third.DispacherActivityForThird

com.tencent.qqmusic这个就是QQ音乐应用对应的包名

./third.DispacherActivityForThrid是它的startAcitivity名

这跟我下载的apk文件名完全不搭边

“b7f53650f0fa6c623a219df482dafd1b.apk”

然后我翻阅了一些资料最后确定了需要先查到应用包名才能查到startAcitivity名。

来看查看应用包名的使用

android adb reboot edl源码解析_ci


我使用了一下这几个命令参数,最后的结论是最好知道应用名,使用关键字参数,二选是<-3>参数显示第三方应用。这样可以过滤少一些。看实验结果

android adb reboot edl源码解析_adb_02


获取到包名之后就稍微简单一点了,至少卸载功能可以实现,下一步获取startAcitivity名,因为我们是需要启动应用,所以只能从应用详情获取到startAcitivity名,再看命令格式

adb shell dumpsys package <packagename>

只需要把包名参数输入即可,startAcitivity名位置在Activity Resolver Table中打印“包名/.”后跟的就是startAcitivity名,也就是整个[options]启动参数.

android adb reboot edl源码解析_包名_03

最后可以启动应用了,命令即开头那一行

adb shell am start com.tencent.qqmusic/.third.DispacherActivityForThird

此处觉得略坑是因为我能用命令安装apk但不能直接使用命令启动它,因为没有很好的办法直接获取到应用包名和startAcitivity名,至少现在没想到。
为什么我认为是难点,因为界面实现还需要获取应用包名和startAcitivity名,而通过上面的实验可以看出,我只能通过adb命令打印的消息中查找到这两个参数,大家可以看到打印的消息实在太多了,对于刚入门的我毫无头绪,不知道如何裁剪到我需要的参数,所以我打算实现用过滤的方式手动操作。
卸载功能
得到包名后直接执行卸载命令即可,看命令格式:

adb uninstall [-k] <packagename>

实验如下:

android adb reboot edl源码解析_c++_04


重启功能

重启功能比较简单,使用adb reboot即可

原型图

整理好思路后开始调整,比较随意没有做布局,因为我的艺术细胞不是很强哈,demo工程注重实现,

使用一个文本过滤暂时实现功能。

android adb reboot edl源码解析_adb_05

编码

查看包名

不小心遮挡了,截图遮挡部分为检查设备状态部分,每个功能基本都有。

编码思路是首先检查设备连接状态,再检查过滤输入是否为空,空值查看第三方应用,非空执行关键自检索。

里面有个isNull和isEmpty的使用卡了我一会,因为我在调试是在检查过滤输入是使用的是isNull,所以当我不输入任何内容时一直跳不进判断为真的代码。查阅了一下资料

isNull是对象为空

isEmpty是值为空

我在过滤输入获取的应该是值才对,所以应该使用Empty。

android adb reboot edl源码解析_adb_06


查看startActivity名

编码思路和查看包名一致

android adb reboot edl源码解析_adb_07

卸载应用

android adb reboot edl源码解析_c++_08


android adb reboot edl源码解析_c++_09

启动应用

android adb reboot edl源码解析_qt_10


重启手机

android adb reboot edl源码解析_qt_11


此次编码修改了第一次代码,文件名输入框没判空值,这次加了进去

加入isEmpty判断那一段即可

总结

这次增加三个功能使用1个工作日,测试基本功能能够使用。
已知问题:
1.查看包名弹出的第三方应用按行打印的,应用太多会超出屏幕,有可能影响查看包名,最好是用关键字过滤。
2.查看活动名弹出的提示窗也如此,不过不影响查看应用包名和startActivity名参数。
3.功能只能执行命令,用户需要从打印的消息中查看是否执行成功,可以自行看看有没优化空间。
4.可能出现执行命令手机不会响应导致界面卡死,暂未做处理。
好了,此篇即到此,遇到典型的问题可能会单独在问题钻研栏专题发布。
写得不好,仅供参考,欢迎骚扰指出问题。