美文网首页
adb命令用法整理

adb命令用法整理

作者: M_天河 | 来源:发表于2020-08-27 17:41 被阅读0次

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 <port> start-server指定固定端口。
  2. 服务器与设备端连接,服务器通过扫描5555到5585之间的奇数端口查找模拟器,服务器发现adbd(守护进程)后便于之连接。
    note:每个模拟器都使用一对按顺序排列的端口,偶数端口连接控制台,奇数端口连接adb。

具体用法

指定目标设备

如果有多个设备时使用:
-d指定当前唯一通过 USB 连接的 Android 设备为命令目标
-e指定当前唯一运行的模拟器为命令目标
-s <serialNumber>指定相应 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包含已卸载应用
<FILTER>包名包含 <FILTER> 字符串

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

查看前台 Activity

adb shell dumpsys activity activities | grep mFocusedActivity

查看正在运行的 Services

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

查看应用详细信息

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

与应用交互

主要是使用am <command>,常用<command>如下:
start [options] <INTENT>启动 <INTENT> 指定的 Activity
startservice [options] <INTENT>启动 <INTENT> 指定的 Service
broadcast [options] <INTENT>发送 <INTENT> 指定的广播
force-stop <packagename>停止 <packagename> 相关的进程
<INTENT> 参数很灵活,和写 Android 程序时代码里的 Intent 相对应。

用于决定 intent 对象的选项如下:
-a <ACTION>指定 action,比如 android.intent.action.VIEW
-c <CATEGORY>指定 category,比如 android.intent.category.APP_CONTACTS
-n <COMPONENT>指定完整 component 名,用于明确指定启动哪个 Activity,如 com.example.app/.ExampleActivity

强制停止应用

adb shell am force-stop <packagename>

文件管理

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

按键模拟/输入

input这是一个非常有意思的命令
命令adb shell input [<source>] <command> [<arg>...]
最常用的<source>主要是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命令用法整理

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

  • adb 实际工作高频用法

    adb 命令和 Linux 命令用法很相似,通过 adb shell 进入命令行后,用法基本和linux命令没有什...

  • adb 调试命令收集

    adb 调试命令收集 0. 参考文章 Awesome Adb——一份超全超详细的 ADB 用法大全Android ...

  • 常用Adb命令整理

    adb 整理一些adb命令 abd wifi connect 设备拒绝连接情况 adb chmod adb屏幕录制...

  • adb 详细使用文档

    原文链接:https://github.com/mzlogin/awesome-adb 基本用法命令语法为命令指定...

  • adb input 模拟长按

    最近在看android模拟事件点击,找了adb input命令,具体参考adb shell input的用法但是发...

  • adb命令最全整理

    转载来源:https://github.com/mzlogin/awesome-adb 基本用法命令语法为命令指定...

  • android adb 几个常用命令

    记录一下经常忘记的几个adb常用命令,并且介绍其用法 Android Debug Bridge(ADB),是连接手...

  • ADB用法大全

    原文地址[https://github.com/mzlogin/awesome-adb] 基本用法 命令语法 ad...

  • Android ps命令详解

    ps(Process status )查看进程状态的命令,该命令显示瞬间进程的状态简单用法,直接adb shell...

网友评论

      本文标题:adb命令用法整理

      本文链接:https://www.haomeiwen.com/subject/tqfelktx.html