本文首发地址 https://h89.cn/archives/281.html
最新更新地址 https://gitee.com/chenjim/chenjimblog

博主 Linux 使用较多,平时开发使用各种命令也比较多,之前写过一篇博文 安卓软件开发常用命令集合,其中 adb 相关命令最多,这里把 adb 相关抽离、补充完善。adb shell ls /system/bin/ 列出的命令均可以通过 adb shell 执行,本文主要介绍博主经常用到的命令使用及功能

文件管理

  • 导出文件到电脑
    adb pull /system/priv-app/ p-app
  • 推送文件到手机
    adb push ./out.so /system/lib64
  • rm/touch/mkdir/cp/mv/find/grep 使用同 Linux 命令
    adb shell rm /system/lib64/out.so

截屏与录屏

  • 截屏并导出文件到电脑
    adb exec-out screencap -p > screen.png
    adb shell input keyevent 120

  • 录屏
    adb shell screenrecord /sdcard/example.mp4
    adb pull /sdcard/example.mp4

logcat 使用

  • logcat 并用tee重定向输出到文件log.txt
    adb logcat |tee log.txt

  • logcat过滤关键字abc的日志
    adb logcat | grep abc grep在windows依赖C:\Program Files\Git\usr\bin\grep.exe
    adb shell "logcat | grep abc" 使用android系统的grep命令
    adb shell,然后 logcat | grep -iE "abc|def" 过滤包含 abc 或者包含 def 的内容,-i 表示忽略大小写
    adb shell,然后 logcat | grep abc | grep def" 过滤包含 abc 且包含 def 的内容

  • 只过滤tag为abc的日志
    adb logcat -s abc

  • 查看 events 日志
    adb logcat -b eventsevents,默认是 main,system,crash,可选项 main system radio events crash
    adb logcat -b all 可抓取所有(main+system+kernel+events等)日志
    更多 grep 用法,可参考 linux-grep

  • logcat 只抓去ERROR的日志
    adb logcat *:E
    更多 logcat 使用方法可以参考 android logcat

dumpsys 相关

可以通过 adb shell dumpsys -l 列出可以 dump 的模块

  • 当前acitivity信息
    adb shell dumpsys activity | grep mResumedActivity
    adb shell dumpsys activity | grep ActivityRecord 可以查看相关包名、Activity堆栈

  • 查看某服务是否正在运行
    adb shell "dumpsys activity services | grep YourServiceName"

  • 查看 window 层级 (安卓10以下可能不支持此命令)
    adb shell dumpsys activity containers

  • 应用的内存信息
    adb shell dumpsys meminfo com.android.camera
    可以连续监控,以查看是否存在内存泄露问题

  • 获取某个应用的版本号
    adb shell dumpsys package com.baidu.BaiduMap | grep version

  • 查看当前合成显示的 layers
    adb shell dumpsys SurfaceFlinger

  • 获取 input 状态
    adb shell dumpsys input
    可以输出 Input Manager StateEvent Hub StateInput Reader StateInput Dispatcher StateKeyboard LayoutsPersistentDataStore 这些信息在分析 Framework 中 input 模块问题至关重要。

  • 获取当前窗口状态
    adb shell dumpsys window
    adb shell dumpsys window displays 是上面的子集,近期任务(打开应用)列表
    adb shell dumpsys window windows 是上面的子集,有更多详细信息,比如 mDrawState=HAS_DRAWN 表示已经绘制,mDrawState=NO_SURFACE 表示未显示

ps 相关

  • 查看真正运行且包含 camera 关键字的进程
    adb shell ps -A |grep camera
  • 获取进程 com.android.camera 的 pid
    adb shell ps | grep "com.android.camera" | awk '{print $2}'

am 相关

  • 结束进程
    adb shell am force-stop com.chenjim.package 结束指定包名的应用
    adb shell pkill chenjim* 结束包名含有chenjim所有正在运行的应用

  • adb 触发应用 gc
    adb shell kill -10 23683 后面数值是进程 PID
    pid=$(adb shell ps | grep "com.android.camera" | awk '{print $2}') && adb shell kill -10 $pid 也可以直接执行此命令

  • 启动安卓原生 Launcher3 桌面应用
    adb shell am start -n com.android.launcher3/.Launcher

  • 启动安卓原生设置应用
    adb shell am start -n "com.android.settings/.Settings"

  • 启动安卓原生拨号应用
    adb shell "am start -n com.android.dialer/.DialtactsActivity"

  • 启动MTK工程模式 (##3646633## )
    adb shell am start -n com.mediatek.engineermode/.EngineerMode

  • 启动MTK日志应用mtklog ( *1973461# )
    adb shell am start -n com.mediatek.mtklogger/.MainActivity

  • 启动高通日志应用 ( *1973461# )
    adb shell am start -n com.hmct.ftmode/.FTModeMain

  • 发广播恢复出厂设置,不是所有设备都有效,其流程参考 链接
    adb shell am broadcast -a android.intent.action.MASTER_CLEAR

  • 发带参数广播如下,更多介绍参考 链接
    adb shell am broadcast -a com.android.test --es test_string "this is test string" --ei test_int 100 --ez test_boolean true

  • 启动服务Service
    adb shell am startservice -n com.chenjim.pkg/.YourService

pm 相关

  • 系统安装所有应用包名及位置
    adb shell "pm list packages -f " 列出所有应用安装位置
    adb shell "pm list packages -f | grep camera" 关键字过滤
    adb shell pm path com.android.camera 列出指定包安装位置

  • 清除应用数据(包含缓存)
    adb shell pm clear com.android.camera

wm 相关

  • 调整设备显示尺寸分辨率
    adb shell wm size 返回当前应用显示尺寸
    adb shell wm size 1600x2560 重新设置显示分辨率为 1600x2560 , 在适配一些特殊尺寸UI 是很有用

  • 调整设备屏幕密度
    adb shell wm density 获取当前屏幕密度,得到的结果比如 480
    adb shell wm density 320 相对上面的 480 ,界面元素会变小

setprop 设置属性

setprop 设置属性,getprop 可以获取属性

  • 设置系统属性
    adb shell setprop persist.sys.camera.sensor.enable true
    persist 表示重启断电不变,如果是 ro 等,重启就不存在了
    sys 表示系统模块,比如 sys、system、dev、default 或 config
    camera 表示 sys 的子模块
    sensor 表示字段的名称
    enable 表示字段的类型,并无具体的规则,使用建议:enableconfig
    可以通过 android.os.SystemProperties 在代码获取配置的值
    更多可参考 add-system-properties

  • 打开ipod debug模式
    输入如下命令,ipo关机后,adb仍然可以处于工作的状态。
    adb shell setprop ipod_debug 1

  • 获取 Settings.System.SHOW_KEY_PRESSES 的值
    adb shell settings get system show_key_presses

input 相关

  • 发送模拟按键事件
    adb shell input keyevent 21 其中 21 表示 KEYCODE_DPAD_LEFT
    更多 KeyEvent 含义参考 android.view.KeyEvent

  • 模拟点击某个点
    adb shell input tap 230 2065

  • 模拟滑动事件
    adb shell input swipe 500 1200 500 900 300
    在 300ms 从 [500,1200] 上滑到 [500,900]

  • 基于 windows 的 adb 自动按键测试 bat 脚本

    : 注释:bat文件默认字符集为ANSI,否则有乱码
    @echo off
    set times=5
    set gap=3
    echo 最多执行%times%次,每次间隔%gap%秒
    for /l %%i in (1,1,%times%) do (
        choice /t %gap% /d y /n >nul
        adb shell input keyevent 21
        echo 按键 KeyEvent.KEYCODE_DPAD_LEFT,当前第%%i%次
    )
    pause

adb connect 远程无线调试

  • 方法一:打开手机的开发者模式,开启 开发者选项,开启无线调试,如下图所示

    连接设备 adb connect 192.168.31.96:42005
    断开连接 adb disconnect 192.168.31.96:42005
  • 方法二:使用一些老旧设备,需要完全root权限,一般手机系统不行
    1. 手机连接电脑,执行 adb root (都可以USB线连接了,无线连接只能备用吧)
    2. 手机下载安装终端,并授权ROOT权限
      (MIUI系统开发版在菜单'设置-->应用设置-->授权管理->ROOT权限管理')
      在终端 执行以下命令设置远程调试端口,并重启 adbd
      su
      setprop service.adb.tcp.port 5555
      stop adbd
      start adbd
    3. 在手机终端执行以下命令获取手机IP信息
      ip neigh
    4. 在电脑远程连接设备命令如下
      adb connect 192.168.59.132
      192.168.59.132 是手机WIFI分配的IP地址,默认端口是上面步骤设置的5555
      参考自:https://juejin.cn/post/6844903496861351943

其它

  • 重启到 recovery 清数据
    命令 adb reboot recovery

  • 查看存储使用情况
    adb shell df -h


相关连接


本文链接:adb常用命令详解--提升开发效率利器 - https://h89.cn/archives/281.html

版权声明:原创文章 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文链接和本声明。

标签: adb, dumpsys, setprop, input

添加新评论