zoukankan      html  css  js  c++  java
  • ADB命令详解

    感谢团队同事的辛勤劳动和付出。

    ------此处献上我的膝盖

    ----------------------------------------------华丽分割线-------------------------------------------

    原理:
     
    ADB是一个C/S架构的应用程序,由三部分组成:
    1. adb client --运行在pc端
        运行adb命令:尝试定位ADB服务器,找不到则启动一个服务器;
    adb client向ADB servcer发送服务请求。
    1. adb server--运行在pc端的后台进程
    作用:
    (1)检测USB端口感知设备的连接/拔除和模拟器实例的启动或停止;
    (2)监听adb client的请求并发送到对应的adbd上。
    1. adb demon (adbd) --运行在设备端、常驻进程
    作用: 连接ADB服务器,并且为运行在主机上的客户端提供一些服务。 
     
     
     
     
     
     
     
    基本用法
    1.设备连接
    USB连接:
    1. Android设备正常开机,通过USB线与电脑连接
    2. 开启开发者选项和USB调试模式
    3. 设备驱动状态正常
     
    无线连接(需借助usb):
    1.将 Android 设备通过USB与电脑相连,且两者连到同一个局域网
    2. 让设备在 5555 端口监听 TCP/IP 连接:adb tcpip 5555
    4. 断开 USB 连接。
    5. 通过设备IP地址连接设备。adb connect <device-ip-address>
    (断开无线连接adb disconnect <device-ip-address>)
     
    2.基本命令
    命令
    含义
    adb verion 查看adb版本
    adb start-server 启动adb server(一般无需手动启动)
    adb kill-server 停止adb server
    adb root 以 root 权限运行 adbd
    adb unroot 以 普通权限运行 adbd
    adb remount 已读写方式挂载系分区/system
    adb devices 查询已经链接的设备
    adb get-serialno 打印设备序列号(和adb devices中的序列号一致)
    adb wait-for-device 阻塞直到设备在线
    adb get-state
    查看设备状态:
    device:设备正常连接 
    offline:连接出现异常,设备无响应 
    unknown:没有连接设备
    adb status-window 连续输出设备状态
    adb bugreport 返回设备bug report相关的所有信息
    adb [-d|-e|-s ]
    adb -e shell //进入到模拟器中
    adb –d shell //进入到真机中
    adb –s <设备id> shell //进入到指定设备中
    adb shell svc wifi enable/disable 开/关wifi
    adb reboot 重启设备
    adb reboot-bootloader 设备重启到bootloader模式
    adb reboot [bootloader|recovery] 设备重启到bootloader或recovery模式
    adb tcpip <port> 重启adbd在指定的tcp端口上进行监听
    adb usb 重启adbd在usb上进行监听
     
    实用功能:
    1. 截图
    adb shell screencap –h查看参数            
    adb exec-out screencap -p > sc.png  //直接保存到本地电脑
    adb shell screencap -p /sdcard/sc.png   //保存到手机
    adb pull /sdcard/sc.png
    1. 录制屏幕
    adb shell screenrecord --help看详细参数
    adb shell screenrecord /sdcard/filename.mp4
    需要停止时按Ctr+C,默认录制时间和最长录制时间为180s。
    1. 获取当前界面的控件信息
    adb shell uiautomator dump [--compressed] [file] dump出当前窗口的UI布局简化信息到指定文件,默认文件是在/sdcard/window_dump.xml
     
    1. 应用管理

    1.应用查看/安装/卸载

     
    查看应用列表 adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
    参数
    显示列表
    所有应用
    -f
    显示应用关联的 apk 文件
    -d
    只显示 disabled 的应用
    -e
    只显示 enabled 的应用
    -s
    只显示系统应用
    -3
    只显示第三方应用
    -i
    显示应用的 installer
    -u
    包含已卸载应用
    <FILTER>
    包名包含 <FILTER> 字符串
    查看应用详细信息
    adb shell dumpsys package <packagename>
    安装apk
    adb install [-lrtsdg] <path_to_apk>
    -l
    将应用安装到保护目录 /mnt/asec
    -r
    允许覆盖安装
    -t
    允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用
    -s
    将应用安装到 sdcard
    -d
    允许降级覆盖安装
    -g
    授予所有运行时权限
    卸载应用
     
    adb uninstall [-k] <packagename>
    -k 卸载应用但保留数据和缓存目录
    查看安装路径
    adb shell pm path <packagename>
    清除应用数据及缓存 adb shell pm clear <packagename>
    查看前台activity
    adb shell dumpsys activity activities | findstr mFocusedActivity
    或adb shell dumpsys activity | grep -i run
    或adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'
    查看正在运行的Services adb shell dumpsys activity services [<packagename>]
     

    2.与应用的交互

    adb shell am <command>
    命令
    用途
    am start [options] <INTENT> 启动 <INTENT> 指定的 Activity
    am startservice [options] <INTENT> 启动 <INTENT> 指定的 Service
    am broadcast [options] <INTENT> 发送 <INTENT> 指定的广播
    am force-stop <packagename> 停止 <packagename> 相关的进程
     
    [options]选项如下:
    参数
    含义
    -a <ACTION> 指定 action,比如 android.intent.action.VIEW
    -c <CATEGORY> 指定 category,比如 android.intent.category.APP_CONTACTS
    -n <COMPONENT> 指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity
    例如:
    1)adb shell am start -n com.tencent.mm/.ui.LauncherUI  //表示调起微信主界面
    2)adb shell am startservice -n com.tencent.mm/.plugin.account.model.AccountAuthenticatorService //表示调起微信的某个 Service.
    3)adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver //只向BootCompletedReceiver发送广播BOOT_COMPLETED
    4)adb shell am force-stop com.qihoo360.mobilesafe  //停止 360 安全卫士
     
    部分系统预定义广播及正常触发时机
    action
    触发时机
    android.net.conn.CONNECTIVITY_CHANGE 网络连接发生变化
    android.intent.action.SCREEN_ON 屏幕点亮
    android.intent.action.SCREEN_OFF 屏幕熄灭
    android.intent.action.BATTERY_LOW 电量低,会弹出电量低提示框
    android.intent.action.BATTERY_OKAY 电量恢复了
    android.intent.action.BOOT_COMPLETED 设备启动完毕
    android.intent.action.DEVICE_STORAGE_LOW 存储空间过低
    android.intent.action.DEVICE_STORAGE_OK 存储空间恢复
    android.intent.action.PACKAGE_ADDED 安装了新的应用
    android.net.wifi.STATE_CHANGE WiFi连接到一个ssid后的广播
    android.net.wifi.WIFI_STATE_CHANGED WiFi 状态变为启用/关闭/正在启动/正在关闭/未知
    android.intent.action.BATTERY_CHANGED 电池电量发生变化
    android.intent.action.INPUT_METHOD_CHANGED 系统输入法发生变化
    android.intent.action.ACTION_POWER_CONNECTED 外部电源连接
    android.intent.action.ACTION_POWER_DISCONNECTED 外部电源断开连接
    android.intent.action.DREAMING_STARTED 系统开始休眠
    android.intent.action.DREAMING_STOPPED 系统停止休眠
    android.intent.action.WALLPAPER_CHANGED 壁纸发生变化
    android.intent.action.HEADSET_PLUG 插入耳机
    android.intent.action.MEDIA_UNMOUNTED 卸载外部介质
    android.intent.action.MEDIA_MOUNTED 挂载外部介质
    android.os.action.POWER_SAVE_MODE_CHANGED 省电模式开启
     

    3.如何启动被测程序?

    启动的方法:adb shell am start -n包名/启动页的Activity
    • 确定包名:adb shell pm list package -f
    • 查看app启动页Activity:
    adb shell dumpsys package <包名>
    找到包含“category.LAUNCHER”的Activity即为启动页Activity
     
    1. 文件管理
    adb pull <设备里的文件路径> [电脑上的目录]   //复制设备里的文件到电脑
    adb push <电脑上的文件路径> <设备里的目录>  //复制电脑里的文件到设备
    1. 模拟按键/输入
    input [<source>] <command> [<arg>...]  (详情见adb shell input --help)
    屏幕点击:adb shell input tap <x> <y> //在屏幕上点击坐标点(x,y)的位置
    屏幕滑动:adb shell input swipe <x1> <y1> <x2> <y2> //从(x1,y1)滑动到(x2,y2)
    文本输入:adb shell input text <string> //将<string>输入到文本框中
    模拟按键: adb shell input keyevent <keycode>
    keycode
    含义
    keycode
    含义
    3
    HOME 键
    126
    恢复播放
    4
    返回键
    127
    暂停播放
    5
    打开拨号应用
    164
    静音
    6
    挂断电话
    176
    打开系统设置
    24
    增加音量
    187
    切换应用
    25
    降低音量
    207
    打开联系人
    26
    电源键
    208
    打开日历
    27
    拍照(需要在相机应用里)
    209
    打开音乐
    64
    打开浏览器
    210
    打开计算器
    82
    菜单键
    220
    降低屏幕亮度
    85
    播放/暂停
    221
    提高屏幕亮度
    86
    停止播放
    223
    系统休眠
    87
    播放下一首
    224
    点亮屏幕
    88
    播放上一首
    231
    打开语音助手
    122
    移动光标到行首或列表顶部
    276
    如果没有 wakelock 则让系统休眠
    123
    移动光标到行末或列表底部
       
     
     
    1. 日志
    Android 系统的日志分为两部分,底层的 Linux 内核日志输出到/proc/kmsg,Android 的日志输出到 /dev/log。
     
    Android 日志命令格式:  [adb] logcat [<option>] ... [<filter-spec>] ...
    其中<filter-spec> 可以由多个 <tag>[:priority] 组成。

    1.日志过滤

    Android 的日志分为如下几个优先级(priority):
    V —— Verbose(最低,输出得最多)
    D —— Debug
    I —— Info
    W —— Warning
    E —— Error
    F —— Fatal
    S —— Silent(最高,啥也不输出)
    按某级别过滤日志则会将该级别及以上的日志输出。
    比如: adb logcat ActivityManager:I MyApp:D *:S   //输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)。

    2.日志格式:

        可以用 adb logcat -v <format> 选项指定日志输出格式。
    <format>格式名称
    输出格式
    输出举例
    brief(默认格式) <priority>/<tag>(<pid>): <message> D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
    process <priority>(<pid>) <message> D( 1785) Disconnected process message: 10, size: 0 (HeadsetStateMachine)
    tag <priority>/<tag>: <message> D/HeadsetStateMachine: Disconnected process message: 10, size: 0
    raw <message> Disconnected process message: 10, size: 0
    time <datetime> <priority>/<tag>(<pid>): <message> 08-28 22:39:39.974 D/HeadsetStateMachine( 1785): Disconnected process message: 10, size: 0
    threadtime <datetime> <pid> <tid> <priority> <tag>: <message> 08-28 22:39:39.974 1785 1832 D HeadsetStateMachine: Disconnected process message: 10, size: 0
    long
    [ <datetime> <pid>:<tid> <priority>/<tag> ]
     <message>
    [ 08-28 22:39:39.974 1785: 1832 D/HeadsetStateMachine ]
    Disconnected process message: 10, size: 0
    adb logcat -v <format> > <文件名>    //将log重定向到文件中

    3. 清空日志:adb logcat -c

    4. 内核日志命令:adb shell dmesg

    1. 查看/修改设备信息

    1.查看设备信息

    查看设备型号信息 adb shell getprop ro.product.model
    查看电池状况 adb shell dumpsys battery
    屏幕分辨率 adb shell wm size
    设备屏幕密度 adb shell wm density
    显示屏参数命令 adb shell dumpsys window displays
    android_id adb shell settings get secure android_id
    IMEI
    Android 4.4 及以下版本:adb shell dumpsys iphonesubinfo
    在 Android 5.0 及以上版本(要root权限):
    #adb shell
    su
    service call iphonesubinfo 1
    Android 系统版本 adb shell getprop ro.build.version.release
    IP地址
    adb shell ifconfig | grep Mask 或
    adb shell netcfg (部分系统版本可以) 或
    设备连着 WiFi时可尝试:adb shell ifconfig wlan0
    Mac 地址
    adb shell cat /sys/class/net/wlan0/address(局域网 Mac 地址)
    移动网络或其它连接的信息可用adb shell netcfg 命令来查看
    CPU 信息 adb shell cat /proc/cpuinfo
    内存信息 adb shell cat /proc/meminfo
    更多硬件与系统属性 adb shell cat /system/build.prop
     
     

    2.修改设备信息

    注: 修改设置之后,运行恢复命令有可能显示仍然不太正常,可以运行 #adb reboot 重启设备,或手动重启。
    修改设置的原理主要是通过settings 命令修改/data/data/com.android.providers.settings/databases/settings.db(Android6.0后为/data/system/users/userid/下面的xml文件) 里存放的设置值。
     
    修改/恢复分辨率
    adb shell wm size 480x1024
    adb shell wm size reset
    修改/恢复屏幕密度
    adb shell wm density 160
    adb shell wm density reset
    修改/恢复显示区域命令:
    adb shell wm overscan 0,0,0,200(四个数字分别表示距离左、上、右、下边缘的留白像素,以上命令表示将屏幕底部 200px 留白。)
    adb shell wm overscan reset
    关闭 USB 调试模式 adb shell settings put global adb_enabled 0
    状态栏和导航栏的显示隐藏 adb shell settings put global policy_control <key1>=<value1>:<key2>=<value2>…
     
    状态栏和导航栏的显示隐藏:
    adb shell settings put global policy_control <key1>=<value1>:<key2>=<value2>…
    Key
    Value
    immersive.full同时隐藏 apps所有应用
    immersive.status 隐藏状态栏 * 所有界面
    immersive.navigaion 隐藏导航栏 packagename指定应用
    immersive.precomfirms ? -packagename排除指定应用
    例如:
    #adb shell settings put global policy_control immersive.full=*
    表示设置在所有界面下都同时隐藏状态栏和导航栏。
    # adb shell settings put global policy_control immersive.full=-* //取消上面的隐藏
    #adb shell settings put global policy_control immersive.status=com.package1,com.package2:immersive.navigation=apps,-com.package3
    表示设置在包名为com.package1 和com.package2 的应用里隐藏状态栏,在除了包名为com.package3 的所有应用里隐藏导航栏。
     
    1. 备份与还原
    备份:adb backup [-f <file>] [-apk|-noapk] [-obb|-noobb] [-shared|-noshared] [-all] [-system|-nosystem] [<packages...>]
    还原:adb restore <file>
     
    备份选项 含义
    adb backup -all 使用默认方式备份应用和设备的数据(不包含apk)到当前目录下并保存为文件backup.ab
    -f 指定备份文件
    -obb|-noobb 备份是否包含程序连带的扩展数据,默认是-noobb
    -apk|-noapk 备份中是否包含apk
    -shared|-noshared 是否备份设备共享的SD card内容
    -system|-nosystem 决定-all是否包含系统应用,默认的是-system
    [<packages...>] 带包名表示只备份此包的相关信息
    例如:adb backup  -apk  -shared  -system  -all  -f  backup_apk.ab
     
    1. 转发
    adb forward [--no--rebind] <local> <remote> 
    adb forward --remove <local>
    adb forward --remove-all
    adb forward --list
    例如:adb forward tcp:11111 tcp:22222
    建立一个转发将PC端的11111端口收到的数据,转发给到手机中22222端口。但是只执行这个命令还不能转发数据,还需要完成两个步骤才能传数据。这两个步骤是:
    (a)在手机端,建立一个端口为22222的server,并打开server到监听状态。
    (b)在PC端,建立一个socket client端,连接到端口为11111的server上。
     
    PC端的应用与手机端应用之间传输数据的过程:
    (1)PC端应用将数据发送给端口为11111的server(adb创建的)
    (2)adb将数据转发给手机端adbd进程(通过USB传输)
    (3)adbd进程将数据发送给端口为22222的server(手机端应用创建的)
    传递是双向的,第(1)和第(3)步是通过socket实现的,所以通过socket的读和写就完成了PC端应用和手机端应用的数据传递。
    1. Mokey测试
    Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;
    Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;
    帮助文档:adb shell monkey --help
    参数介绍:
    Monkey命令参数 含义
    -p
    参数指定一个或多个包。
    adb shell monkey -p com.htc.Weather –p com.htc.pdfreader 100
    -v
    指定日志的详细程度,总共分3个级别:
    Level 0:缺省值,提供启动提示、测试完成和最终结果等少量信息。 
    adb shell monkey -p com.htc.Weather –v 100
    Level 1:详细的日志,包括每个发送到Activity的事件信息
    adb shell monkey -p com.htc.Weather -v -v 100
     Level 2:最详细的日志,包括了测试中选中/未选中的Activity信息
    adb shell monkey -p com.htc.Weather -v -v -v 100
    -s
    指定伪随机数生成器的seed值
    adb shell monkey -p com.htc.Weather -s 10 100
    --throttle <毫秒>
    指定用户操作(即事件)间的时延。
    adb shell monkey -p com.htc.Weather –throttle 3000 100
     --ignore-crashes
    程序崩溃仍发送事件,直到事件计数完成。
    adb shellmonkey -p com.htc.Weather --ignore-crashes 100
    --ignore-timeouts 程序发生ANR时,仍然发送事件,直到事件计数完成。
     --ignore-security-exceptions 当应用程序发生许可错误时(如证书许可,网络许可等),仍然发送事件,直到事件计数完成。
    --kill-process-after-error 当应用程序发生错误时,停止运行并保持在当前状态,(应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)
    --monitor-native-crashes 用于指定是否监视并报告应用程序发生崩溃的本地代码。
    --pct-{+事件类别}{+事件类别百分比}
    用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
    adb shell monkey –p <pkg> --pct-touch 10 1000
     
    事件类别
    含义
    --pct-touch  触摸事件:是一个down-up事件,它发生在屏幕上的某单一位置
    --pct-motion 动作事件:由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成
    --pct-trackball 轨迹事件:由一个或几个随机的移动组成,有时还伴随有点击
    --pct-nav 基本导航事件:由来自方向输入设备的up/down/left/right组成
    --pct-majornav 主要导航事件:此类事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键
    --pct-syskeys 系统按键:Home、Back、Start Call、End Call及音量控制键等
    --pct-appswitch 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
    --pct-anyevent 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
     
    1. 数据库操作
      adb shell  
    sqlite3  <数据库文件>   //进入到数据库中
    sqlite>.tables           //列出各个表
    sqlite>.schema <表名>     //获得完整的数据库表字段信息
    sqlite>.help             //查看命令
    sqlite> select * from <表名>      //SQL语句
    sqlite> .exit         //退出数据库
     
      
  • 相关阅读:
    nginx优化:使用expires在浏览器端缓存静态文件
    nginx优化:worker_processes/worker_connections/worker_rlimit_nofile
    centos8平台使用ulimit做系统资源限制
    centos8平台nginx服务配置打开文件限制max open files limits
    nginx安全:配置allow/deny控制ip访问(ngx_http_access_module)
    python 菜鸟入门
    正则表达式预查询
    selenium 关键字驱动部分设计思路
    Idea安装Python插件并配置Python SDK
    ORACLE LOG的管理
  • 原文地址:https://www.cnblogs.com/wx2017/p/10883189.html
Copyright © 2011-2022 走看看