adb命令用法整理

Android Debug Bridge:android调试桥,通常位于sdk的platform-toor文件夹下。

ADB架构

adb是一个C/S架构的应用程序,由三部分组成:

  1. 客户端,运行在开发者的pc端,使用adb命令调用。运行后会尝试定位主机上的adb服务器,如果没有则启动一个adb服务器。
  2. 服务器,运行在开发者pc端的一个后台进程,作用在于监测usb端口的感知设备的连接和拔出;管理客户端和守护进程之间的通信,将客户端的请求通过usb或者tcp的方式发送到设备端的守护进程(常驻进程)adbd中。
  3. adbd(adb demon),运行在每个设备端后台的一个守护进程(常驻进程),作用是用于连接adb服务器,当adbd与服务器连接后,客户端就可以想adb服务器发送服务请求了。

adb的工作原理

  1. 在pc端运行adb命令启动时,客户端先监测服务器进程是否运行,否则启动,服务器在启动后与本地 tcp的5037端口绑定,通过该端口监听客户端发出的命令,也可以通过adb -P start-server指定固定端口。
  2. 服务器与设备端连接,服务器通过扫描5555到5585之间的奇数端口查找模拟器,服务器发现adbd(守护进程)后便于之连接。
    note:每个模拟器都使用一对按顺序排列的端口,偶数端口连接控制台,奇数端口连接adb。

具体用法

指定目标设备

如果有多个设备时使用:
-d指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e指定当前唯一运行的模拟器为命令目标
-s 指定相应 serialNumber 号的设备/模拟器为命令目标

查看应用列表

adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
即在 adb shell pm list packages 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:
所有应用
-f显示应用关联的 apk 文件
-d只显示 disabled 的应用
-e只显示 enabled 的应用
-s只显示系统应用
-3只显示第三方应用
-i显示应用的 installer
-u包含已卸载应用
包名包含 字符串

安装APK

adb install 后面可以跟一些可选参数来控制安装 APK 的行为,可用参数及含义如下:
-l将应用安装到保护目录 /mnt/asec
-r允许覆盖安装
-t允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用
-s将应用安装到 sdcard
-d允许降级覆盖安装
-g授予所有运行时权限

常见安装失败输出代码、含义及可能的解决办法如下:
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
sdcard 访问失败; 应用签名与 ROM 签名一致,被当作内置应用。确认 sdcard 可用,或者安装到内置存储; 打包时不与 ROM 使用相同签名。
INSTALL_FAILED_INVALID_INSTALL_LOCATION
不能安装到指定位置;应用签名与 ROM 签名一致,被当作内置应用。切换安装位置,添加或删除 -s 参数;打包时不与 ROM 使用相同签名。
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 install 内部原理简介

adb install 实际是分三步完成:

  1. push apk 文件到 /data/local/tmp。
  2. 调用 pm install 安装。
  3. 删除 /data/local/tmp 下的对应 apk 文件。
    所以,必要的时候也可以根据这个步骤,手动分步执行安装过程。
清除应用数据与缓存

adb shell pm clear
表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。
实例:
adb shell pm clear com.qihoo360.mobilesafe

查看前台 Activity

adb shell dumpsys activity activities | grep mFocusedActivity

查看正在运行的 Services

adb shell dumpsys activity services []
参数不是必须的,指定表示查看与某个包名相关的 Services,不指定表示查看所有 Services, 不一定要给出完整的包名

查看应用详细信息

adb shell dumpsys package
输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。

与应用交互

主要是使用am ,常用如下:
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

强制停止应用

adb shell am force-stop

文件管理

adb pull <设备里的目录> <电脑上的文件路径>
adb push <电脑上的文件路径> <设备里的目录>

按键模拟/输入

input这是一个非常有意思的命令
命令adb shell input [] [...]
最常用的主要是keyeventtext
keyevent的常用code如下:


内核日志

adb shell dmesg

IP 地址

每次想知道设备的 IP 地址的时候都得「设置」-「关于手机」-「状态信息」-「IP地址」很烦对不对?通过 adb 可以方便地查看。
adb shell ifconfig | grep Mask

内存信息

adb shell cat /proc/meminfo

关闭 USB 调试模式

adb shell settings put global adb_enabled 0

实用功能

屏幕截图

adb exec-out screencap -p > sc.png保存截图到电脑
adb shell screencap -p /sdcard/sc.png保存截图到设备
adb shell screenrecord /sdcard/filename.mp4录屏保存到设备,默认时长180秒

重新挂载 system 分区为可写

需要root权限
先用mount命令找到system所在行的路径,然后使用
mount -o remount,rw -t yaffs2 /dev/block/platform/msm_sdcc.1/by-name/system /system
这里的 /dev/block/platform/msm_sdcc.1/by-name/system 就是我们从上一步的输出里得到的文件路径。

查看连接过的 WiFi 密码

cat /data/misc/wifi/*.conf

开启/关闭 WiFi

adb shell svc wifi enable
adb shell svc wifi disable

查看实时资源占用情况

adb shell top

你可能感兴趣的:(adb命令用法整理)