2023-08-13 21:18 来源:战歌公会 作者:战歌公会 浏览:
(点击上方公众号,可快速关注)
来源:伯乐在线专栏作者 - 踏歌行
链接:http://android.jobbole.com/84804/
点击 → 了解如何加入专栏作者
Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的。
Android Debug Bridge,Android 调试桥接器,简称 adb ,该工具位于 <sdk>/platform-tools/ 目录下,其源码位于 <path-to-sourcecode>/system/core/adb 目录下,是用于管理模拟器或真机状态的万能工具。 adb 采用了客户端-服务器模型,包括三个部分:
客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像 DDMS 这样的 Android 工具也可以调用 adb 客户端。
守护进程部分,运行于模拟器或手机的后台。
服务端部分,是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。
adb 工具模型示意图如下:
adb 的工作原理
当启动 adb 客户端时,客户端首先检查 adb 服务端进程是否运行,如果没有运行,则启动服务端。当服务端启动时,它会绑定到本地的 TCP5037 端口,并且监听从 adb 客户端发来的命令——所有 adb 客户端都使用 5037 端口与 adb 服务端通信。
接下来服务端与所有正在运行的模拟器或手机连接。它通过扫描 5555-5585 之间的奇数号端口来搜索模拟器或手机,一旦发现 adb 守护进程,就通过此端口进行连接。需要说明的是,每一个模拟器或手机使用一对有序的端口,偶数号端口用于控制台连接,奇数号端口用于 adb 连接,例如:
Emulator1,console: 5554
Emulator1,adb: 5555
Emulator2,console: 5556
Emulator2,adb: 5557
即如果模拟器与 adb 在 5555 端口连接,则其与控制台的连接就是 5554 端口。
当服务端与所有的模拟器建立连接之后,就可以使用 adb 命令来控制或者访问了。因为服务端管理着连接并且可以接收到从多个 adb 客户端的命令,所以可以从任何一个客户端或脚本来控制任何模拟器或手机设备。
补充:
1. 使用 adb 命令调试需要手机开启 开发者模式 下的 USB 调试,在 Android 4.2 及更高的版本中,开发者选项默认是隐藏的,你可以去 设置——>关于手机 ,然后连续点击七次版本号即可。返回上层就可以在底部看见 开发者模式 了。当然有些定制的 ROM 开启方式会有点不一样,这个就要去问 ROM 的开发者了。
2. 关于 USB 调试与计算机的 RSA 密钥指纹配对。Google 官方原文如下:
When you connect a device running Android 4.2.2 or higher to your computer, the system shows a dialog asking whether to accept an RSA key that allows debugging through this computer. This security mechanism protects user devices because it ensures that USB debugging and other adb commands cannot be executed unless you’re able to unlock the device and acknowledge the dialog. This requires that you have adb version 1.0.31 (available with SDK Platform-tools r16.0.1 and higher) in order to debug on a device running Android 4.2.2 or higher.
大意就是,你想使用 USB调试 就得启用 USB调试 模式下的 RSA密钥指纹。不然我就不给你用。
3. 关于使用真机调试的更多信息可参考:Run Apps on a Hardware Device。
adb 用法
查询模拟器或手机状态
了解 adb 服务端连接的模拟器或手机可以帮助更好的使用 adb 命令,这可以通过 devices 命令来列举当前连接的设备:
adb devices
执行结果是 adb 为每一个设备输出以下状态信息:
序列号(serialNumber):由 adb 创建用于唯一标识设备的字符串,格式是 <设备类型>-<端口号>,例如: emulator-5554
连接状态(state),其值是可能是下面的任意一种:
offline — 未连接或未响应
device — 表示设备已经连接到服务端。但需要注意的是,这个状态并不表示 Android 系统已经完全启动起来并且可操作,因为系统在启动的过程中就已经连接 adb ,但这个状态是正常的可操作状态。
no device – 表示没有任何设备连接(楼主测试过程中没有碰到过 no device 的情况,没连接设备就没任何输出)
每一个设备的输出形如:
补充
获取设备序列号
$adb shell
emulator-5554
查看 bugreport 报告
//直接在终端输出
$adb bugreport
//将 bugreport 输出到指定文件
$adb bugreport> file_path
adb bugreport 这个命令非常简单,但是在实际应用中非常有用,它会输出从开机之后详细的 dumpsys 、 dumpstate 和 logcat 信息,是一份完整的日志记录。对分析用户行为、异常信息、系统状态有很大的参考作用。一般我们会把 bugreport 导出到电脑上分析。
bugreport 的详细使用可以参考 Baniel01 的这篇 Android adb bugreport工具分析和使用 文章,里面有很详细的介绍。
查看设备的 log
$adb logcat
查看 adb 的帮助
这个命令很简单,但是也很实用,如果你不知道该使用哪个命令,那么使用 adb 帮助命令你能查看到大部分 adb 命令的作用和使用方法。
$adb help
重启手机
有时候,手动关机太麻烦,那就来个命令行吧~
adb reboot
以 root 权限开启 adb 守护进程
//此命令会重启守护进程
$adb root
//不以 root 权限开启 adb 守护进程
$adb unroot
总结
以上就是 adb 命令的常见用法,大部分翻译自 Android Debug Bridge ,其中加了一些个人总结。有些不常用的 adb 命令没有介绍,更多 adb 用法请见:Adb Command Summary。文中如有纰漏,欢迎大家留言指出。
参考:
1. Android Debug Bridge
2. 浅析 adb 命令 – adb forward
3. Android_ADB_通过WIFI或USB方式完成调试
4. Android adb bugreport工具分析和使用
专栏作者简介( 点击 → 加入专栏作者)
踏歌行 :希望有一天我能够很坦然地说:"让我来告诉你,在我眼中,这是一个怎样的世界。"
打赏支持作者写出更多好文章,谢谢!
关注「安卓开发精选」
看更多精选安卓技术文章
↓↓↓
2024-01-08 [手游攻略]了不起的修仙模拟器人物属性选择推荐攻略
2024-01-08 [手游攻略]了不起的修仙模拟器门派声望获取技巧攻略
2023-12-30 [手游攻略]打工生活模拟器七月恋爱怎么玩
2023-12-21 [手游攻略]了不起的修仙模拟器炼丹房大吉布局攻略
2023-11-30 [手游攻略]祖宗模拟器传承武开局完整攻略详解