大家知道 Uiautomator1.0 的时候,想脱机运行只要在启动脚本的命令中加上--nohup 命令就行
而对于基于 instrument 的 Uiautomator2.0 同样也可以通过 nohup 命令做到脱机运行
nohup 命令即为后台执行命令的意思,对于 Uiautomator2.0 想后台执行,命令格式如下:
adb shell "nohup am instrument -w com.uitest.uiautomator2test.test/android.support.test.runner.AndroidJUnitRunner >/sdcard/log.txt"
注意:在命令后面进行了重定向,如果不进行重定向,会报如下错误:nohup: //nohup.out: Read-only file system
原因是默认的路径没有这个权限
实测过程中 android8.1 的 OPPO R15 可行,但华为 Mate10 出现进程冻结的情况,从系统 log 中,猜测应该是华为系统自己做的处理:
Line 11613: 10-12 14:16:48.815 1041 11372 D GpsFreezeProc: addFreezeProcess pkg:com.uitest.uiautomator2test
当插上电源后,会进行解冻,脚本又能重新跑起来:
Line 12569: 10-12 14:16:58.842 1595 2079 I ash : Freeze com.uitest.uiautomator2test OK !
Android 系统目前权限管理越来越严,各家厂商对进程的处理也有不同。本例可以看出华为相对 OPPO 来说管控就比较严格
此外也可以通过带签名的 APP 端启动测试命令来达到脱机执行的目的,但是需要系统签名,成本更高
Mark:除了 nohup 和系统 APP 启动,应该还有其他方式,欢迎留言讨论。等有时间再研究一下