adb基础
2024-08-04 21:30:17 0 举报
AI智能生成
安卓adb基础总结
作者其他创作
大纲/内容
基本语法
adb [-d|-e|-s <serial-number>] <command><br>
如果只有一个设备/模拟器连接时,<br>可以省略掉 [-d|-e|-s <serial-number>] 这一部分,直接使用 adb <command>。<br>
在多个设备/模拟器连接的情况下较常用的是 -s <serial-number> 参数,<br>serial-number是指设备的设备序列号,可以通过 adb devices 命令获取。<br>
参数说明
-d:指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e:指定当前唯一运行的模拟器为命令目标
-s:<serial-number> 指定相应设备序列号的设备/模拟器为命令目标<br>
参考网页
https://blog.csdn.net/lb245557472/article/details/84068519
环境搭建与连接
安装ADB工具
Windows系统安装
Linux/Mac系统安装
验证ADB版本
连接设备
通过USB连接设备
通过Wi-Fi连接设备
解决连接问题
查看已连接设备
adb devices
基础信息查询
设备信息查询
获取设备型号
adb shell getprop ro.product.model<br>
查看系统版本
adb version<br>
电池状态查询
adb shell dumpsys battery<br>
应用管理
安装应用
adb install [-l] [-r] [-t] [-s] [-d] [-g] <apk-file><br>
参数说明
-l:将应用安装到保护目录 /mnt/asec<br>-r:允许覆盖安装<br>-t:允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用<br>-s:将应用安装到 sdcard<br>-d:允许降级覆盖安装<br>-g:授予所有运行时权限
adb install 实际是分三步完成<br>
push apk 文件到 /data/local/tmp。
调用 pm install 安装。
删除 /data/local/tmp 下的对应 apk 文件。
卸载应用
adb uninstall [-k] <package-name>
参数说明
-k:表示卸载应用但保留数据和缓存目录
查看应用列表命令基础格式<br>
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]<br>
参数说明
无:所有应用<br>-f:显示应用关联的 apk 文件<br>-d:只显示 disabled 的应用<br>-e:只显示 enabled 的应用<br>-s:只显示系统应用<br>-3:只显示第三方应用<br>-i:显示应用的 installer<br>-u:包含已卸载应用<br><filter>:包名包含 <filter> 字符串。例如:adb shell pm list packages huawei,查看包含huawei的应用列表<br>
查看应用安装路径
adb shell pm path <package-name>
查看应用详情
adb shell dumpsys package <package-name>
与应用交互<br>
基础格式
adb shell am <command>
常用command
start [options] <intent>:启动 <intent> 指定的 Activity<br>startservice [options] <intent>:启动 <intent> 指定的 Service<br>broadcast [options] <intent>:发送 <intent> 指定的广播<br>force-stop <package-name>:停止 <package-name> 相关的进程<br>
用于决定 intent 对象的选项
-a <action>:指定 action,比如 android.intent.action.VIEW<br>-c <category>:指定 category,比如 android.intent.category.APP_CONTACTS<br>-n <component>:指定完整 component 名,用于明确指定启动哪个 Activity<br>
option支持可选参数
-D:启用调试<br>-W:等待启动完成<br>–start-profiler file:启动分析器并将结果发送到 file<br>-P file:类似于 --start-profiler,但当应用进入空闲状态时分析停止<br>-R count:重复 Activity 启动次数<br>-S:启动 Activity 前强行停止目标应用<br>–opengl-trace:启用 OpenGL 函数的跟踪<br>–user user_id:current<br>
常用操作
启动应用/ 调起 Activity
adb shell am start [options] <intent><br>
例子:<br>adb shell am start -a android.settings.SETTINGS # 打开系统设置页面<br>adb shell am start -a android.intent.action.DIAL -d tel:10086 # 打开拨号页面<br>adb shell am start -n com.android.mms/.ui.ConversationList # 打开短信会话列表<br>
调起 Service
adb shell am startservice [options] <intent>
例子:一个典型的用例是如果设备上原本应该显示虚拟按键但是没有显示<br>adb shell am startservice -n com.android.systemui/.SystemUIService<br>
停止 Service
adb shell am stopservice [options] <intent>
强制停止应用
adb shell am force-stop <packagename>
收紧内存
adb shell am send-trim-memory <pid> <level>
参数说明
pid:进程 ID<br>level:HIDDEN、RUNNING_MODERATE、BACKGROUND、RUNNING_LOW、MODERATE、RUNNING_CRITICAL、COMPLETE
发送广播
adb shell am broadcast [options] <intent><br>
例子:<br>①向所有组件广播 BOOT_COMPLETED:adb shell am broadcast -a android.intent.action.BOOT_COMPLETED<br>②只向 com.BootCompletedReceiver 广播 BOOT_COMPLETED:adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.BootCompletedReceiver<br>
部分系统预定义广播及正常触发时机
android.net.conn.CONNECTIVITY_CHANGE 网络连接发生变化<br>android.intent.action.SCREEN_ON 屏幕点亮<br>android.intent.action.SCREEN_OFF 屏幕熄灭<br>android.intent.action.BATTERY_LOW 电量低,会弹出电量低提示框<br>android.intent.action.BATTERY_OKAY 电量恢复了<br>android.intent.action.BOOT_COMPLETED 设备启动完毕<br>android.intent.action.DEVICE_STORAGE_LOW 存储空间过低<br>android.intent.action.DEVICE_STORAGE_OK 存储空间恢复<br>android.intent.action.PACKAGE_ADDED 安装了新的应用<br>android.net.wifi.STATE_CHANGE WiFi连接状态发生变化<br>android.net.wifi.WIFI_STATE_CHANGED WiFi状态变为启用/关闭/正在启动/正在关闭/未知<br>android.intent.action.BATTERY_CHANGED 电池电量发生变化<br>android.intent.action.INPUT_METHOD_CHANGED 系统输入法发生变化<br>android.intent.action.ACTION_POWER_CONNECTED 外部电源连接<br>android.intent.action.ACTION_POWER_DISCONNECTED 外部电源断开连接<br>android.intent.action.DREAMING_STARTED 系统开始休眠<br>android.intent.action.DREAMING_STOPPED 系统停止休眠<br>android.intent.action.WALLPAPER_CHANGED 壁纸发生变化<br>android.intent.action.HEADSET_PLUG 插入耳机<br>android.intent.action.MEDIA_UNMOUNTED 卸载外部介质<br>android.intent.action.MEDIA_MOUNTED 挂载外部介质<br>android.os.action.POWER_SAVE_MODE_CHANGED 省电模式开启<br>
文件管理
推送文件到设备
使用adb push命令
adb pull <remote> [local]<br>
参数说明
remote:模拟器/设备里的文件路径<br>local:计算机上的目录,参数可以省略,默认复制到当前目录
例子:将 /sdcard/music.mp4 下载到计算机的当前目录:adb pull /sdcard/music.mp4<br>
从设备拉取文件
使用adb pull命令
adb push <local> <remote><br>
例子:adb push D:\Download\music.mp4 /sdcard/music/<br>
浏览设备文件系统
使用adb shell命令
切换到目标目录
adb shell cd <directory>
输出当前目录路径
adb shell pwd
列出指定目录的内容
adb shell ls [options] <directory>
可用参数
无:列出目录下的所有文件和目录<br>-a:列出目录下的所有文件(包括隐藏的)<br>-i:列出目录下的所有文件和索引编号<br>-s:列出目录下的所有文件和文件大小<br>-n:列出目录下的所有文件及其 UID和 GID<br>-R:列出目录下的所有子目录中的文件
创建目录
adb shell mkdir [options] <directory-name>
可选参数
无:创建指定目录<br>-m:创建指定目录并赋予读写权限<br>-p:创建指定目录及其父目录
删除文件或目录
adb shell rm [options] <files or directory>
可选参数
无:删除文件<br>-f:强制删除文件,系统不提示<br>-r:强制删除指定目录中的所有文件和子目录<br>-d:删除指定目录,即使它是一个非空目录。rm -d 等同于 rmdir 命令,有些版本不包含-d 参数。<br>-i:交互式删除,删除前提示
复制文件或目录
adb shell cp [options] <source> <dest>
移动或重命名文件
adb shell mv [options] <source> <dest>
创建空文件或改变文件时间戳
adb shell touch [options] <file>
可通过 ls -n <directory> 命令查看文件的时间。
修改文件权限
chmod命令使用
adb shell chmod 755 <file_or_directory>:为文件或目录设置读、写和执行权限。这允许所有者读取、写入和执行,组和其他用户只允许读取和执行。
adb shell chmod 700 <file_or_directory>:为文件或目录设置仅所有者的读、写和执行权限。组和其他用户没有权限。
adb shell chmod 644 <file_or_directory>:为文件设置所有者的读写权限和组及其他用户的只读权限。对于目录,这相当于chmod 755。
adb shell chmod 600 <file_or_directory>:为文件设置仅所有者的读写权限。组和其他用户没有权限。对于目录,这不会改变其权限,因为目录至少需要执行权限才能访问其子项。
adb shell chmod +x <file_or_directory>:为文件或目录添加执行权限。
adb shell chmod -x <file_or_directory>:从文件或目录中删除执行权限。
adb shell chmod u+w <file_or_directory>:为文件或目录的所有者添加写权限。
adb shell chmod u-w <file_or_directory>:从文件或目录的所有者中删除写权限。
调试与日志
日志输出
Android 系统的日志分为两部分
底层的 Linux 内核日志输出到 /proc/kmsg
Android 的日志输出到 /dev/log
查看系统日志
android日志
adb logcat [option] [filter-specs]
将日志格式化输出
adb logcat -v <format>
format说明
brief:<priority>/<tag>(<pid>): <message><br>process:<priority>(<pid>) <message><br>tag:<priority>/<tag>: <message><br>raw:<message><br>time:<datetime> <priority>/<tag>(<pid>): <message><br>threadtime:<datetime> <pid> <tid> <priority> <tag>: <message><br>long:[ <datetime> <pid>:<tid> <priority>/<tag> ] <message><br>
例子:<br>日志格式默认为 brief,指定格式可与<u>下面的过滤</u>同时使用。比如:<br>adb logcat -v long ActivityManager:I *:S<br>
查看具体某个应用的日志
adb logcat -v <format> | grep <package name>
例子:adb logcat -v time | grep com.example.myapp<br>
adb logcat * | find “AppName”
清空已存在的日志
adb logcat -c
将日志显示在控制台
adb logcat -d
将日志输出到文件
adb logcat > file-path
例子:adb logcat | findstr AppName >D:\log.txt<br>
加载一个可使用的日志缓冲区供查看
adb logcat -b <Buffer>
缓冲区主要给系统组件使用,一般的应用不需要关心,应用的log都输出到main缓冲区中。<br>默认log输出(不指定缓冲区的情况下)是输出System和Main缓冲区的log。<br>
打印指定日志缓冲区的大小
adb logcat -g
内核日志
adb shell dmesg
通过内核日志我们可以做一些事情,比如衡量内核启动时间,在系统启动完毕后的内核日志里找到 Freeing init memory 那一行前面的时间就是。
过滤日志内容
按级别过滤日志
adb logcat [filter-specs]
级别优先级说明
*:V--过滤只显示 Verbose 及以上级别(优先级最低)<br>*:D--过滤只显示 Debug 及以上级别<br>*:I--过滤只显示 Info 及以上级别<br>*:W--过滤只显示 Warning 及以上级别<br>*:E--过滤只显示 Error 及以上级别<br>*:F--过滤只显示 Fatal 及以上级别<br>*:S--过滤只显示 Silent 及以上级别(优先级最高,什么也不输出)<br>
例子:<br>adb logcat *:W 会将 Warning、Error、Fatal 和 Silent 日志输出。<br>(注: 在 macOS 下需要给 *:W 这样以 * 作为 tag 的参数加双引号,如 <u>adb logcat "*:W</u>",不然会报错 no matches found: *:W。)<br>
按tag和级别过滤日志<br>
adb logcat [tag:level] [tag:level] ...
例子:adb logcat ActivityManager:I MyApp:D *:S<br>表示输出 tag ActivityManager 的 Info 以上级别日志,<br>输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志(即屏蔽其它 tag 日志)<br>
截图与录屏
屏幕截图
<b>adb exec-out screencap</b> -p > sc.png<br>
输出结果为sc.png
屏幕录制
<b>adb shell screenrecord</b> /sdcard/filename.mp4<br>
保存位置为:/sdcard/filename.mp4
可以使用 adb shell screenrecord --help 查看 screenrecord 命令的帮助信息
性能分析
使用dumpsys命令
adb dumpsys activity:显示有关当前活动、最近启动的活动和与活动相关的信息。<br><br>adb dumpsys batterystats:显示电池统计信息,包括充电状态、放电状态、电池使用时间等。<br><br>adb dumpsys cpuinfo:显示CPU使用率信息,包括每个应用程序和系统的CPU使用率。<br><br>adb dumpsys meminfo:显示内存使用情况,包括应用程序的内存占用、垃圾回收统计等。<br><br>adb dumpsys network_stats:显示网络统计信息,包括数据使用情况、网络接口状态等。<br><br>adb dumpsys wifi:显示Wi-Fi相关信息,包括连接状态、信号强度、已知的Wi-Fi网络等。<br><br>adb dumpsys window:显示窗口管理信息,包括当前屏幕上显示的窗口、焦点窗口等。<br><br>adb dumpsys package:显示有关指定应用程序包的信息,包括安装状态、版本号、权限等。
使用traceview工具
traceview 是Android SDK中的一个性能分析工具<br>
步骤
①启动Traceview:使用以下命令启动<br>adb shell am start -n <your_activity_name> --es tracefile <output_file_path><br>将 <your_activity_name> 替换为分析的活动的完整名称(包括包名),将 <output_file_path> 替换为存储跟踪数据的文件路径。<br>例如:<br>adb shell am start -n com.example.myapp/.MainActivity --es tracefile /data/anr/myapp_trace.txt<br>这将启动名为 com.example.myapp.MainActivity 的活动,并开始收集性能数据,将其存储在 /data/anr/myapp_trace.txt 文件中。
②停止Traceview并获取数据:要停止数据收集并将跟踪数据传输到计算机上,请使用以下命令
adb pull /data/anr/<output_file_path> <local_output_file_path>
adb shell am force-stop <your_package_name>
将 <output_file_path> 替换为上一步中使用的输出文件路径,将 <local_output_file_path> 替换为希望将文件复制到的本地计算机上的路径,将 <your_package_name> 替换为应用程序包名。
例如:
adb pull /data/anr/myapp_trace.txt ~/Downloads/myapp_trace.txt
adb shell am force-stop com.example.myapp
③打开Traceview并分析数据:可以在Android SDK的 tools 目录中找到 traceview.bat(Windows)或 traceview(Linux/macOS)脚本,并运行它。将跟踪数据文件作为参数传递:
./traceview ~/Downloads/myapp_trace.txt
这将启动Traceview工具,并显示性能数据的图形化视图。可以使用此工具分析应用程序的性能瓶颈,找到CPU和内存使用的异常情况,并优化代码以提高性能。
高级操作
模拟用户操作
模拟按键/输入
adb shell input keyevent <keycode>
参数说明:keycode支持输入数字或者单词代号
https://blog.csdn.net/h_bpdwn/article/details/91425599
常见例子
电源键:adb shell input keyevent 26/POWER<br>菜单键:adb shell input keyevent 82/MENU<br>home键:adb shell input keyevent 3/HOME<br>返回键:adb shell input keyevent 4/BACK<br>音量控制------<br>增加音量:adb shell input keyevent 24/VOLUME_UP<br>降低音量:adb shell input keyevent 25/VOLUME_DOWN<br>静音:adb shell input keyevent 164/VOLUME_MUTE<br>媒体控制------<br>播放:adb shell input keyevent 85/MEDIA_PLAY<br>暂停:adb shell input keyevent 127/MEDIA_PAUSE<br>停止播放:adb shell input keyevent 86/MEDIA_STOP<br>播放上一首:adb shell input keyevent 88/MEDIA_PREVIOUS<br>播放下一首:adb shell input keyevent 87/MEDIA_NEXT<br>
输入文本
adb shell input text hello
在焦点处于某文本框时,可以通过 input 命令来输入文本。
点击屏幕
点亮屏幕<br>
adb shell input keyevent 224
熄灭屏幕
adb shell input keyevent 223
滑动屏幕
adb shell input swipe 300 1000 300 500
参数说明:参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。
系统命令执行
重启设备
adb shell am broadcast -a android.intent.action.REBOOT<br>
关机设备
adb shell am broadcast -a android.intent.action.SHUTDOWN
进入recovery模式
adb shell am broadcast -a android.intent.action.MASTER_CLEAR<br>
端口转发
设置端口转发
adb reverse命令
查看端口转发状态
adb forward --list
查看进程状态
adb shell ps
查看处理器实时状态
adb shell top [-m max_procs] [-n iterations] [-d delay] [-s sort_column] [-t] [-h]
查看进程 UID
通过 ps 命令找到对应进程的 pid 之后 <b>adb shell cat /proc/<pid>/status | grep Uid</b>
例子:<br>adb shell<br>gemini:/ $ ps | grep org.mazhuang.guanggoo<br>u0_a394 28635 770 1795812 78736 SyS_epoll_ 0000000000 S org.mazhuang.guanggoo<br>gemini:/ $ cat /proc/28635/status | grep Uid<br>Uid: 10394 10394 10394 10394<br>
使用 Monkey 进行压力测试
简单用法:adb shell monkey -p <packagename> -v 500<br>表示向 <packagename> 指定的应用程序发送 500 个伪随机事件。<br>
ADB无线调试
启用无线调试
连接无线ADB
安全与维护
备份与恢复
数据备份
adb backup -f <backup_file> <your_package_name>
例子:adb backup -f ~/myapp_backup.ab com.example.myapp
数据恢复
adb restore <backup_file>
例子:adb restore ~/myapp_backup.ab
清理缓存
清理应用缓存
adb shell pm clear <your_package_name>
清理系统缓存
adb shell am broadcast -a android.intent.action.CLEAR_APP_CACHE
权限管理
查看应用权限
显示设备上所有权限的分组列表:<b>adb shell pm list permissions -g<br></b>每个分组后面跟着一个权限标签,指示该分组包含哪些权限。<br>
查看特定应用权限:<b>adb shell dumpsys package <your_package_name> | grep -i permission</b>
修改应用权限
授予权限
adb shell pm grant <your_package_name> <permission>
撤销权限
adb shell pm revoke <your_package_name> <permission>
0 条评论
下一页