第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动 8
這個方法所做的事情就是:
446行: 首先通過Device類的executeShellCommand方法發送類似”adb shell getprop”的命令去獲得所有支持的系統屬性,這個方法最終調用的是AdbHelper類的executeShellCommand方法,它會接收一個專門用來對指定shell命令如getprop的返回值進行處理的接收類實例。AdbHelper的工作原理以及處理”adb shell getprop”返回結果的接收類GetPropReceiver我們在下一章”第7章 MonkeyDevice實現原理”中會進行詳細闡述。
449-451行: 獲得文件系統幾個重要的掛載點,相信這也是給DDMS的File Explorer功能用的
獲取完系統屬性后,我們就要看下新設備的文件系統的那幾個掛載點是怎么獲得的了,我們進入到對應方法:
483?? private void queryNewDeviceForMountingPoint(final Device device, final String name)
484???? throws TimeoutException, AdbCommandRejectedException, ShellCommandUnresponsiveException, IOException
485?? {
486???? device.executeShellCommand("echo $" + name,
new MultiLineReceiver()
487???? {
488?????? public boolean isCancelled() {
489???????? return false;
490?????? }
491
492?????? public void processNewLines(String[] lines)
493?????? {
494???????? for (String line : lines) {
495?????????? if (!line.isEmpty())
496?????????? {
497??????????? ?device.setMountingPoint(name, line);
498?????????? }
499???????? }
500?????? }
501???? });
502?? }
代碼8-4-10 DeviceMonitor - queryNewDeviceForMountingPoint
這個跟上面的發送getprop命令有類似的地方,只是命令換了”adb shell $name”和返回值處理類是重新實現的而已,但原理都一樣。這里$name換成上面調用方法形參對應的”EXTERNAL_STORAGE”,”ANDROID_DATA”和“ANDROID_ROOT”就行了,以下就是本人通過命令行執行的效果:
?
圖8-4-4 掛載點
最后把這個幾個掛載點保存起來到Device實例的mMountpoints這個映射表里面:
??67?? private final Map<String, String> mMountPoints = new HashMap();
...
?783?? void setMountingPoint(String name, String value) {
?784???? this.mMountPoints.put(name, value);
?785?? }
代碼8-4-11 Device - setMountingPoint
轉載于:https://blog.51cto.com/10988776/1732582
總結
以上是生活随笔為你收集整理的第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动 8的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 创意视觉应用︱基于深度学习的CVaaS计
- 下一篇: 解决stackoverflow打开慢不能