Android 本机可执行文件如何接受外部套接字连接

How an Android native executable accept external socket connections?

本文关键字:外部 套接字 连接 何接受 本机 可执行文件 Android      更新时间:2023-10-16

我正在开发一个Android本机可执行服务,该服务在系统启动时由init启动(我在init.rc中注册)。此本机可执行文件创建一个侦听 0.0.0.0:4615 的套接字,并且应该接受来自外部的连接。

操作系统是Android K;它运行在具有以太网接口的开发套件上,用于将其插入局域网。

我已经完成了在 adb shell 中运行与 root 相同的本机可执行文件的测试。它工作正常 - 我的 Windows 机器上的外部套接字客户端可以连接到本机可执行文件并成功发送/接收消息。当我通过 init 启动它时,它成功侦听 0.0.0.0:4615,但外部套接字客户端无法连接到它 - 连接被拒绝。

我在 init.rc 中添加的代码片段是:

service msger-daemon /system/bin/msgerd
    class main

当"ps"检查msgerd的用户时,我们发现它是root。

请帮忙,谢谢!

通过在 $TOP/external/sepolicy 下添加 SE 策略文件来解决,该文件的内容为:

# File types must be defined for file_contexts.
type msgerd, domain;
type msgerd_exec, exec_type, file_type;
init_daemon_domain(msgerd)
permissive msgerd;
# Add msgerd to various domains
net_domain(msgerd)
allow msgerd self:capability { net_admin net_raw };

如果有人想审查和建议,欢迎!