安卓ADB学习笔记

ADB(Android Debug Bridge)可以远程调试安卓设备,包括模拟器,可以进入终端模式(安卓本身是基于linux开发的)

一些命令不懂用法,可以网上查询,或者进入Shell后,输入 '命令 --h'来显示帮助,例如 'adb shell ip --h'

为了方便使用adb操控手机:

  1. 建议手机root,否则权限不够一些命令无法正常使用
  2. 开发者选项->USB调试
  3. 开发者选项->无线调试(可以通过WIFI直接进入手机的ADB,避免连着数据线麻烦,adb connect 192.168.40.125:5555直接连接)
  4. 开发者选项->USB安装
  5. 开发者选项->USB调试(安全设置)(打开这个才能模拟鼠标点击或修改权限)
  6. 开发者选项->停用ADB超时授权功能(避免过几天PC就失去连接权限需要重新设置)
  7. 开发者选项->默认USB配置->传输文件(这样一链接数据线就自动进入传输文件模式)
  8. 开发者选项->指针位置(可以显示手指点击的位置信息,有时候有用,按需打开)
  9. 开发者选项->启用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    #从(250250)滑动到(300300)
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                #显示所有已安装的程序包名

posted @ 2018-10-10 11:09  JeasonBoy  阅读(446)  评论(0编辑  收藏  举报