服务
响应外部请求,创建服务。服务对外表现形式是套接字(asocket)。
设备端程序拥有的服务在create_local_service_socket中创建,主机端程序还有一些特有的服务在create_host_service_socket中创建。初次之外,轻型套接字处理的立即完成的请求,虽然没有创建套接字,也是一种逻辑上的服务。
在create_local_service_socket中创建的服务有下面这些,除了jdwp和track-jdwp直接创建定制的套接字外,其他服务都是创建服务对应的文件句柄,再通过本地套接字包装。
主机和设备都有的服务:
| 服务名 | 参数 | 创建方式 | 说明 |
| tcp | port[:host] | socket_loopback_client(port) socket_network_client(host,port) | 基于TCP的服务 Daemon不支持host |
| local | name | socket_local_client(name) | 连接UNIX套接字 |
| localreserved | name | socket_local_client(name) | |
| localabstract | name | socket_local_client(name) | |
| localfilesystem | name | socket_local_client(name) |
只于设备上存在的服务:
| 服务名 | 参数 | 创建方式 | 说明 |
| jdwp | 无 | create_jdwp_service_socket | |
| track-jdwp | 无 | create_jdwp_tracker_service_socket | |
| dev | path | unix_open(path) | 打开设备文件读写 |
| framebuffer | 空 | create_service_thread (framebuffer_service) | 屏幕截图 |
| jdwp | pid | create_jdwp_connection_fd(pid) | |
| shell | name | create_subproc_thread(name) | 交互控制台 /dev/ptmx oom_adj=0 |
| sync | 空 | create_service_thread (file_sync_service) | 上传下载文件 |
| remount | 空 | create_service_thread (remount_service) | /system 可写 |
| reboot | arg | create_service_thread (reboot_service, arg) | 重启、关机 |
| root | 空 | create_service_thread (restart_root_service) | 切换到root权限 |
| backup | arg | backup_service(BACKUP, arg) | 系统备份到本地文件(bu) |
| restore | arg | backup_service(RESTORE, arg) | 系统恢复(bu) |
| tcpip | [port] | create_service_thread (restart_tcp_service, port) | 启动tcp连接模式 |
| usb | 空 | create_service_thread (restart_usb_service) | 启动usb连接模式 |
oom_adj:低内存杀进程策略配置。
/dev/ptmx:伪终端
Ø Pseudoterminal - Wikipedia, the free encyclopedia
Ø pts(4) -Linux manual page - man7.org
backup:备份工具,源代码位于frameworks/base/cmds/bu。
jdwp:java调试体系
Ø 深入 Java 调试体系: 第 1 部分,JPDA 体系概览
Ø 深入 Java 调试体系,第 4 部分: Java 调试接口(JDI)
Ø 深入 Java 调试体系,第 3 部分: JDWP 协议及实现
Ø 深入 Java 调试体系,第 2 部分: JVMTI 和 Agent 实现
下面的服务只在主机端存在。
立即完成的请求在handle_host_request中处理,有下列服务:
host开头的:
| 服务名 | 参数 | 处理方法 | 说明 |
| kill | exit | Adb server退出 | |
| transport | <serial-number> | acquire_one_transport | 切换到远程链路 |
| transport (|-usb|-local|-any) | acquire_one_transport | 切换到远程链路 | |
| devices | list_transports | 列出连接设备 | |
| devices-l | list_transports | 列出连接设备 | |
| disconnect | [serial] | unregister_transport | 断开设备连接 |
| emulator | port | local_connect | 模拟器连接,反向创建一个Tcp链路 |
| version | ADB_SERVER_VERSION |
host-prefix开头的:(host-prefix表示host-serial:<serial-number>、host-usb、host-local、host,其中host相对于host-any),处理的时候都要获取链路(acquire_one_transport)。
| 服务名 | 参数 | 处理方法 | 说明 |
| get-serialno | transport->serial | 获取设备序列号 | |
| get-devpath | transport->devpath | 获取USB设备连接安装路径 | |
| list-forward | format_listeners | 列出转发端口 | |
| killforward-all | remove_all_listeners | 删除所有转发端口 | |
| forward | [norebind:] <local>;<remote> | install_listener | 创建转发端口 |
| killforward | <local> | remove_listener | 删除转发端口 |
| get-state | connection_state_name | 设备连接状态 |
在create_host_service_socket中创建的主机服务有(host开头):
| 服务名 | 参数 | 创建方式 | 说明 |
| track-devices | create_device_tracker | 侦听设备连接变化 | |
| wait-for-(local|usb|any) | 无 | create_service_thread (wait_for_state, sinfo) | 等待设备连接上 |
| connect | host | create_service_thread (connect_service, host) | 连接设备(TCP) |
本文解析了ADB服务的工作原理,包括服务的创建方式、主机与设备之间的交互过程,以及各种服务的具体功能,如TCP连接、文件同步等。
1万+

被折叠的 条评论
为什么被折叠?



