常用ADB指令

471 阅读4分钟

在Android framework开发中,ADB(Android Debug Bridge)是一个非常重要的工具,它允许开发者与模拟器或已连接的Android设备进行通信。以下是一些常用的ADB指令及其用途:

1. 设备管理

  • 查看已连接设备adb devices

    • 列出当前通过ADB连接的所有设备或模拟器。
  • 启动/停止ADB服务

    • 启动ADB服务:adb start-server(通常不需要手动启动,除非ADB服务未运行)
    • 停止ADB服务:adb kill-server(用于重置ADB状态)

2. 应用管理

  • 安装APKadb install <path_to_apk>

    • 安装应用包到设备或模拟器上。使用-r参数可以保留应用数据重新安装。
  • 卸载APKadb uninstall <package_name>

    • 卸载应用,使用-k参数可以保留数据和缓存。
  • 清除应用数据与缓存adb shell pm clear <package_name>

    • 清除指定应用的所有数据和缓存。
  • 列出所有已安装应用的包名adb shell pm list packages

    • 列出所有安装的应用包名,包括系统和第三方应用。
  • 列出系统应用包名adb shell pm list packages -s

    • 仅列出系统应用的包名。
  • 列出第三方应用包名adb shell pm list packages -3

    • 仅列出非系统(第三方)应用的包名。

3. 应用启动与停止

  • 启动应用adb shell am start -n <package_name>/<activity_name>

    • 启动指定包名和活动名的应用或活动。
  • 强制停止应用adb shell am force-stop <package_name>

    • 强制停止运行中的应用。

4. 日志管理

  • 查看日志adb logcat

    • 查看设备或模拟器的日志输出,可以使用grep等工具进行过滤。
  • 将日志输出到文件adb logcat > log.txt

    • 将日志输出重定向到文件,便于后续分析。

5. 文件操作

  • 推送文件到设备adb push <local_path> <device_path>

    • 将本地文件推送到设备上的指定位置。
  • 从设备拉取文件adb pull <device_path> <local_path>

    • 从设备上的指定位置拉取文件到本地。

--切换深浅模式

6. 其他常用命令

  • 查看设备信息

    • adb shell getprop:查看设备的各种属性信息,如系统版本、API级别等。
    • adb shell dumpsys:查看系统服务状态,如窗口管理服务(WMS)的状态。
  • 输入事件

    • adb shell input keyevent <keycode>:发送按键事件到设备,如模拟按键操作。
    • adb shell input text <text>:发送文本到设备,如模拟输入文本。
  • 屏幕截图adb shell screencap -p /sdcard/screenshot.png && adb pull /sdcard/screenshot.png

    • 在设备上截取屏幕截图,并拉取到本地。
  • 查看屏幕上方Window层级(排查透明Activity遮盖)adb shell然后 dumpsys window windows |grep "Window #"

这些ADB指令在Android framework开发中非常实用,能够帮助开发者进行设备调试、应用安装测试、日志分析等任务。

7. 拉取日志

要使用 adb 命令从 Android 设备中拉取过去一小时的日志并保存到本地的 E:\log 文件夹,你可以按照以下步骤操作:

  1. 确保设备已连接:首先确保你的 Android 设备已通过 USB 连接到电脑,并且开启了开发者选项和 USB 调试。

  2. 打开命令提示符或终端:在 Windows 上,你可以按 Win + R,然后输入 cmd 并按回车键来打开命令提示符。

  3. 检查设备连接:在命令提示符中输入以下命令来确认设备是否已正确连接:

    adb devices
    

    你应该能看到列出的设备。如果设备未列出,请检查 USB 连接和开发者选项设置。

  4. 拉取日志:使用 adb logcat 命令来获取过去一小时的日志。你可以通过指定时间范围来过滤日志。以下是具体步骤:

    • 首先,创建一个脚本来获取过去一小时的日志。你可以在命令提示符中直接运行这些命令,或者将它们保存为一个批处理文件(例如 get_logs.bat)。

    • 使用以下命令来获取过去一小时的日志并保存到 E:\log 文件夹中的 device_log.txt 文件:

      adb logcat -t "$(date -d '1 hour ago' +%Y-%m-%d\ %H:%M:%S).000" *:V > E:\log\device_log.txt
      

      但是,date 命令在 Windows 的命令提示符中不可用,因此你需要使用其他方法来计算时间。可以使用 PowerShell 或者安装 busybox 工具来实现。

      如果你有 PowerShell,可以使用以下命令:

      $oneHourAgo = (Get-Date).AddHours(-1).ToString("yyyy-MM-dd HH:mm:ss.000")
      adb logcat -t "$oneHourAgo" *:V > E:\log\device_log.txt
      

      合成一条指令就是: adb logcat -t ((Get-Date).AddHours(-1).ToString("yyyy-MM-dd HH:mm:ss.000")) *:V > E:\log\device_log.txt

      如果你更喜欢使用批处理文件,可以使用以下方法:

      1. 创建一个批处理文件 get_logs.bat,内容如下:

        @echo off
        setlocal
        
        :: 获取当前时间
        for /f "tokens=2 delims==" %%i in ('wmic os get localdatetime /value') do set datetime=%%i
        set year=%datetime:~0,4%
        set month=%datetime:~4,2%
        set day=%datetime:~6,2%
        set hour=%datetime:~8,2%
        set minute=%datetime:~10,2%
        set second=%datetime:~12,2%
        
        :: 计算一小时前的时间
        set /a hour-=1
        if %hour% lss 0 (
            set /a hour+=24
            set /a day-=1
            if %day% lss 1 (
                set /a month-=1
                if %month% lss 1 (
                    set /a year-=1
                    set month=12
                )
                set day=31
            )
        )
        
        :: 格式化时间
        set oneHourAgo=%year%-%month%-%day% %hour%:%minute%:%second%.000
        
        :: 拉取日志
        adb logcat -t "%oneHourAgo%" *:V > E:\log\device_log.txt
        
        endlocal
        
      2. get_logs.bat 保存到一个方便的位置,例如桌面。

      3. 双击运行 get_logs.bat 文件。

这样,你就可以将过去一小时的日志保存到 E:\log\device_log.txt 文件中。请确保 E:\log 文件夹存在,否则你需要先创建该文件夹。