服务
响应外部请求,创建服务。服务对外表现形式是套接字(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) |