Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓应用程序可以使用套接字与本机安卓服务对话吗?_Android_Sockets_Native - Fatal编程技术网

Android 安卓应用程序可以使用套接字与本机安卓服务对话吗?

Android 安卓应用程序可以使用套接字与本机安卓服务对话吗?,android,sockets,native,Android,Sockets,Native,我正在尝试让android应用程序与本机服务(交叉编译的ARM二进制文件或Linux脚本)对话,我想知道是否可以使用套接字实现这一点 基本上,本机服务将在init上运行,并等待应用程序发送数据,然后再执行其他操作 这可能吗?android应用程序是否需要root权限才能做到这一点 谢谢。是的,有可能。不,这个应用不需要任何特殊的权限就可以做到这一点——对于unix域套接字,你甚至不需要互联网权限 你唯一需要特别许可的地方是启动服务的地方——本质上,你必须给它一个oom killer值,告诉安卓不

我正在尝试让android应用程序与本机服务(交叉编译的ARM二进制文件或Linux脚本)对话,我想知道是否可以使用套接字实现这一点

基本上,本机服务将在init上运行,并等待应用程序发送数据,然后再执行其他操作

这可能吗?android应用程序是否需要root权限才能做到这一点


谢谢。

是的,有可能。不,这个应用不需要任何特殊的权限就可以做到这一点——对于unix域套接字,你甚至不需要互联网权限

你唯一需要特别许可的地方是启动服务的地方——本质上,你必须给它一个oom killer值,告诉安卓不要去管这个过程,并且/或者将它设置为自动重启。否则,资源受限的android系统可能会扼杀一个似乎与任何特定合法活动或服务无关的神秘进程


一种更具android风格的集成方式当然是实现更像现有android服务的服务,即使用在客户端进程中运行的存根api,并通过绑定器IPC将内容推送到在特殊进程(很可能是系统进程)中运行的服务。这还可能使使用现有的包/清单权限方案更容易管理对服务的访问。但这最终是一种风格上的东西,虽然在某种程度上可能与获得谷歌对你的设备的认可有关,但这并不是让你的设备工作的唯一方法。

谢谢。我已经编写了一个简单的Android客户端应用程序来连接10.0.2.2套接字,但当我尝试运行它时,它挂起了。我想我错过了本地服务。我可以用C编写它,然后交叉编译成ARM二进制文件并在设备上运行吗?10.0.2.2是用作设备的环回地址还是仅用于模拟器?仅用于模拟器。Android并不正式支持本机附加服务——您可以编译并运行一个,但需要修改受保护的设置以保持其运行。通过将build_SHARED_LIBRARY更改为build_Executive,您当前可以使用ndk build system。为了扩展此功能,虽然您不能在物理设备上使用特殊的emulator 10.0.2.2别名,但您可以使用127.0.0.1,这是标准环回地址。但是,正如我在回答中提到的,最好使用unix域套接字(java语言中的本地套接字)而不是IP套接字,因为这样可以避免需要Internet许可。