ATX [ATX 系列] 让 adb install 也能看到进度

codeskyblue · 2016年05月01日 · 最后由 Jia.Q 回复于 2020年07月29日 · 6999 次阅读

PS: 可能这是我第一次在 TesterHome 写文章 _^

adb 1.0.36 开始自带安装进度了,该文章暂停更新。

起源

通常在命令行下安装应用最简单的办法是使用adb install demo.apk 。但是安装比较大一点的应用,时间会花的比较久,而且看不到进度条,心情总是有些烦躁。看到 itools,豌豆荚之类的 PC 客户端都有安装时显示进度的功能,想来还是有办法实现的,于是就实现了一个。

效果

代码我是 python 写的,效果大概是这个样子

$ python -matx install demo.apk
 45% |=================                                                  |  [200M/500M] 5M/s

不光有进度还有速度,再也不用担心 adb 是不是死掉了。

原理

adb install分为两部,第一步 push 文件到手机上,第二步调用命令将文件转移到系统目录中。这其中 push 的进度是可以获取到的。

方法:

先启动 adb push 进程,然后每隔 0.5 秒钟调用一次 adb shell ls -l /data/local/tmp/_tmp.apk 获取到已经推送的文件的大小,再对比文件本身的大小,就可以知道进度了。
stackoverflow 还有纯 shell 版的。

安装

需要电脑的 python 版本是 2.7,没有别的依赖了。

pip install atx

装完之后就可以这么用了

python -matx install demo.apk

对了还支持 http 地址,像这个样子用

python -matx install http://example.com/demo.apk

内容更新:增加安装完后自动启动

python -matx install --start demo.apk
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 14 条回复 时间 点赞

赞一个~

话说 Install 进度能获取到吗?如果应用本身比较大,可能安装的时间也不短,如果安装也能有进度显示就最好了~

#1 楼 @chenhengjie123 安装包最终是复制到/data/data 目录下的,有可能也是可以的。不过平常关注最多的是安装包复制到手机这一步,因为数据线连接不稳定的原因,push 这一步失败的概率比较高。

#1 楼 @chenhengjie123 确认了下,push 之后的进度看样子是获取不到

python 3.4 怎么用?

#4 楼 @alfredhu 好像用不了哎,代码里面好多 3.4 不兼容的代码

哈哈~atx 的作者,看到活的啦~支持支持

进度条的意义不大吧感觉~

想了一下,应该还可以这样。

通过线程的方式启动adb install xx,push 部分可以根据楼主的方式回调出来。
但后续真正安装的 Progress bar 不需要做到真实,mock 一个出来就好。
循环获取管道里的信息,当 get 到 success 时,进度条直接 100%->finish,当出现 failed 时,进度条锁定,把错误抛出。

#7 楼 @anikikun 我觉得 lz 的意思其实主要还是给一个反馈,毕竟 adb 很多时候死不死没有人知道。。=。=。。进度条么。。nice to have

这个好玩

#8 楼 @monkey yeah,nice to have。细节体验

#6 楼 @jianjianjianbing 第一次发帖 _^ 以后估计还会写的

codeskyblue [该话题已被删除] 中提及了此贴 07月18日 18:02

#12 楼 @codeskyblue atx,屏幕录制的命令怎么写

—— 来自 TesterHome 官方 安卓客户端

http 下载的 apk 包都放到哪了呢?

codeskyblue [atx 系列] 安卓手机的快速截图 中提及了此贴 01月29日 12:52

adb 版本 1.0.41,不知道为什么在 adb --help 的显示中 push 没有-p 参数,而且部分情况下用了-p 参数也无法现实进度,最后用获取已推送文件大小的办法来计算推送进度,解决了问题,感谢!!!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册