ADB介绍

adb(Android Debug Bridge)是一种用于在 Android 设备和计算机之间通信的命令行工具。它可以用于调试应用程序、安装应用程序、备份和恢复设备数据、在设备和计算机之间复制文件等。使用 adb,开发人员可以在连接到设备时运行各种命令来执行各种任务。adb 是 Android SDK(Software Development Kit)的一部分。

安装:

brew cask install android-platform-tools

推荐文档:

测试环境

网易mumu 1.9.55 (20211206)

基础使用

基本语法

adb [-d|-e|-s <serialNumber>] <command>

如果只有一个设备/模拟器连接时,可以省略掉 [-d|-e|-s <serialNumber>] 这一部分,直接使用 adb <command>

连接指定设备

如果有多个设备/模拟器连接,则需要为命令指定目标设备。

参数 含义
-d 指定当前唯一通过 USB 连接的 Android 设备为命令目标(表示连接的是安卓开发者模式的设备)
-e 指定当前唯一运行的模拟器为命令目标(表示连接的是模拟器)
-s <serialNumber> 指定相应 serialNumber 号的设备/模拟器为命令目标

一般用-s来指定目标连接

先用如下命令获取设备列表:

$ adb devices

List of devices attached
emulator-5554    device

然后-s指定即可

adb -s 'emulator-5554' shell whoami

启动/停止

一般无需手动执行此命令,在运行 adb 命令时若发现 adb server 没有启动会自动调起。

adb kill-server && adb start-server

版本

adb version

以root权限运行adbd

adb 的运行原理是 PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。

adbd代表“Android Debug Bridge Daemon”,是运行在Android设备上的后台进程,它与Android Debug Bridge(ADB)客户端通信,允许开发人员以调试模式与设备进行通信。

adbd在Android系统中扮演着非常重要的角色,它允许开发人员访问设备的shell,传输文件,安装和调试应用程序,以及访问各种诊断和性能分析工具。

# 切换root权限执行
adb root
# 切换非root权限执行
adb unroot

如果提示adbd cannot run as root in production builds,那么下载adbd-Insecure.apk

下载地址:https://github.com/wuxianlin/android_tools/blob/master/adbd-Insecure-v2.00.apk

下载安装好后打开,勾选Enable insecure adbdEnable at boot即可。

还是不能解决建议放弃,坑太多了,改debug配置文件改了也没用。

指定adb server的网络端口

默认端口为 5037。

adb -P <port> start-server

应用管理

查看应用列表

adb shell pm list packages

pm是一个缩写词,代表“包管理器(package manager)”。包管理器是一个系统级服务,它负责管理应用程序的安装、卸载、更新、清除和查询等操作。

adb shell pm help

上面的结果返回所有的应用,可以通过特定参数添加一些过滤条件

参数 说明
-f 显示应用程序的安装位置。
-d 只列出已禁用的应用程序。
-e 只列出已启用的应用程序。
-s 只列出系统应用程序。
-3 只列出第三方应用程序。
-i 显示应用的 installer。
-u 包含已卸载应用。
<FILTER> 包名包含 <FILTER> 字符串

举例如下:

  • 查询设备上所有已启用的第三方应用程序的包名列表

      adb shell pm list packages -e -3
    
  • 查询带有shadow的包名

      adb shell pm list packages shadow
    

查看应用安装路径

adb shell pm path <PACKAGE>
  • <PACKAGE>为包名

清除应用数据与缓存

adb shell pm clear <packagename>

<packagename> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

安装APK

adb install [-lrtsdg] [--instant] PACKAGE

也可以通过一些参数来控制安装 APK 的行为

参数 说明
-l 将应用安装到保护目录 /mnt/asec
-r 重新安装已经安装的应用程序,保留其数据。(覆盖安装)
-t 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用。(在安装应用程序时允许测试 APK)
-s 将应用程序安装到 SD 卡上(仅适用于 Android 2.2 及更高版本)。
-d 允许降级覆盖安装。
-g 授予所有运行时权限。
--instant 作为临时应用安装

例如:

adb install -r xxx.apk

安装的一些常见错误情况和说明如下:

输出 含义 解决办法
INSTALL_FAILED_ALREADY_EXISTS 应用已经存在,或卸载了但没卸载干净 adb install 时使用 -r 参数,或者先 adb uninstall <packagename> 再安装
INSTALL_FAILED_INVALID_APK 无效的 APK 文件
INSTALL_FAILED_INVALID_URI 无效的 APK 文件名 确保 APK 文件名里无中文
INSTALL_FAILED_INSUFFICIENT_STORAGE 空间不足 清理空间
INSTALL_FAILED_DUPLICATE_PACKAGE 已经存在同名程序
INSTALL_FAILED_NO_SHARED_USER 请求的共享用户不存在
INSTALL_FAILED_UPDATE_INCOMPATIBLE 以前安装过同名应用,但卸载时数据没有移除;或者已安装该应用,但签名不一致 adb uninstall <packagename> 再安装
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 请求的共享用户存在但签名不一致
INSTALL_FAILED_MISSING_SHARED_LIBRARY 安装包使用了设备上不可用的共享库
INSTALL_FAILED_REPLACE_COULDNT_DELETE 替换时无法删除
INSTALL_FAILED_DEXOPT dex 优化验证失败或空间不足
INSTALL_FAILED_OLDER_SDK 设备系统版本低于应用要求
INSTALL_FAILED_CONFLICTING_PROVIDER 设备里已经存在与应用里同名的 content provider
INSTALL_FAILED_NEWER_SDK 设备系统版本高于应用要求
INSTALL_FAILED_TEST_ONLY 应用是 test-only 的,但安装时没有指定 -t 参数
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE 包含不兼容设备 CPU 应用程序二进制接口的 native code
INSTALL_FAILED_MISSING_FEATURE 应用使用了设备不可用的功能
INSTALL_FAILED_CONTAINER_ERROR 1. sdcard 访问失败; 2. 应用签名与 ROM 签名一致,被当作内置应用。 1. 确认 sdcard 可用,或者安装到内置存储; 2. 打包时不与 ROM 使用相同签名。
INSTALL_FAILED_INVALID_INSTALL_LOCATION 1. 不能安装到指定位置; 2. 应用签名与 ROM 签名一致,被当作内置应用。 1. 切换安装位置,添加或删除 -s 参数; 2. 打包时不与 ROM 使用相同签名。
INSTALL_FAILED_MEDIA_UNAVAILABLE 安装位置不可用 一般为 sdcard,确认 sdcard 可用或安装到内置存储
INSTALL_FAILED_VERIFICATION_TIMEOUT 验证安装包超时
INSTALL_FAILED_VERIFICATION_FAILURE 验证安装包失败
INSTALL_FAILED_PACKAGE_CHANGED 应用与调用程序期望的不一致
INSTALL_FAILED_UID_CHANGED 以前安装过该应用,与本次分配的 UID 不一致 清除以前安装过的残留文件
INSTALL_FAILED_VERSION_DOWNGRADE 已经安装了该应用更高版本 使用 -d 参数
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE 已安装 target SDK 支持运行时权限的同名应用,要安装的版本不支持运行时权限
INSTALL_PARSE_FAILED_NOT_APK 指定路径不是文件,或不是以 .apk 结尾
INSTALL_PARSE_FAILED_BAD_MANIFEST 无法解析的 AndroidManifest.xml 文件
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION 解析器遇到异常
INSTALL_PARSE_FAILED_NO_CERTIFICATES 安装包没有签名
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 已安装该应用,且签名与 APK 文件不一致 先卸载设备上的该应用,再安装
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING 解析 APK 文件时遇到 CertificateEncodingException
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME manifest 文件里没有或者使用了无效的包名
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID manifest 文件里指定了无效的共享用户 ID
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 解析 manifest 文件时遇到结构性错误
INSTALL_PARSE_FAILED_MANIFEST_EMPTY 在 manifest 文件里找不到找可操作标签(instrumentation 或 application)
INSTALL_FAILED_INTERNAL_ERROR 因系统问题安装失败
INSTALL_FAILED_USER_RESTRICTED 用户被限制安装应用 在开发者选项里将「USB安装」打开,如果已经打开了,那先关闭再打开。
INSTALL_FAILED_DUPLICATE_PERMISSION 应用尝试定义一个已经存在的权限名称
INSTALL_FAILED_NO_MATCHING_ABIS 应用包含设备的应用程序二进制接口不支持的 native code
INSTALL_CANCELED_BY_USER 应用安装需要在设备上确认,但未操作设备或点了取消 在设备上同意安装
INSTALL_FAILED_ACWF_INCOMPATIBLE 应用程序与设备不兼容
INSTALL_FAILED_TEST_ONLY APK 文件是使用 Android Studio 直接 RUN 编译出来的文件 通过 Gradle 的 assembleDebug 或 assembleRelease 重新编译,或者 Generate Signed APK
does not contain AndroidManifest.xml 无效的 APK 文件
is not a valid zip file 无效的 APK 文件
Offline 设备未连接成功 先将设备与 adb 连接成功
unauthorized 设备未授权允许调试
error: device not found 没有连接成功的设备 先将设备与 adb 连接成功
protocol failure 设备已断开连接 先将设备与 adb 连接成功
Unknown option: -s Android 2.2 以下不支持安装到 sdcard 不使用 -s 参数
No space left on device 空间不足 清理空间
Permission denied ... sdcard ... sdcard 不可用
signatures do not match the previously installed version; ignoring! 已安装该应用且签名不一致 先卸载设备上的该应用,再安装

卸载APK

adb uninstall [-k] PACKAGE
  • PACKAGE 表示应用的包名

  • -k 参数可选,表示卸载应用但保留数据和缓存目录。

例如:

adb uninstall com.chehejia.oc.m01

查看前台Activity

adb shell dumpsys activity activities | grep mResumedActivity

就是设备当前展示的用户界面,结果如

# 微信启动页面
mResumedActivity: ActivityRecord{1ce38af u0 com.tencent.mm/.plugin.account.ui.WelcomeActivity t349}

查看正在运行的Services

adb shell dumpsys activity services [<packagename>]
  • [<packagename>]为可选参数,主要用来过滤哪一个package的,不然默认是输出所有的services
  • [<packagename>]写个关键词也可以匹配,比如qihoo360

查看应用详细信息

adb shell dumpsys package <packagename>
  • <packagename>表示应用包名
  • 输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。

获取包中的所有activity

adb shell dumpsys package <packagename> | grep -E 'Activity|filter'

获取包中的所有service

adb shell dumpsys package <packagename> | grep -E 'Service|filter'

应用交互

主要是使用 am <command> 命令,参数很多,可以am查看

Activity Manager (am)是Android系统的一个核心组件,用于管理Activity、Service、Broadcast Receiver等组件的生命周期,以及进程间通信、权限管理等操作。通过adb shell am命令,可以向Activity Manager发送各种命令,以控制Android应用的行为。

常用的 <command> 如下:

command 用途
start [options] <INTENT> 启动 <INTENT> 指定的 Activity
startservice [options] <INTENT> 启动 <INTENT> 指定的 Service
stopservice [options] <INTENT> 停止 <INTENT> 指定的 Service
broadcast [options] <INTENT> 发送 <INTENT> 指定的广播
force-stop <packagename> 停止 <packagename> 相关的进程

<INTENT> 参数很灵活,和写 Android 程序时代码里的 Intent 相对应。

在Android中,Intent是一种消息传递机制,用于在应用程序组件之间传递数据、启动Activity、启动服务、发送广播等。Intent可以被用来完成应用程序内部的通信,也可以用于不同应用程序之间的通信。

用于决定 intent 对象的选项如下:

参数 含义
-a <ACTION> 指定 action,比如 android.intent.action.VIEW
-c <CATEGORY> 指定 category,比如 android.intent.category.APP_CONTACTS
-n <COMPONENT> 指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity

<INTENT> 里还能带数据,就像写代码时的 Bundle 一样(类似传参给activity):

参数 含义
--esn <EXTRA_KEY> null 值(只有 key 名)
-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> string 值
--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> boolean 值
--ei <EXTRA_KEY> <EXTRA_INT_VALUE> integer 值
--el <EXTRA_KEY> <EXTRA_LONG_VALUE> long 值
--ef <EXTRA_KEY> <EXTRA_FLOAT_VALUE> float 值
--eu <EXTRA_KEY> <EXTRA_URI_VALUE> URI
--ecn <EXTRA_KEY> <EXTRA_COMPONENT_NAME_VALUE> component name
--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...] integer 数组
--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...] long 数组

启动应用/ 调起 Activity

指定Activity名称启动

adb shell am start [options] <INTENT>

如:

可以从此处获取APK中的所有activity,也可以通过此处获取前台activity,还可以通过logcat过滤日志的方式来获取。

adb shell am start -n com.tencent.mm/.plugin.account.ui.ContactsSyncUI

传递数据

adb shell am start -n com.tencent.mm/.plugin.account.ui.ContactsSyncUI --es "aaa" "12345"

不指定Activity名称启动

adb shell monkey -p <packagename> -c android.intent.category.LAUNCHER 1

如:

adb shell monkey -p com.tencent.mm -c android.intent.category.LAUNCHER 1
  • adb shell monkey:使用adb shell启动monkey测试工具。
  • -p com.tencent.mm:指定要测试的应用程序的包名,即微信的包名。
  • -c android.intent.category.LAUNCHER:指定要启动的Activity组件的类别,即通过“启动器”(Launcher)启动应用程序。在Android系统中,Activity组件通常通过其Intent过滤器中的类别来标识自己,其中包括android.intent.category.LAUNCHER,用于表示该组件是应用程序的主入口点。
  • 1:指定要执行的随机事件数量,即在启动微信应用程序后,将模拟执行一个随机操作。

调用Service

adb shell am startservice [options] <INTENT>

如:

adb shell am startservice -n com.tencent.mm/.plugin.account.model.ContactsSyncService

停止 Service

adb shell am stopservice [options] <INTENT>

发送广播

adb shell am broadcast [options] <INTENT>

可以向所有组件广播,也可以只向指定组件广播。

  • 向所有组件广播 BOOT_COMPLETED

      adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
    
  • 向指定组件广播 BOOT_COMPLETED

      adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.tencent.mm/.booter.BluetoothReceiver
    

部分系统预定义广播及正常触发时机

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 连接状态发生变化
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 省电模式开启

强制停止应用

adb shell am force-stop <packagename>

停止应用程序的所有进程和服务,以及任何正在运行的后台任务。具体来说,这个命令将执行以下操作:

  1. 终止应用程序的所有进程。
  2. 停止应用程序的所有服务。
  3. 移除应用程序的所有通知。
  4. 中止应用程序的所有后台任务。
  5. 关闭应用程序的所有窗口。

可通过adb shell ps获取正在运行的进程

adb shell am force-stop com.tencent.mm

收紧内存

adb shell am send-trim-memory <pid> <level>
  • pid: 进程 ID
  • level: HIDDEN、RUNNING_MODERATE、BACKGROUND、 RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
    1. HIDDEN:应用程序的所有 UI 组件都不可见,应用程序处于后台运行状态。这个级别表示系统内存非常紧张,可能需要释放大量的内存,以便为其他应用程序留出足够的空间。
    2. RUNNING_MODERATE:应用程序在后台运行,但是不会被立即杀死。这个级别表示系统内存紧张,但是还有一些空间可以分配给其他应用程序,因此应用程序可以继续运行,但是需要释放一些内存。
    3. BACKGROUND:应用程序在后台运行,但是可能会被立即杀死。这个级别表示系统内存非常紧张,需要立即释放大量内存以避免系统崩溃。
    4. RUNNING_LOW:应用程序在前台运行,但是系统内存非常紧张。这个级别表示应用程序需要释放一些内存以避免系统崩溃。
    5. MODERATE:应用程序在前台运行,但是可能会被立即杀死。这个级别表示系统内存紧张,需要立即释放内存以避免系统崩溃。
    6. RUNNING_CRITICAL:应用程序在前台运行,并且可能会影响到其他应用程序的运行。这个级别表示系统内存非常紧张,需要立即释放内存以避免系统崩溃。
    7. COMPLETE:应用程序即将被杀死。这个级别表示应用程序需要释放所有的内存,以便为其他应用程序留出空间。

adb shell am send-trim-memory 12345 RUNNING_LOW

文件管理

设备 -> 电脑

adb pull <设备里的文件路径> [电脑上的目录]

电脑 -> 设备

adb push <电脑里的文件路径> <设备上的目录>

模拟按键/输入

主要是用input命令

Usage: input [<source>] <command> [<arg>...]

The sources are:
      mouse
      keyboard
      joystick
      touchnavigation
      touchpad
      trackball
      stylus
      dpad
      touchscreen
      gamepad

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)
      press (Default: trackball)
      roll <dx> <dy> (Default: trackball)

模拟输入

adb shell input text "hello\ world"

模拟按键

adb shell input keyevent <keycode>
# 如:按下HOME键
adb shell input keyevent 3

完整的 keycode 列表详见 KeyEvent(各种按键都有),部分如下:

keycode 含义
3 HOME 键
4 返回键
5 打开拨号应用
6 挂断电话
24 增加音量
25 降低音量
26 电源键
27 拍照(需要在相机应用里)
64 打开浏览器
82 菜单键
85 播放/暂停
86 停止播放
87 播放下一首
88 播放上一首
122 移动光标到行首或列表顶部
123 移动光标到行末或列表底部
126 恢复播放
127 暂停播放
164 静音
176 打开系统设置
187 切换应用
207 打开联系人
208 打开日历
209 打开音乐
210 打开计算器
220 降低屏幕亮度
221 提高屏幕亮度
223 系统休眠
224 点亮屏幕
231 打开语音助手
276 如果没有 wakelock 则让系统休眠

模拟点击

adb shell input tap <x> <y>

需要知道x、y坐标,可以用如下方法来定位坐标:

  1. 查看当前正在运行的输入设备的事件流,包括触摸屏、按键和其他输入事件

     adb shell getevent -l
    
  2. 在设备上点击,可以看到操作,结果如下:

     /dev/input/event5: EV_ABS       ABS_MT_TRACKING_ID   00000001
     /dev/input/event5: EV_KEY       BTN_TOUCH            DOWN
     /dev/input/event5: EV_ABS       ABS_MT_POSITION_X    00000064
     /dev/input/event5: EV_ABS       ABS_MT_POSITION_Y    00000184
     /dev/input/event5: EV_SYN       SYN_REPORT           00000000
     /dev/input/event5: EV_ABS       ABS_MT_TRACKING_ID   ffffffff
     /dev/input/event5: EV_KEY       BTN_TOUCH            UP
     /dev/input/event5: EV_SYN       SYN_REPORT           00000000
    

    ABS_MT_POSITION_X表示X坐标值,ABS_MT_POSITION_Y表示Y坐标值,不过都是16进制,可以通过如下命令转换为十进制。

     echo $((0xFF))
    
  3. 模拟点击(注意:在模拟器上,当屏幕方向改变时,模拟器中的坐标系也会随之旋转。如果模拟器处于竖屏模式(默认为横屏),那么坐标系将会被旋转 90 度,因此需要交换 x 和 y 值)

     adb shell input tap 388 100
    

模拟拖动

adb shell input swipe <起点x坐标> <起点y坐标> <终点x坐标> <终点y坐标> [滑动时间ms]

定位坐标方式参考模拟点击

adb shell input swipe 510 636 556 343
adb shell input swipe 510 636 556 343 2000

输入中文

上方直接输入会报错,需要安装ADBKeyboard

# 列举输入法
adb shell ime list -s
# 切换键盘
adb shell ime set com.android.adbkeyboard/.AdbIME
# 输入中文
adb shell am broadcast -a ADB_INPUT_TEXT --es msg '中文测试'

日志

adb logcat

默认结果举例如下:

03-13 13:08:53.217   604  1081 I ActivityManager: Start proc 4307:com.tencent.mm/u0a50 for activity com.tencent.mm/.ui.LauncherUI

日志格式解析:

[时间戳] [进程ID] [线程ID] [日志级别] [标签]: 日志消息

日志级别如下:

  • V (Verbose):最低级别,用于调试目的,记录大量详细信息。
  • D (Debug):用于调试和开发目的。
  • I (Info):用于记录设备信息、状态和事件。
  • W (Warning):用于记录潜在的问题和错误。
  • E (Error):用于记录错误和异常。
  • F (Fatal):用于记录致命错误,这些错误可能导致应用程序崩溃。
  • S(Silent): 最高级别,抑制所有输出

按级别过滤日志

  • 输出>=W级别的日志(将 Warning、Error、Fatal 和 Silent 日志输出)
adb logcat "*:W"

按照指定格式输出滤日志

adb logcat -v <format>

<format>格式如下:

  1. brief:简要格式,仅包含日志级别、标签和消息。
I/MyTag: This is a brief message
  1. process:进程ID和标签,用于进程级别的过滤。
1234 MyTag: This is a message from process 1234
  1. tag:标签和消息,用于标签级别的过滤。
MyTag: This is a message with tag MyTag
  1. thread:线程ID、日志级别、标签和消息,用于线程级别的过滤。
1234 D MyTag: This is a message from thread 1234
  1. raw:以原始文本形式输出日志消息,没有格式化。
This is a raw message
  1. time:时间戳、日志级别、标签和消息。
04-28 13:30:00.000 I MyTag: This is a message with timestamp
  1. threadtime:时间戳、线程ID、日志级别、标签和消息。
04-28 13:30:00.000 1234 D MyTag: This is a message from thread 1234 with timestamp
  1. long:包含时间戳、日志级别、标签和消息,以及可选的附加信息(如进程ID、线程ID、包名等)。
    04-28 13:30:00.000 1234 5678 I MyTag: This is a message with additional information
    

如:

adb logcat -v long

按 tag 和级别过滤日志

  • 输出ActivityManager标签的信息,且仅输出信息级别为Info或更高的日志记录。
adb logcat "ActivityManager:I" "*:S"

清空日志

adb logcat -c

设备信息

型号

adb shell getprop ro.product.model

屏幕分辨率

adb shell wm size

安卓系统版本

adb shell getprop ro.build.version.release

IP地址

adb shell ifconfig | grep Mask

MAC地址

adb shell cat /sys/class/net/wlan0/address

内存信息

adb shell cat /proc/meminfo

设置信息

adb shell settings list system
adb shell settings list secure
adb shell settings list global

实用功能

截屏

截屏保存到电脑本地:

adb exec-out screencap -p > sc.png

exec-out 用于从设备中执行 shell 命令并将其输出作为二进制数据传输回计算机。它可以将设备上的输出流转换为本地文件,也可以将其直接输出到控制台。

截屏保存到设备本地:

adb shell screencap -p /sdcard/sc.png

录屏

adb shell screenrecord /sdcard/filename.mp4

通过Ctrl + C 手动停止,默认录制时间和最长录制时间都是 180 秒,可以通过adb pull传递到电脑上。

查看WI-FI密码

# root权限

adb shell cat "/data/misc/wifi/*.conf"
# or
adb shell cat /data/misc/wifi/WifiConfigStore.xml

开启/关闭WI-FI

# root权限
adb shell svc wifi enable
adb shell svc wifi disable

设置系统时间

# root权限
adb shell date -s 20160823.131500

有的可能会提示没有-s参数,可以使用如下方法:

# 关闭自动时间更新
adb shell settings put global auto_time 0
# 修改时间 date $(date +%m%d%H%M%Y.%S)
adb shell date 031313012023.13

重启

adb reboot

查看进程

adb shell ps

设置全局代理

# 设置代理
adb shell settings put global http_proxy 10.8.165.14:7890
# 去掉代理
adb shell settings delete global http_proxy
adb shell settings delete global global_http_proxy_host
adb shell settings delete global global_http_proxy_port
Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-06-16 10:11:32

results matching ""

    No results matching ""