在Android framework开发中,ADB(Android Debug Bridge)是一个非常重要的工具,它允许开发者与模拟器或已连接的Android设备进行通信。以下是一些常用的ADB指令及其用途:
1. 设备管理
-
查看已连接设备:
adb devices- 列出当前通过ADB连接的所有设备或模拟器。
-
启动/停止ADB服务:
- 启动ADB服务:
adb start-server(通常不需要手动启动,除非ADB服务未运行) - 停止ADB服务:
adb kill-server(用于重置ADB状态)
- 启动ADB服务:
2. 应用管理
-
安装APK:
adb install <path_to_apk>- 安装应用包到设备或模拟器上。使用
-r参数可以保留应用数据重新安装。
- 安装应用包到设备或模拟器上。使用
-
卸载APK:
adb 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 文件夹,你可以按照以下步骤操作:
-
确保设备已连接:首先确保你的 Android 设备已通过 USB 连接到电脑,并且开启了开发者选项和 USB 调试。
-
打开命令提示符或终端:在 Windows 上,你可以按
Win + R,然后输入cmd并按回车键来打开命令提示符。 -
检查设备连接:在命令提示符中输入以下命令来确认设备是否已正确连接:
adb devices你应该能看到列出的设备。如果设备未列出,请检查 USB 连接和开发者选项设置。
-
拉取日志:使用
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
如果你更喜欢使用批处理文件,可以使用以下方法:
-
创建一个批处理文件
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 -
将
get_logs.bat保存到一个方便的位置,例如桌面。 -
双击运行
get_logs.bat文件。
-
-
这样,你就可以将过去一小时的日志保存到 E:\log\device_log.txt 文件中。请确保 E:\log 文件夹存在,否则你需要先创建该文件夹。