adb

来自运维百科
板板讨论 | 贡献2024年3月22日 (五) 10:54的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

安卓调试桥Android Debug Bridge(ADB)

adb可以让我们通过电脑,与目标调试设备通信,如上传下载文件、执行设备上的命令、安装apk应用。

连接设备

在连接设备前,目标设备需要打开“开发者模式”。 如果是USB连接,设备会自动连接,不需要执行额外的连接命令。

如果是通过网络连接,需要使用connect命令连接。

adb connect IP地址

或者用域名连接

adb connect 目标域名

查看已连接设备

有些时候,我们连接了多个设备,执行命令时需要知道针对哪个目标设备。使用以下命令列举已连接设备。

adb devices

结果格式如下:

空格前面的内容是目标设备名称,如例图中的126c1219和192.168.1.98:5555。

多设备时的操作

如果当前只连接一个设备,adb后可直接跟命令名即可,但多设备的时候会出错,因为adb不知道命令该让谁来执行,这个时候需要显式指定,即在adb 后面增加 -s 目标设备名。

如下面的命令,从192.168.1.98:5555这个设备根目录下载init.rc文件到当前目录

adb -s 192.168.1.98:5555 pull /init.rc ./

如果你不想那么麻烦,可以设置ANDROID_SERIAL环境变量的值为目标设备名称,并重新打开终端,然后就不需要每次使用-s指定了。 windows设置方法:

setx ANDROID_SERIAL 目标设备

linux设置方法:

export ANDROID_SERIAL=设备名称

当不需要使用环境变量指定默认时,可以使用上面的命令,将ANDROID_SERIAL环境变量值设置为""即可。

上传下载文件

下载文件命令(将目标设备根目录下的init.rc文件下载到当前目录:

adb pull /init.rc ./

上传文件命令(将当前目录中的init.rc文件上传到目标设备根目录):

adb push ./init.rc ./

如果执行命令时得到“remote Permission denied”的提示,说明权限不够,先执行下面的命令提升为root权限:

adb root

执行目标设备上的命令

我们还可以使用adb,如同在目标设备终端上一样,执行目标设备上的命令,如ls、mount等。我们使用shell命令来达成这一目标。

adb shell

如果我们是普通权限操作,会看到类似这样的提示 shell@grape:/,如果是root权限,则是 root@grape:/。

当我们需要退出时,执行exit命令即可。

安装apk应用/卸载应用

如当前目录下有test.apk这个安卓包,使用以下命令安装:

adb install test.apk

卸载目标设备上的com.show.tv这个package:

adb uninstall com.show.tv

不知道应用的名称,可以使用下面的命令列举:

adb shell pm list packages

如果你只想查看用户应用,不包括系统应用,如下操作:

adb shell pm list packages -3

你可以先使用adb shell后,再执行pm命令。

如果所列出的包名,使得你无法和应用名称对应起来,你可以在目标设备的应用管理、应用详情中看到“应用包名”。

启用应用

可以通过下面的shell命令启用应用

am start 包名/启动activity

如启动向日葵客户端

am start com.oray.sunlogin.service/com.oray.sunlogin.application.Main

基础概念:包名,每个安卓app都会有一个唯一的名称以识别应用,这叫包名,一般习惯使用网址的反写形式命名,由应用开发商自行定义;启动activity,可以理解为一个窗口,一个安卓应用可以有很多activity,开发者可以自行定义哪个activity作为启动activity,只要在AndroidManifest.xml文件中定义即可。