手机进水或者摔坏屏幕导致触屏失效的时候,一般情况下,要么选择换屏,要么选择把手机扔掉。但其实如果有一根OTG线,手机中的资料还可以安全备份出来,或者还可以再利用起来,发挥一下余热做点别的事。
像上图一样,鼠标接上以后,就可以开始操作手机了。下面介绍一下几个常见的需求如何完成:数据备份、跑一些挂机的任务(本文所介绍的所有操作都是我曾经用过的,保证确实可行的方案)。
1. 数据备份
备份数据可以有多种方式实现目的:
- 通过文件浏览器(比如es)挂载局域网中的共享目录,把要备份的数据直接拷到共享目录,全程只需要鼠标点点就行。这是导数据的最佳方式,其它方式需要满足各式各样的奇葩条件,当然如果正好能满足的话,按自己喜好选择即可。
- 通过USB线连到手机,打开手机的文件传输后,直接从电脑中备份;
这个操作看起来很简单,但是存在一个致命的问题,接口不够:手机连电脑就连不了鼠标,连鼠标就连不了电脑,当手机接上电脑的时候,没有鼠标可用。解决这个问题的办法有两种,让出接口或者扩展更多的接口:- 蓝牙鼠标:先使用USB鼠标连手机,打开蓝牙并和蓝牙鼠标配对,一旦配对成功,USB鼠标就可以拔掉,空出来的接口就可以连电脑了。
- USB HUB:OTG线的另一端,不直接连手机,而是连接一个usb hub,这样扩展以后,手机可以同时连接多个USB设备。
- 正如之前所说,这两种方式都需要准备额外的东西,蓝牙鼠标和usb hub并不是每个人手上都有,所以这个方案只能用在凑巧手里有这些东西的场合。
- 支持批量传输的第三方软件(比如各种云盘);
- 蓝牙传输、QQ、微信文件传输也都是不错的选择,但是只适合文件较少的情况(或者不支持目录传输,或者速度过慢)。
2. 操控手机(简略介绍常见adb操作)
这个功能主要用在特殊场合,需要和安卓开发套件中的adb程序结合使用。比如有一些软件不想在自己主力手机上运行(不点名是哪些软件了,懂的都懂),完全可以把这些软件全放到闲置手机上运行。
因为核心的功能都在adb命令上,所以可以借助批处理、shell、开发手段来调用adb命令,通过各种adb参数实现所需要的功能:
- adb devices,查看当前电脑通过adb连了哪些手机。
- adb shell <command>,在手机上shell环境执行命令(-s <serial>用于指定adb操作的对象是哪部手机,如果电脑上只有一部手机,-s 参数可以省略)。
- adb pull <remote_path> <local_filename>,从手机上复制文件或目录(这个功能也可以用于手机数据备份),省略第二个参数表示不做重命名操作。
- adb shell screencap -p <filename>,截屏并保存到指定位置(截完屏,再用pull命令取回电脑,就可以实现在PC上查看手机画面的功能)
- adb shell input keyevent <id>,向手机发送指定id的按键信息,常见的按键id如下
- 3 HOME键
- 4 返回键
- 19 ~ 22 依次是方向键上、下、左、右
- 24 ~ 25 分别是音量+和音量-
- 26 电源键
- 82 菜单键
- adb shell input tap x y,向手机屏幕的坐标(x, y)处发送点击命令,这个命令用于模拟人工点击。
2.0 在PC上安装安卓手机驱动,有了驱动电脑才能认出手机;
2.1 打开手机的DEBUG调试(不同机型位置也不一样,一般在“开发人员选项”下);
2.2.a 用USB线连上电脑,但还是会遇到手机连电脑拷数据的时候碰到的那个两难问题:连上电脑,手机会询问允许这台电脑调试手机,所以,要么使用USB HUB,要么直接使用蓝牙鼠标,要么参考2.2.b小节使用网络调试;
2.2.b 如果手机已经ROOT过,可以在终端里运行命令打开网络调试,这样PC上的adb就可以使用指定的IP和端口来连接手机进行网络调试,而无需占用USB接口(网络调试要求手机ROOT权限);
# 手机上运行
setprop service.adb.tcp.port 5555
stop adbd
start adbd
# PC上运行
adb tcpip 5555
adb connect 192.168.2.70
2.3 控制手机:
需要执行一整套动作的时候,可直接将前文提到的命令组合起来使用。例如希望获取手机上展现的内容:首先使用使用adb shell screencap -p <filename>截图,然后使用adb pull命令把这个截图文件拉到电脑。
无论什么任务,都需要事先过一遍流程,从点击应用图标开始,到后面的每一步界面上,点击屏幕何处,输入什么内容,直到任务完成。后面就按这个流程,一步一步操作手机,如果需要获取每一步的反馈,可以在每一步操作之前抓屏并取回截图文件:
- 切到初始界面(强制以某一个界面作为起点,比如主屏幕),如果不做这一步,后面的点击动作将没有定位依据;
- 然后按梳理好的流程依次点击屏幕指定位置,比如打开某个应用,点击某个应用的某个按钮(adb无法辩认何为按钮,点击按钮操作其实是人为指定一个坐标进行点击,这个坐标正好落于按钮区域之内而已);
- 如果有需要输入内容的地方,点击输入区域,用adb shell input keyevent命令填写内容;
- 需要格外注意的是,每一步之间需要留够足够的时间间隔,因为手机在响应每一步动作时,屏幕显示相应的内容都需要耗费一定的时间,如果不留够操作间隙,后一步操作会落在旧的窗口里,中断掉整个操作流程。
(这段就不放图了)