root权限
adb虽然可以用来做一些Root操作,但是前提是设备必须具备root权限,学习可以考虑用虚拟机。 命令:
adb root
复制代码
恢复root:
adb unroot
复制代码
设置adb的网络端口
命令:
adb -P <port> start-server
复制代码
这个几乎很少使用,不知到具体用处,之后补充记录
设备连接
查询设备
查询当前adb连接的设备信息
adb devices
复制代码
List of devices attached
0000119030001002 device
复制代码
输出的组成格式为[serialNumber] [state],其中0000119030001002为设备编号SN,device为设备的状态。设备的状态可以分为以下几种:
offline —— 表示设备未连接成功或无响应。
device —— 设备已连接。注意这个状态并不能标识 Android 系统已经完全启动和可操作,在设备启动过程中设备实例就可连接到 adb,但启动完毕后系统才处于可操作状态。
no device —— 没有设备/模拟器连接。
该命令为常用命令,多会使用。
USB连接
USB连接就是通过USB线,以及adb来连接Android设备,也是开发工作中使用得最多的连接方式。一般手机需要打开[ 设置」-「开发者选项」-「Android 调试」。如果没有该选项,可以到「设置」-「关于手机」连续点击「版本号」可以打开开发者选项。
USB无线
其实除了USB连接设备外,还可以通过无线网的方式连接,虽然开始需要USB线连接,但是想想可以离开USB线的限制,是不是也有一点小激动呢。操作步骤如下
首先,确认PC和设备是处于同一局域网下,比如同一个路由下的wiffi。这是非常重要的。
其次,将PC和设备通过USB连接在一起,通过adb devices确认是否连接成功.
然后,让设备在555端口监听TCP/IP 连接,当然部分特殊设备端口不是555,酌情调整:
adb tcpip 555
复制代码
之后,断开USB线连接
通过手机自身的设置」-「关于手机」-「状态信息」-「IP地址」或者(推荐后者)通过adb命令去获取设备的ip地址adb shell ifconfig | grep Mask.
使用命令行和得到的IP地址连接设备
adb connect <device-ip-address>
复制代码
<device-ip-address>也就是之前找到的ip地址.
最后,使用adb devices检测是否成功连接设备
无线连接(root)
无线连接的首要条件就是需要root权限.所以一开始就是adb root开启root权限。然后操作步骤与USB一样,但是无需连接USB线。 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
首先,打开 Android 设备上的终端模拟器,在里面依次运行命令:
su
setprop service.adb.tcp.port 5555
复制代码
再者,通过手机自身的设置」-「关于手机」-「状态信息」-「IP地址」或者(推荐后者)通过adb命令去获取设备的ip地址adb shell ifconfig | grep Mask.
最后,在电脑上通过 adb 和 IP 地址连接 Android 设备。
adb connect <device-ip-address>
复制代码
这里的<device-ip-address> 就是上一步中找到的设备 IP 地址。
如果能看到 connected to <device-ip-address>:端口 这样的输出则表示连接成功。
Package管理
查阅应用列表
查阅应用列表的adb命令行模式如下:
adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_ID] [FILTER]
复制代码
前部分adb shell pm list packages为获取当前设备中所有应用的package信息,后面为过滤符。其中支持的过滤参数列表整理如下:
参数 显示列表
无 所有应用
-f 显示应用关联的 apk 文件
-d 只显示 disabled 的应用
-e 只显示 enabled 的应用
-s 只显示系统应用
-3 只显示第三方应用
-i 显示应用的 installer
-u 包含已卸载应用
<FILTER> 包名包含 <FILTER> 字符串
ps:<FILTER>除了直接可以过滤外,还可以使用grep做筛选 比如:
adb shell pm list packages clouwalk
复制代码
与
adb shell pm list packages |grep cloudwalk
复制代码
(部分设备不支持)
安装应用
安装应用为常用的adb命令行,其格式如下:
adb install [-xxx] <apk_path>
复制代码
其中xxx为修饰参数,用来指定应用apk的安装方式,具体可以有以下几种修饰方式:
参数 含义
-l 将应用安装到保护目录 /mnt/asec
-r 允许覆盖安装
-t 允许安装 AndroidManifest.xml 里 application 指定 android:testOnly="true" 的应用
-s 将应用安装到 sdcard
-d 允许降级覆盖安装
-g 授予所有运行时权限
出现如Success标识,代表安装成功。出现Failure [xxx],代表失败.常见的失败选项如下:
输出 含义 解决方法
INSTALL_FAILED_ALREADY_EXISTS 应用已经存在,或卸载了但没卸载干净 adb install 时使用 -r 参数,或者先 adb uninstall <packagename> 再安装
INSTALL_FAILED_INVALID_APK 无效的 APK 文件 检查apk文件的完整性和有效性
INSTALL_FAILED_INVALID_URI 无效的 APK 文件名 确保 APK 命名文件名里无中文或特殊字符
INSTALL_FAILED_INSUFFICIENT_STORAGE 空间不足 清理空间
INSTALL_FAILED_DUPLICATE_PACKAGE 已经存在同名程序 更改应用名或adb uninstall <packagename> 再安装
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 1. sdcard 访问失败;
2. 应用签名与 ROM 签名一致,被当作内置应用。 1. 确认 sdcard 可用,或者安装到内置存储;
2. 打包时不与 ROM 使用相同签名。