Android ADB常用命令大全
By Long Luo
ADB(Android Debug Bridge) 工具是Android开发中使用很频繁也是非常重要的一个工具,用于手机与电脑的通信。
安装 ADB 工具:
在计算机上安装 Android SDK 或者仅安装 ADB 工具。从 Android 官方网站或者其他可信赖的来源获取它们。
如果你使用 macOS 或 Linux,你可以通过终端使用系统包管理器或 Homebrew 安装 ADB。 如果你使用 Windows,你可以下载 Android Studio ,它包含了 ADB 工具。
连接 Android 设备:
使用 USB 线将 Android 设备连接到计算机上。 在 Android 设备上打开开发者选项。这通常需要在设备设置中多次点击“关于手机” -> “版本号”或者类似的选项。一旦开启,返回设置菜单并找到“开发者选项”。
在“开发者选项”中,启用“USB 调试”。
查看当前设备
adb devices
显示已连接设备的列表。
adb devices List of devices attached 192.168.20.198:5555 device
连接设备
通过TCP端口连接
1 | adb connect 192.168.20.168:5555 |
断开连接
1 | adb disconnect |
查看设备连接IP地址
adb shell ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 40:80:e1:18:07:79 Driver rtl8852bu inet addr:192.168.20.210 Bcast:192.168.23.255 Mask:255.255.252.0 inet6 addr: fe80::f1f2:d9b0:957f:fbc6/64 Scope: Link inet6 addr: 240e:3b3:30b0:be81:2dd0:f286:b5b9:9462/64 Scope: Global inet6 addr: 240e:3b3:30b0:be81:6594:53f2:16ad:26f8/64 Scope: Global UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:87307 errors:0 dropped:28 overruns:0 frame:0 TX packets:149859 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:32578487 TX bytes:60666878
adb shell netcfg
/system/bin/sh: netcfg: inaccessible or not found
设备 ID
ANDROID_ID
adb shell settings get secure android_id
查看系统信息
读取系统的各种文件配置信息,比如 /data/anr/traces.txt
adb shell cat /system/build.prop
adb shell getprop
比如:
adb shell getprop ro.product.model //获取设备型号 adb shell getprop ro.build.version.release //系统版本 adb shell getprop ro.product.board //CPU型号 adb shell getprop ro.serialno //序列号
查看设备信息
屏幕
adb shell dumpsys display
分辨率
adb shell wm size
adb shell wm size Physical size: 3840x2160
density
adb shell wm density
Physical density: 320
CPU 信息
adb shell cat /proc/cpuinfo
内存信息
adb shell cat /proc/meminfo
MemTotal: 7996532 kB MemFree: 2505308 kB MemAvailable: 4238664 kB
查看已安装应用
列出已经安装的应用程序
adb shell pm list packages
如果你想筛选出包含特定关键词的应用程序,可以使用以下命令:
adb shell pm list packages | grep keyword
adb shell pm list packages adb shell pm list packages -s //系统应用 adb shell pm list packages -3 //第三方应用 adb shell pm list packages | grep qq //过滤查找qq应用
卸载普通应用程序
卸载应用程序:
adb uninstall package_name
将 package_name 替换为你想要卸载的应用程序的包名。你可以通过之前提到的 adb shell pm list packages 命令来获取应用程序的包名列表。
示例:
假设你想卸载名为 “com.example.app” 的应用程序,命令将如下所示:
adb uninstall com.example.app
确认卸载:
执行命令后,ADB 会尝试卸载该应用程序。等待一段时间,命令提示符/终端会显示成功或失败的信息。 这个指令卸载系统自带应用可以能会遇到 Failure [DELETE_FAILED_INTERNAL_ERROR] 错误提示
卸载系统自带应用程序
清除应用程序数据:
在卸载应用之前,尝试先清除该应用的数据。使用以下命令:
adb shell pm clear package_name
将 package_name 替换为应用程序的包名。
强制停止应用程序:
如果应用程序正在运行,尝试通过 ADB 强制停止应用程序再进行卸载:
adb shell am force-stop package_name
将 package_name 替换为应用程序的包名。
确保设备有足够的存储空间来完成卸载操作。有时设备存储空间不足可能会导致卸载失败。
使用 ADB shell 运行命令:
adb shell
pm uninstall -k –user 0 package_name
安装 APK 文件
将要安装的 APK 文件复制到计算机上,并记住它的路径,使用以下命令安装 APK 文件到设备:
adb install /path/to/your/app.apk
将 /path/to/your/app.apk 替换为实际 APK 文件的路径。
查看appInfo
adb shell dumpsys package packageName
Activity
查看当前界面的Activity
adb shell “dumpsys activity top | grep ACTIVITY | tail -n 1”
打印顶层Activity信息
查看栈顶的activity
adb shell dumpsys activity top adb shell dumpsys activity top | findstr ACTIVITY
查看当前活动窗口
adb shell dumpsys window | findstr mCurrentFocus
Service
查看所有的系统service
adb shell service list
根据上一行查询出的package,查找该App的launcher Activity
adb shell “dumpsys package com.gitvdemo.video | grep -A 4 ‘MAIN’”
查看当前界面的Fragment
adb shell “dumpsys activity top | grep ‘#[0-9]:’ | tail -n 1”
查看所有在运行的任务栈
adb shell dumpsys activity activities
查看Activity任务栈(仅适用android11以及以上)
adb shell “dumpsys activity activities | grep ‘* ActivityRecord{’”
查看正在运行的 Services
adb shell dumpsys activity -p com.xx.xxx
指定 package 的所有state
adb shell dumpsys activity package com.xx.xxx
adb shell dumpsys activity -p com.xx.xxx s[ervices] adb shell dumpsys activity b[roadcasts] com.xx.xxx
service state
adb shell dumpsys activity s[ervices] [COMP_SPEC …]
service client-side state
adb shell dumpsys activity service [COMP_SPEC]
获取通知信息
adb shell dumpsys notification
获得手机里面某个apk的应用信息、版本信息
adb shell dumpsys package
adb shell dumpsys deviceidle whitelist
查看wifi密码,root权限
adb shell cat /data/misc/wifi/*.conf
读取系统的各种文件配置信息,比如/data/anr/traces.txt
adb shell cat /system/build.prop
adb shell getprop
比如:
adb shell getprop ro.product.model //获取设备型号 adb shell getprop ro.build.version.release //系统版本 adb shell getprop ro.product.board //CPU型号 adb shell getprop ro.serialno //序列号
列出所有安装的APP
adb shell pm list packages adb shell pm list packages -s //系统应用 adb shell pm list packages -3 //第三方应用 adb shell pm list packages | grep qq //过滤查找qq应用
查看设备连接IP地址
adb shell ifconfig wlan0 adb shell netcfg
关闭USB debug模式
adb shell settings put global adb_enabled 0
打开的话 [设置」-「开发者选项」-「Android 调试」
ANDROID_ID adb shell settings get secure android_id IMEI Android 4.4 : adb shell dumpsys iphonesubinfo Android 5.0+: adb shell service call iphonesubinfo 1 windows执行 adb shell “service call iphonesubinfo 1 | grep -o ‘[0-9a-f]{8}’ | tail -n+3 | while read a; do echo -n \u\({a:4:4}\\u\){a:0:4}; done” linux执行
adb shell ‘service call iphonesubinfo 1 | grep -o “[0-9a-f]{8}” | tail -n+3 | while read a; do echo -n “\({a:4:4}\u\){a:0:4}”; done’ 模拟按键和输入 adb shell input –help
电源键: adb shell input keyevent 26 HOME 键: adb shell input keyevent 3 返回键: adb shell input keyevent 4 点亮屏幕: adb shell input keyevent 224 熄灭屏幕: adb shell input keyevent 223 输入文本: adb shell input text xxxxx 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 exec-out screencap -p > C:.png adb shell am start
#启动activity component
adb shell am start -n com.xx.xxx/com.xx.xxx.xxActivity
启动 系统 <设置>
adb shell am start -a android.settings.SETTINGS
1:打开 开发者选项 0: 关闭开发者选项
adb shell settings put global development_settings_enabled 1
-a action_str -d uri
开发者模式 设置
adb shell am start -a android.settings.APPLICATION_DEVELOPMENT_SETTINGS
package为com.xx.xxx的详细设置
adb shell am start -a android.settings.APPLICATION_DETAILS_SETTINGS -d package:com.xx.xxx
example:权限管理设置
adb shell am start -a android.settings.action.MANAGE_OVERLAY_PERMISSION -d package:com.xx.xxx
电池优化 白名单
adb shell am start -a android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS
查看电池优化白名单
adb shell dumpsys deviceidle whitelist
#存储空间管理
adb shell am start -a android.os.storage.action.MANAGE_STORAGE
启动service
adb shell am startservice -n com.some.package/.someService adb shell am broadcast 模拟广播 adb shell am broadcast
[-a
adb shell am broadcast -a android.intent.action.EDIT –es test_string “this is test string” –ei test_int 100 –ez test_boolean true
//刷新 媒体库,注意:有时必须指定 {file_name},否则有时无效 adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/DCIM/Camera/{file_name}
// 递归 刷新 媒体库 adb shell “find /sdcard/Video/ | while read f; do am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d "file://${f}"; done” adb shell am kill /* 关闭package指定的应用程序 */ adb shell am force-stop com.some.package
/* kill与package相关联的所有process */ adb shell am kill com.some.package
/* 杀死所有后台进程process / adb shell am kill-all 查看APP内存限制 / 单个APP heap size限制 */ adb shell getprop | findstr dalvik.vm.heapgrowthlimit adb shell cat /system/build.prop | findstr dalvik.vm Packages.xml应用信息 adb root
/data/system/
adb pull /data/system/packages.xml C:
backup备份
-apk 应用和数据 -noapk 只有数据
adb backup -f “F:*.ab” -apk com.xx.xx
还原
adb restore f:*.ab 查看网络 ping[1] adb shell
查看网络接口 wlan0:无线网络接口 rmnet_data:移动网络接口
ls /sys/class/net/
#查看指定网络接口的配置
ifconfig rmnet_data0
#关闭指定网口
ifconfig rmnet_data0 down
#打开指定网口
ifconfig rmnet_data0 up
#查看所有网口的IP地址
ip -f inet addr
#查看指定网口的IP地址
ip -f inet addr show wlan0
#ping[^note1] 一个地址 4此次
ping -c 4 baidu.com
#查看DNS
getprop | grep dns
#修改DNS,使用上面getprop获得的DNS名称,设置方式飞行模式、开关机失效
setprop net.dns1 223. 控制台文件描述符stdout和stderr adb shell stop adb setprop log.redirect-stdio true adb shell start 普通操作
拨打电话
adb shell am start -a android.intent.action.CALL tel:10010
打开网页
adb shell am start -a android.intent.action.VIEW -d http://www.baidu.com Settings adb shell settings help
是否自动获取时间
adb shell settings get global auto_time
settings 电源、网络、USB控制 adb shell svc
关机
adb shell svc power shutdown
关闭移动数据
adb shell svc data disable
image.png
获取网口MAC地址
adb shell
cd sys/class/net
#根据 networkInterface进入相应的网络接口
cat eth0/address cat wlan0/address
查看进程线程所在的CPU核心
ps的命令参数:-t -x,-P,-p,-c [pid|name]
-t显示进程下的线程列表 -x 显示进程耗费的用户时间和系统时间,单位s -P 显示调度策略,通过是bg or fg ,当获取失败将会un和er比之前打印的内容多出了一列PCY,表示进程的调度等级 +-p 显示进程的优先级和nice等级 -c 显示进程耗费的CPU时间 [PID]过滤指定进程PID,[name]过滤指定进程NAME adb shell ps -P -t -c -x PID MTK:
找出自己APP进程的PID, 关键字模糊匹配app的packageName
adb shell ps | findstr “PID player” #查看help,有哪些fields可以被打印 adb shell ps –help # -T 显示线程名, -o 执行显示哪些fields, 我们要显示CPU adb shell ps -T -o UID,PID,CPU,%CPU,%MEM,NI,PSR,TIME,CMD -p 2912 CPU : 线程、进程在哪个cpu processor上执行 %CPU: 使用CPU时间的百分比 %MEM: 占用物理内存的百分比 NI: 线程的nice值,对应线程的优先级设置(static 19 to -20) CMD: 线程名称
ps-cpu 修改系统时间 Windows (PowerShell)
#Windows (PowerShell) $currentDate = Get-Date -Format “MMddHHmmyyyy.ss” adb shell “date $currentDate;am broadcast -a android.intent.action.TIME_SET” 查看Android系统时间
date +“%Y-%m-%d %H:%M:%S” 批处理
set dateYYYY=%date:~0,4% set dateMM=%date:~5,2% set dateDD=%date:~8,2% set timeHH=%time:~0,2% set timeMM=%time:~3,2% set timeSS=%time:~6,2%
adb shell date %dateMM%%dateDD%%timeHH%%timeMM%%dateYYYY%.%timeSS% adb shell am broadcast -a android.intent.action.TIME_SET tasksetCPU绑定
#查看pid 4069
taskset -p 4069
#把 我们的pid 加入到进程组
echo 347 > /dev/cpuset/foreground/task
#修改进程组的background的CPU调度策略
echo 0-3 > /dev/cpuset/background/cpus
taskset
查看指定进程的内存使用
adb shell dumpsys meminfo $package_name or $pid 查看系统内核
uname -a 获取IP地址
adb shell ip route | awk ‘{print $9}’ adb授予权限
adb shell pm grant com.ts.player android.permission.READ_EXTERNAL_STORAGE adb shell pm grant com.ts.player android.permission.WRITE_EXTERNAL_STORAGE 查看媒体提取器
adb shell dumpsys media.extractor 禁止弹出 沉浸式提示窗口 Viewing full screen. To exit, swipe down from the top
查看 secure namespace 下所有的值
adb shell settings list secure
是否已确认过
adb shell settings list secure | findstr immersive
删除此值
adb shell settings delete secure immersive_mode_confirmations
查看此值
adb shell settings secure get immersive_mode_confirmations
修改此值 disable 弹窗
adb shell settings put secure immersive_mode_confirmations confirmed
修改文件访问权限 chmod
修改文件权限
chmod [option] filename
给文件 加 运行 权限
chmod ugo+x
# 可以用二进制位表示:3个字节,每个字节代表一个用户组,每个字节的后3位由高到低代表 r、w、x,读写权限 rw= 100 | 010 = 110 = 6 chmod 777
📝[option]表示各种权限选项:
r(或4100):读取权限 w(或2010):写入权限 x(或1001):执行权限
📝还可以指定权限的获取者,三个部分的左中右:
u:文件所有者 g:文件所有者所在的组的用户 o:其他组的用户
权限的授予可采用操作符“+”,而“-”表示收回权限:
给其他组用户赋予read权限
chmod o+r
此用户无法使用开发者选项
adb shell settings put secure user_setup_complete 1 adb shell settings put global device_provisioned 1
Help
1 | E:\Tools>adb shell pm help |
获取安装包1
2E:\Tools>adb shell pm list packages -s
查找其安装位置:1
2
3
4
5
6E:\Tools>adb shell pm list packages -f | grep "tencent"
package:/data/app/com.tencent.androidqqmail-1/base.apk=com.tencent.androidqqmail
package:/data/app/com.tencent.mm-1/base.apk=com.tencent.mm
package:/data/app/com.tencent.qqlive-1/base.apk=com.tencent.qqlive
package:/data/app/com.tencent.weread-1/base.apk=com.tencent.weread
package:/data/app/com.tencent.mobileqq-1/base.apk=com.tencent.mobileqq
无线调试
https://developer.android.com/studio/command-line/adb.html
截图与录屏
1 | adb shell screencap -p /sdcard/screenshot.png |
1 | adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screenshot.png |
帧率分析
1 | adb shell dumpsys gfxinfo 包名 |
1 | E:\Tools>adb shell dumpsys gfxinfo com.tencent.mobileqq > fps.txt |
dumpsys
- Activity
- cpuinfo
- meminfo
- package
- window
- statusbar
- battery/batteryinfo
- alarm
Logcat
help
1 | E:\Tools>adb logcat --help |
第三方Logcat
https://github.com/JakeWharton/pidcat
Bugreport
参考文献
常用命令 https://www.cnblogs.com/JianXu/p/5161179.html
https://www.jianshu.com/p/c797768a15a0
https://blog.baicai.me/article/2023/adb_pm_uninstall/