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

时间:2014-11-25 04:17:10

标签: android c++ sockets android-service android-framework

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

操作系统是Android K;它运行在一个开发套件上,该套件具有以太网接口,可将其插入Lan。

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

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

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

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

请帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

通过在$ 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 };

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