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:部分设备连接成功后需重启adbd服务,在终端模拟器上运行一下命令
​ 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 → 重启adb
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 安全卫士的一切进程与服务。

你可能感兴趣的:(Android开发环境,Java)