Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的。 Android Debug Bridge,Android 调试桥接器,简称 adb ,该工具位于
adb 工具模型示意图如下: 当启动 adb 客户端时,客户端首先检查 adb 服务端进程是否运行,如果没有运行,则启动服务端。当服务端启动时,它会绑定到本地的 TCP5037 端口,并且监听从 adb 客户端发来的命令——所有 adb 客户端都使用 5037 端口与 adb 服务端通信。 接下来服务端与所有正在运行的模拟器或手机连接。它通过扫描 5555-5585 之间的奇数号端口来搜索模拟器或手机,一旦发现 adb 守护进程,就通过此端口进行连接。需要说明的是,每一个模拟器或手机使用一对有序的端口,偶数号端口用于控制台连接,奇数号端口用于 adb 连接,例如: Emulator 1, console: 5554Emulator 1, adb: 5555Emulator 2, console: 5556Emulator 2, adb: 5557 ... 即如果模拟器与 adb 在 5555 端口连接,则其与控制台的连接就是 5554 端口。 当服务端与所有的模拟器建立连接之后,就可以使用 adb 命令来控制或者访问了。因为服务端管理着连接并且可以接收到从多个 adb 客户端的命令,所以可以从任何一个客户端或脚本来控制任何模拟器或手机设备。 补充:
大意就是,你想使用 USB调试 就得启用 USB调试 模式下的 RSA密钥指纹。不然我就不给你用。
了解 adb 服务端连接的模拟器或手机可以帮助更好的使用 adb 命令,这可以通过 devices 命令来列举当前连接的设备: adb devices 执行结果是 adb 为每一个设备输出以下状态信息: 序列号(serialNumber):由 adb 创建用于唯一标识设备的字符串,格式是 <设备类型>-<端口号>,例如: emulator-5554连接状态(state),其值是可能是下面的任意一种:offline — 未连接或未响应device — 表示设备已经连接到服务端。但需要注意的是,这个状态并不表示 Android 系统已经完全启动起来并且可操作,因为系统在启动的过程中就已经连接 adb ,但这个状态是正常的可操作状态。no device - 表示没有任何设备连接(楼主测试过程中没有碰到过 no device 的情况,没连接设备就没任何输出)端口号>设备类型> 每一个设备的输出形如: [serialNumber] [state] 下面是 adb devices 命令和其执行结果: $ adb devicesList of devices attached emulator-5554 deviceemulator-5556 deviceemulator-5558 device 如果没有模拟器或手机在运行,运行 adb devices 命令的执行结果如下: $ adb devcesList of devices attached 如果有多个模拟器或手机正在运行,当使用 adb 命令的时候就需要指定目标设备,这可以通过使用 adb -s 你可以使用 adb 命令指定序列号在特定的设备上执行命令,这里可以先使用前面提到的 例如: adb -s emulator-5556 install helloWorld.apk 需要注意的是,如果使用了 补充: 这是 Google 官方给出在多设备的情况下,不用
大意就是:如果你有多个设备,即既有模拟器,又有真机,但是模拟器只有一个,那么你可以使用 $ adb -e install helloWorld.apk//同理,如果有多个设备,但只有一个真机,可以使用如下命令快速发送命令$ adb -d install helloWorld.apk 使用 adb install [-lrtsdg] 更多关于创建 apk 文件可参考:Build And Running 卸载应用既然有安装应用的命令,那当然有卸载应用的命令。卸载应用命令的格式如下: // 使用 adb forward tcp:6100 tcp:7100 也可以使用UNIX命名的socket标识: adb forward tcp:6100 local:logd 补充:关于 使用 adb 命令 从模拟器或手机拷贝文件或文件夹(包括文件夹的子目录) adb pull [-a] 将文件或文件夹(包括文件夹的子目录)拷贝到模拟器或手机 adb push 比如,我想把桌面的 log.txt 复制到手机的 dev 目录下,则命令如下: $ adb push /Users/littlejie/Desktop/log.txt /dev 有时候,使用该命令复制文件到手机或从手机复制文件,会碰到如下提示: failed to copy 'log.txt' to '/dev/log.txt': Permission denied 备注: Permission denied 这个问题以前在使用 Windows 系统的时候碰到过,现在转 Mac 后就没有再遇到,难道是我打开方式不对嘛?再补充一点, Mac 上我运行 $ adb rootadbd is already running as root 这是因为当前用户没有相应的权限或者是 /dev 目录不可写。解决方法如下: //方法一//已 root 权限启动 adb 服务$ adb root//adb remount (重新挂载系统分区,使系统分区重新可写)$ adb remount//将文件复制到 /dev 目录下$ adb push /Users/littlejie/Desktop/log.txt /dev //方法二:修改文件的读写权限$ adb shell# su# chmod 777 /dev 关于 Linux 下文件权限的更多内容请参考:linux系统644、755、777权限详解 adb shell这里简单讲一下 adb shell 有两种使用方式,一种是不进入 remote shell 直接执行命令行,格式如下: adb [-d|-e|-s 还有一种是,进入模拟器或手机的 remote shell 执行,格式如下: adb [-d|-e|-s 在某些情况下需要重启 adb 服务来解决问题,比如 adb 无响应。这时你可以通过 之后,通过 $ adb kill-server$ adb start-server* daemon not running. starting it now on port 5037 ** daemon started successfully *$ adb kill-server$ adb devicesList of devices attached* daemon not running. starting it now on port 5037 ** daemon started successfully *emulator-5556 deviceemulator-5554 device 平时我们都是使用 USB调试,但是现在也支持通过 WIFI 进行调试了。使用方式如下:
通过以上步骤,就可以开心的享用 WiFi 调试了。如果没有正常连接,可以按照下面的步骤检查:
这是一篇关于 Android 设备 USB调试 和 WiFi调试 相互切换的博文,博主写了一个脚本来实现这个过程,有兴趣的同学可以去看看。 补充
bugreport 的详细使用可以参考 Baniel01的这篇Android adb bugreport工具分析和使用文章,里面有很详细的介绍。
以上就是 adb 命令的常见用法,大部分翻译自 Android Debug Bridge,其中加了一些个人总结。有些不常用的 adb 命令没有介绍,更多 adb 用法请见:Adb Command Summary。文中如有纰漏,欢迎大家留言指出。 微博:厉圣杰 微信: 参考:
|
|
来自: women1413 > 《04我的数码科技》