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