当前位置: 首页 > >

ADB命令总结

发布时间:

ADB命令总结
运行原理

? PC 端的 adb server 与手机端的守护进程 adbd 建立连接,然后 PC 端的 adb client 通过 adb server 转发命令,adbd 接收命令后解析运行。


连接
无线连接(需USB,无需root)

? 1 设备通过USB连接电脑并处于同一局域网或WIFI
? 2 让设备在5555端口监听TCP/IP连接,命令:adb tcpip 5555
? 3 断开USB并通过设备IP地址连接到设备,命令:adb connect
? 4 确认连接状态,命令:adb devices,正常输出::5555 device
? PS:IP地址:设置 → 关于手机 → 状态信息 → IP地址(192…)


无线连接(无需USB,需root)

? 1 设备安装终端模拟器,链接:https://jackpal.github.io/Android-Terminal-Emulator/
? 2 设备通过USB连接电脑并处于同一局域网或WIFI
? 3 打开终端模拟器并输入命令:su → setprop service.adb.tcp.port 5555
? 4 连接设备,连接方法与确认状态同上
? PS:部分设备连接成功后需*鬭dbd服务,在终端模拟器上运行一下命令
? restart adbd 或 stop adbd → start adbd
断开无线连接,命令:adb disconnect


快捷键
快捷键作用
Ctrl + C取消,可取消当前正在运行的adb命令

ADB命令语法

? adb [-d|-e|-s ]
? PS:只连接一个设备或模拟器时,“[]”内可省


指定目标设备

? -d 指定通过USB连接的设备
? -e 指定运行的模拟器
? -s 指定相应 serialNumber 号的设备/模拟器
? TODO:如何指定无线连接的设备?


启动/停止

? adb start-server adb kill-server


查看 adb 版本

? adb version


以 root 权限运行 adb

? 命令:adb root
? 正常输出:restarting adbd as root
? PS:再执行命令:adb shell ,命令行提示符会变成“#”
? 恢复非root权限:adb unroot


指定 adb server 的网络端口

? adb -P start-server


查询已连接设备/模拟器

? adb devices
? 输出格式为 [serialNumber] [state]
? offline,无响应或未连接;device,已连接,操作状态未知;no device,无设备
? PS:设备系统启动中壳连接到ADB


查看应用列表

? 基本命令格式: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 包含已卸载应用
? 包名包含 字符串


安装 APK

? adb install [-l|-r|-t|-s|-d|-g]
? -l 将应用安装到保护目录 /mnt/asec
? -r 允许覆盖安装
? -t 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly=“true” 的应用
? -s 将应用安装到 sdcard
? -d 允许降级覆盖安装
? -g 授予所有运行时权限
? adb install原理
? 1 push apk 文件到 /data/local/tmp。
? 2 调用 pm install 安装。
? 3 删除 /data/local/tmp 下的对应 apk 文件。


卸载APK

? adb uninstall [-k]
? -k 卸载应用但保留数据和缓存目录


清除应用数据与缓存

? adb shell pm clear
? PS:相当于点击“清除缓存”和“清除数据”


查看前台 Activity

? adb shell dumpsys activity activities | grep mFocusedActivity


查看正在运行的 Services

? adb shell dumpsys activity services []
? PS:上述命令行会列出packagename和其相关的services;packagename不指定,表示查看所有Services


查看应用详细信息

? adb shell dumpsys package


安装APK输出查询

? 输出 含义 解决办法
? INSTALL_FAILED_ALREADY_EXISTS 应用已经存在,或卸载了但没卸载干净 adb install 时使用 -r 参数,或者先 adb uninstall 再安装
? INSTALL_FAILED_INVALID_APK 无效的 APK 文件
? INSTALL_FAILED_INVALID_URI 无效的 APK 文件名 确保APK文件名无中文
? INSTALL_FAILED_INSUFFICIENT_STORAGE 空间不足 清理空间
? INSTALL_FAILED_DUPLICATE_PACKAGE 已经存在同名程序
? INSTALL_FAILED_NO_SHARED_USER 请求的共享用户不存在
? INSTALL_FAILED_UPDATE_INCOMPATIBLE 以前安装过同名应用,但卸载时数据没有移除;或者已安装该应用,但签名不一致,先 adb uninstall 再安装
? INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 请求的共享用户存在但签名不一致
? INSTALL_FAILED_MISSING_SHARED_LIBRARY 安装包使用了设备上不可用的共享库
? INSTALL_FAILED_REPLACE_COULDNT_DELETE 替换时无法删除
? INSTALL_FAILED_DEXOPT dex 优化验证失败或空间不足
? INSTALL_FAILED_OLDER_SDK 设备系统版本低于应用要求
? INSTALL_FAILED_CONFLICTING_PROVIDER 设备里已经存在与应用里同名的 content provider
? INSTALL_FAILED_NEWER_SDK 设备系统版本高于应用要求
? INSTALL_FAILED_TEST_ONLY 应用是 test-only 的,但安装时没有指定 -t 参数
? INSTALL_FAILED_CPU_ABI_INCOMPATIBLE 包含不兼容设备 CPU 应用程序二进*涌诘 native code
? INSTALL_FAILED_MISSING_FEATURE 应用使用了设备不可用的功能
? INSTALL_FAILED_CONTAINER_ERROR 1. sdcard 访问失败; 1. 确认 sdcard 可用,或者安装到内置存储;
? INSTALL_FAILED_INVALID_INSTALL_LOCATION 1. 不能安装到指定位置; 1. 切换安装位置,添加或删除 -s 参数;
? INSTALL_FAILED_MEDIA_UNAVAILABLE 安装位置不可用 一般为 sdcard,确认 sdcard 可用或安装到内置存储
? INSTALL_FAILED_VERIFICATION_TIMEOUT 验证安装包超时
? INSTALL_FAILED_VERIFICATION_FAILURE 验证安装包失败
? INSTALL_FAILED_PACKAGE_CHANGED 应用与调用程序期望的不一致
? INSTALL_FAILED_UID_CHANGED 以前安装过该应用,与本次分配的 UID 不一致 清除以前安装过的残留文件
? INSTALL_FAILED_VERSION_DOWNGRADE 已经安装了该应用更高版本 使用 -d 参数
? INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE 已安装 target SDK 支持运行时权限的同名应用,要安装的版本不支持运行时权限
? INSTALL_PARSE_FAILED_NOT_APK 指定路径不是文件,或不是以 .apk 结尾
? INSTALL_PARSE_FAILED_BAD_MANIFEST 无法解析AndroidManifest.xml 文件
? INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION 解析器遇到异常
? INSTALL_PARSE_FAILED_NO_CERTIFICATES 安装包没有签名
? INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 已安装该应用,且签名与 APK 文件不一致 先卸载设备上的该应用,再安装
? INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING 解析 APK 文件时遇到 CertificateEncodingException
? INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME manifest 文件里没有或者使用了无效的包名
? INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID manifest 文件里指定了无效的共享用户 ID
? INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 解析 manifest 文件时遇到结构性错误
? INSTALL_PARSE_FAILED_MANIFEST_EMPTY 在 manifest 文件里找不到找可操作标签(instrumentation 或 application)
? INSTALL_FAILED_INTERNAL_ERROR 因系统问题安装失败
? INSTALL_FAILED_USER_RESTRICTED 用户被限制安装应用
? INSTALL_FAILED_DUPLICATE_PERMISSION 应用尝试定义一个已存在的权限名称
? INSTALL_FAILED_NO_MATCHING_ABIS 应用包含设备的应用程序二进*涌诓恢С值 native code
? INSTALL_CANCELED_BY_USER 应用安装需要在设备上确认,但未操作设备或点了取消,在设备上同意安装
? INSTALL_FAILED_ACWF_INCOMPATIBLE 应用程序与设备不兼容
? does not contain AndroidManifest.xml 无效的 APK 文件
? is not a valid zip file 无效的 APK 文件
? Offline 设备未连接成功,先将设备与 adb 连接成功
? unauthorized 设备未授权允许调试
? error: device not found 没有连接成功的设备,先将设备与 adb 连接成功
? protocol failure 设备已断开连接,先将设备与 adb 连接成功
? Unknown option: -s Android 2.2 以下不支持安装到 sdcard 不使用 -s 参数
? No space left on device 空间不足清理空间
? Permission denied … sdcard … sdcard 不可用
? signatures do not match the previously installed version; ignoring! 已安装该应用且签名不一致,先卸载设备上的该应用,再安装复制文件到电脑
? adb pull <设备里的文件路径> [电脑上的目录] 复制文件到设备
? adb push <电脑上的文件路径> <设备里的目录> 模拟按键/输入
? adb shell input [] […]
? source:mouse,keyboard,joystick,touchnavigation,touchpad,trackball,stylus,dpad,gesture,touchscreen,gamepad
? command:
? text (Default: touchscreen)
? keyevent [?longpress] … (Default: keyboard)
? tap (Default: touchscreen)
? swipe [duration(ms)] (Default: touchscreen)
? press (Default: trackball)
? roll (Default: trackball)
? 举例:adb shell input keyevent 、
? keyevent:
? 3 HOME 键
? 4 返回键
? 5 打开拨号应用
? 6 挂断电话
? 24 增加音量
? 25 降低音量
? 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 shell input swipe 300 1000 300 500
? PS:参数依次表示起始点x,y坐标 结束点x,y坐标
? 输入文本:adb shell input


日志,命令

? [adb] logcat [] … [] …
? 级别:V Verbose(最低,输出得最多)
? D Debug
? I Info
? W Warning
? E Error
? F Fatal
? S Silent(最高,啥也不输出)
? 举例:adb logcat :W PS:macOS系统以作为tag的参数需加双引号
? adb logcat ActivityManager:I MyApp:D *:S PS: 可以由多个 [:priority] 组成
? 表示:输出 tag ActivityManager 的 Info 以上级别日志,输出 tag MyApp 的 Debug 以上级别日志,及其它 tag 的 Silent 级别日志
指定日志格式:adb logcat -v
? format:brief,process,tag,raw,time,threadtime,long
? 类型 输出格式
? brief /(): (默认格式)
? process ()
? tag /:
? raw
? time /():
? threadtime :
? long [ : / ]
?
? 格式指定与过滤同时使用:adb logcat -v long ActivityManager:I *:S
清空日志:adb logcat -c
内核日志:adb shell dmesg
? PS:"[]"内表示内核开始启动后的时间,单位为秒
? "Freeing init memory"表示内核启动时间


查看设备信息

? 型号:adb shell getprop ro.product.model
? 电池状况:adb shell dumpsys battery
? 屏幕分辨率:adb shell wm size
? 屏幕密度:adb shell wm density
? 显示屏参数:adb shell dumpsys window displays
? android_id:adb shell settings get secure android_id
? IMEI:adb shell dumpsys iphonesubinfo
? Android 系统版本:adb shell getprop ro.build.version.release
? IP 地址:adb shell ifconfig | grep Mask
? 局域网 IP:adb shell ifconfig wlan0
? 所有设备信息:adb shell netcfg
? Mac 地址:adb shell cat /sys/class/net/wlan0/address
? CPU 信息:adb shell cat /proc/cpuinfo
? 内存信息:adb shell cat /proc/meminfo
? 更多硬件与系统属性:adb shell cat /system/build.prop


修改设置

? 分辨率:adb shell wm size 480x1024 恢复:adb shell wm size reset
? 屏幕密度:adb shell wm density 160 恢复:adb shell wm density reset
? 显示区域:adb shell wm overscan 0,0,0,20(左上右下) 恢复:adb shell wm overscan reset
? 关闭 USB 调试模式:adb shell settings put global adb_enabled 0 PS:命令行不能恢复
? 状态栏和导航栏的显示隐藏:adb shell settings put global policy_control
? key 含义 value 含义
? immersive.full 同时隐藏 apps 所有应用
? immersive.status 隐藏状态栏 * 所有界面
? immersive.navigation 隐藏导航栏 packagename 指定应用
? immersive.preconfirms ? -packagename 排除指定应用
? 举例:adb shell settings put global policy_control immersive.full=*


实用功能

? 屏幕截图:adb exec-out screencap -p > sc.png
? 录制屏幕:adb shell screenrecord /sdcard/filename.mp4 PS:停止快捷键:ctrl+c;默认时长180秒
? 查看screenrecord命令帮助:adb shell screenrecord --help


重新挂载 system 分区为可写(需root权限)

? 1 进入shell并切换到root用户权限,命令:adb shell → su
? 2 查看当前分区挂载情况,命令:mount
? 3 找到带/system的那一行,重新挂载:mount -o remount,rw -t yaffs2 <带/system的那一行>


查看连接过的 WiFi 密码(需root权限)

? adb shell → su → cat /data/misc/wifi/*.conf


设置系统日期和时间(需root权限)

? adb shell → su → date -s 20160823.131500


*羰只

? adb reboot


检测设备root状态

? adb shell → su
? 输入命令后,命令行提示符变成“$”,则表示无root权限,变成“#”,则表示已root


使用 Monkey 进行压力测试

? 开启:adb shell monkey -p -v 500
? 关闭:adb shell → top | grep monkey(获取到进程id) → kill -9 进程id
? 检查进程是否关闭:top | grep monkey


开启/关闭 WiFi(需root权限)

? 开启 WiFi:adb root → adb shell svc wifi enable
? 关闭 WiFi:adb root → adb shell svc wifi disable


刷机相关命令

? *舻 Recovery 模式:adb reboot recovery
? 从 Recovery *舻 Android:adb reboot
? *舻 Fastboot 模式:adb reboot bootloader
? Recovery 模式刷机:
? 1 下载rom到电脑上
? 2 *舻 Recovery 模式,命令:adb reboot recovery
? 3 在设备的 Recovery 界面上操作进入 Apply update-Apply from ADB
? 4 通过 adb 上传和更新系统,命令:adb sideload


安全相关命令

? 启用 SELinux adb root → adb shell setenforce 1
? 禁用 SELinux adb root → adb shell setenforce 0
? 启用 dm_verity adb root → adb enable-verity
? 禁用 dm_verity adb root → adb disable-verity


查看进程

? adb shell ps
? PS:USER:所属用户,PID:进程ID,PPID:父进程 ID,NAME:进程名


查看实时资源占用情况

? adb shell top
? PID 进程 ID
? PR 优先级
? CPU% 当前瞬间占用 CPU 百分比
? S 进程状态(R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
? #THR 线程数
? VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
? RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存)
? PCY 调度策略优先级,SP_BACKGROUND/SPFOREGROUND
? UID 进程所有者的用户 ID
? NAME 进程名
? top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ]
? -m num 最多显示多少个进程
? -n num 刷新多少次后退出
? -d num 刷新时间间隔(单位秒,默认值 5)
? -s col 按某列排序(可用 col 值:cpu, vss, rss, thr)
? -t 显示线程信息
? -h 显示帮助文档


查看进程 UID

? 方法1:adb shell dumpsys package | grep userId=
? 方法2:adb shell ps → adb shell cat /proc//status | grep Uid


其他常用命令:

? cat 显示文件内容
? cd 切换目录
? chmod 改变文件的存取模式/访问权限
? df 查看磁盘空间使用情况
? grep 过滤输出
? kill 杀死指定 PID 的进程
? ls 列举目录内容
? mount 挂载目录的查看和管理
? mv 移动或重命名文件
? ps 查看正在运行的进程
? rm 删除文件
? top 查看进程的资源占用情况


常见问题

? 启动 adb server 失败,error: protocol fault (couldn’t read status): No error,adb server 进程想使用的 5037 端口被占用
? 找到占用 5037 端口的进程,然后终止它,命令:netstat -ano | findstr LISTENING → taskkill /PID → *鬭db
TODO:


与应用交互

主要是使用 am 命令,常用的 如下:


command用途
start [options] 启动 指定的 Activity
startservice [options] 启动 指定的 Service
broadcast [options] 发送 指定的广播
force-stop 停止 相关的进程
参数很灵活,和写 Android 程序时代码里的 Intent 相对应。


用于决定 intent 对象的选项如下:


参数 含义
-a 指定 action,比如 android.intent.action.VIEW
-c 指定 category,比如 android.intent.category.APP_CONTACTS
-n 指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity
里还能带数据,就像写代码时的 Bundle 一样:


参数 含义
?esn null 值(只有 key 名)
-e --es
?ez boolean 值
?ei integer 值
?el long 值
?ef float 值
?eu URI
?ecn component name
?eia [,?ela [,
调起 Activity

命令格式:


adb shell am start [options]
例如:


adb shell am start -n com.tencent.mm/.ui.LauncherUI
表示调起微信主界面。


adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es “toast” “hello, world”
表示调起 org.mazhuang.boottimemeasure/.MainActivity 并传给它 string 数据键值对 toast - hello, world。


调起Service

命令格式:adb shell am startservice [options]
例如:adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
表示调起微信的某 Service。


发送广播

命令格式:adb shell am broadcast [options]


可以向所有组件广播,也可以只向指定组件广播。


例如,向所有组件广播 BOOT_COMPLETED:


adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
又例如,只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 广播 BOOT_COMPLETED:


adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver
这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。


既能发送系统预定义的广播,也能发送自定义广播。如下是部分系统预定义广播及正常触发时机:


action触发时机
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 触发)


强制停止应用

命令:adb shell am force-stop
命令示例:adb shell am force-stop com.qihoo360.mobilesafe 表示停止 360 安全卫士的一切进程与服务。



友情链接: