安卓ADB学习笔记
ADB(Android Debug Bridge)可以远程调试安卓设备,包括模拟器,可以进入终端模式(安卓本身是基于linux开发的)
一些命令不懂用法,可以网上查询,或者进入Shell后,输入 '命令 --h'来显示帮助,例如 'adb shell ip --h'
为了方便使用adb操控手机:
- 建议手机root,否则权限不够一些命令无法正常使用
- 开发者选项->USB调试
- 开发者选项->无线调试(可以通过WIFI直接进入手机的ADB,避免连着数据线麻烦,adb connect 192.168.40.125:5555直接连接)
- 开发者选项->USB安装
- 开发者选项->USB调试(安全设置)(打开这个才能模拟鼠标点击或修改权限)
- 开发者选项->停用ADB超时授权功能(避免过几天PC就失去连接权限需要重新设置)
- 开发者选项->默认USB配置->传输文件(这样一链接数据线就自动进入传输文件模式)
- 开发者选项->指针位置(可以显示手指点击的位置信息,有时候有用,按需打开)
- 开发者选项->启用MIUI优化(关闭)(这个功能默认开启,是启用MIUI系统对原生安卓增加的一些设置,例如通过ADB安装apk会弹窗询问,默认安卓是没有这个的,关闭后可以静默安装,不会再弹窗)
1.配置adb环境变量
以夜神模拟器为例,将模拟器安装路径里的bin路径配置到win的环境变量里即可
2.进入终端模式
adb shell 普通模式
adb root 超级用户
3.通过adb操作安卓
夜神安卓模拟器adb命令详解,可以实现类似安装应用,打开应用,打开应用某个页面,模拟鼠标点击等等功能
4.运行 adb push 时报错:failed to copy xx to '/system/' : Read-only file system
adb remount - remounts the /system partition on the device read-write
看到remount succeeded后,便可以了。意思是将目录重新挂载为可读写的。但是需要系统root过
5.解决 'adb root' 时提示 'adbd cannot run as root in production builds' - JeasonBoy - 博客园 (cnblogs.com)
6.截屏/录屏
adb shell screencap -p /sdcard/screenshot.png
adb shell screenrecord --time-limit 5 /sdcard/demo.mp4 #--time-limit 5表示5秒后停止,不带参数则默认3分钟后停止
如果是Linux可以通过管道的方式直接将截取的结果推送到PC屏幕,但是Win上比较麻烦,简单的做法是先截屏保存到手机,再pull到电脑
7.使用adb指令获取手机点击坐标_adb点击坐标-CSDN博客
8.adb模拟点击,拖动,长按
参考:adb笔记1: 模拟点击、滑动、输入、按键&python中运行adb - 简书 (jianshu.com)
adb shell input tap 500 1000 #模拟点击 adb shell input swipe 250 250 300 300 #从(250,250)滑动到(300,300) adb shell input text 'string' #输入‘string’ adb shell input swipe 300 300 300 300 500 #模拟长按,因为没有专门长按的接口,通过滑动来模拟,滑动初始位置与结束位置一致,且时间设置为500毫秒 adb shell input keyevent 4 #模拟back 按键
更多Input的用法:
adb shell input Usage: input [<source>] <command> [<arg>...] The sources are: dpad keyboard mouse touchpad gamepad touchnavigation joystick touchscreen stylus trackball The commands and default sources are: text <string> (Default: touchscreen) keyevent [--longpress] <key code number or name> ... (Default: keyboard) tap <x> <y> (Default: touchscreen) swipe <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen) draganddrop <x1> <y1> <x2> <y2> [duration(ms)] (Default: touchscreen) press (Default: trackball) roll <dx> <dy> (Default: trackball)
按键值:
KEYCODE_UNKNOWN=0; KEYCODE_SOFT_LEFT=1; KEYCODE_SOFT_RIGHT=2; KEYCODE_HOME=3; //home键 KEYCODE_BACK=4; //back键 KEYCODE_CALL=5; KEYCODE_ENDCALL=6; KEYCODE_0=7; KEYCODE_1=8; KEYCODE_2=9; KEYCODE_3=10; KEYCODE_4=11; KEYCODE_5=12; KEYCODE_6=13; KEYCODE_7=14; KEYCODE_8=15; KEYCODE_9=16; KEYCODE_STAR=17; KEYCODE_POUND=18; KEYCODE_DPAD_UP=19; KEYCODE_DPAD_DOWN=20; KEYCODE_DPAD_LEFT=21; KEYCODE_DPAD_RIGHT=22; KEYCODE_DPAD_CENTER=23; KEYCODE_VOLUME_UP=24; KEYCODE_VOLUME_DOWN=25; KEYCODE_POWER=26; KEYCODE_CAMERA=27; KEYCODE_CLEAR=28; KEYCODE_A=29; KEYCODE_B=30; KEYCODE_C=31; KEYCODE_D=32; KEYCODE_E=33; KEYCODE_F=34; KEYCODE_G=35; KEYCODE_H=36; KEYCODE_I=37; KEYCODE_J=38; KEYCODE_K=39; KEYCODE_L=40; KEYCODE_M=41; KEYCODE_N=42; KEYCODE_O=43; KEYCODE_P=44; KEYCODE_Q=45; KEYCODE_R=46; KEYCODE_S=47; KEYCODE_T=48; KEYCODE_U=49; KEYCODE_V=50; KEYCODE_W=51; KEYCODE_X=52; KEYCODE_Y=53; KEYCODE_Z=54; KEYCODE_COMMA=55; KEYCODE_PERIOD=56; KEYCODE_ALT_LEFT=57; KEYCODE_ALT_RIGHT=58; KEYCODE_SHIFT_LEFT=59; KEYCODE_SHIFT_RIGHT=60; KEYCODE_TAB=61; KEYCODE_SPACE=62; KEYCODE_SYM=63; KEYCODE_EXPLORER=64; KEYCODE_ENVELOPE=65; KEYCODE_ENTER=66; KEYCODE_DEL=67; KEYCODE_GRAVE=68; KEYCODE_MINUS=69; KEYCODE_EQUALS=70; KEYCODE_LEFT_BRACKET=71; KEYCODE_RIGHT_BRACKET=72; KEYCODE_BACKSLASH=73; KEYCODE_SEMICOLON=74; KEYCODE_APOSTROPHE=75; KEYCODE_SLASH=76; KEYCODE_AT=77; KEYCODE_NUM=78; KEYCODE_HEADSETHOOK=79; KEYCODE_FOCUS=80;//*Camera*focus KEYCODE_PLUS=81; KEYCODE_MENU=82; KEYCODE_NOTIFICATION=83; KEYCODE_SEARCH=84; KEYCODE_MEDIA_PLAY_PAUSE=85; KEYCODE_MEDIA_STOP=86; KEYCODE_MEDIA_NEXT=87; KEYCODE_MEDIA_PREVIOUS=88; KEYCODE_MEDIA_REWIND=89; KEYCODE_MEDIA_FAST_FORWARD=90; KEYCODE_MUTE=91;
9.adb通过PC操控手机页面上的UI元素(点击按钮,输入文本等)
adb shell uiautomator dump #导出当前屏幕上的页面的UI树信息
默认保存在/sdcard目录,文件名"window_dump.xml",然后在pull拉到电脑,是一个标准xml文件,打开可以看到上面有很多节点信息.
例如这是企业微信的登录页面,我们要在电脑上通过adb点击手机上的"微信登录"这个按钮,通过搜索找到"微信登录"这个节点,bounds则表示这个UI元素的包围盒,我们只需要点击包围盒的中间就行了,例如:
adb shell input tap 360 1218 (48+(672-48)/2, 1170+(1266-1170)/2)
另一种自动化方式比较简单,通过python库uiautomator2
来实现UI元素的操控:
import uiautomator2 as u2 # 连接到设备 d = u2.connect() # 或者WIFI连接的方式,使用 d = u2.connect('device_ip') # 查找按钮并点击,通过resource-id的方式来查找ui元素 d(resourceId="com.example.app:id/button_id").click() # 或者更简单,通过text元素的名字来查找 d(text="微信登录").click()
10.卸载/安装apk,运行/退出软件
adb install C:\Users\Administrator\Desktop\xxx.apk #安装程序,注,有的手机例如小米,用该命令还会弹出确认安装对话框,需要把MIUI优化关闭
adb uninstall com.xxx.xxx #卸载某个程序
adb shell dumpsys package com.xxx.xxx | grep -A 1 "Activity" #查询某个app的所有页面
adb shell am start -n com.xxx.xxx/com.example.testlibrary.MainActivity #启动某个app并进入某个页面,这个页面的完整名字,可通过上面的命令查找
adb shell am force-stop com.xxx.xxx #强行结束某个app
adb shell pm list packages #显示所有已安装的程序包名