/ Python

UIAutomator: 搭建安卓app自动化python脚本

========================
【环境】

编辑器:PyCharm
解释器:Python 2.7
自动化模块:uiautomator
调试器:adb 工具

python的uiautomator模块作者xiaocong,他在github说明文档里提到uiautomator模块使用的前提条件要求安装Android SDK,这玩意好像还要先搞JDK环境,搞定JDK+SDK后,确实是可以跑uiautomator脚本的。

本着偷懒和较真的心态,我思考那么如果没有JDK+Android SDK呢?于是把JDK和SDK的path变量给删了,确认java和javac命令无效,然后把adb路径指向我平时用来刷机的adb目录。运行uiautomator的test.py,手机正常开屏和关屏。

========================
【问题】

1.目录权限

我在安装模块后,调试代码,发现跑不通,会报错 IOError: RPC server not started
网上搜了一下,不得其解,有个攻略说别的问题的,他提到了logcat,
于是我用自己的adb bat脚本从手机里拉最新的log日志,
一行一行看下去,找到原因了。

E/dalvikvm(18312): Dex cache directory isn't writable: /data/dalvik-cache
I/dalvikvm(18312): Unable to open or create cache for /data/local/tmp/bundle.jar (/data/dalvik-cache/data@local@tmp@bundle.jar@classes.dex)
E/dalvikvm(18312): Dex cache directory isn't writable: /data/dalvik-cache
I/dalvikvm(18312): Unable to open or create cache for /data/local/tmp/uiautomator-stub.jar (/data/dalvik-cache/data@local@tmp@uiautomator-stub.jar@classes.dex)

两个jar文件没有写入,导致PC端的py代码的uiautomator无法正常运行,这个问题在xiaocong解答另一个2013的error反馈也得到验证,他提到了jar云云的问题。

尝试给/data/dalvik-cache和/data/local/tmp/添加权限773,这样other用户就可以写入了。再次跑test.py,通过,可以通过uiautomator控制手机,关闭屏幕,和开启屏幕。

2.如何修改手机的系统目录权限

a. 首先需要root,如果还没root一切都是扯淡
b. root后可以adb shell 用su获取超级权限,手机会弹窗问你是否授权,然后chmod 773 目录名
c. 也可以在手机端用文件管理器,比如ES或RE图形界面直接修改目录属性里的权限
d. 也可以写个关于adb的bat脚本,批处理。通过 echo 命令语句>temp.txt >>追加 adb shell<temp/.txt逐条执行

方式很多,最终能让python代码执行,能在相应目录创建所需的jar就行了

==========

关于JDK和SDK是否必须,暂时未知,等到跑更复杂的脚本时就知道了,反正随时可以装回来,先给屏蔽了。