Android - 将 C++ 套接字服务器移植到 Android?

标签 android c++ sockets android-ndk

我是 Android 开发的新手,但我是 linux c/c++ 背景的人。

现在,我有linux c++ 网络代理程序,它是用boost 库编写的TCP Server 和Client。这个代理程序的作用是

  1. TCP 服务器将接收 Android 应用程序的请求,并翻译该请求 请求某种特定格式
  2. 然后充当客户端,将翻译后的内容发送到正确的远程计算机(如路由器)

我的任务是将这个程序移植到安卓系统上。并且希望Android原生应用像Linux一样通过socket与这个代理程序通信。

我在网上搜索,试图找到正确的方法来做到这一点。但是,我发现的大多数现有内容似乎都是基于 Java JNI 库的解决方案。

我想知道这是否可以通过守护进程或服务进程的方式来完成。代理程序有点大,所以,重写对我来说是一个真正的痛苦。

如有任何建议或解决方案,我们将不胜感激。提前致谢!

杰夫

最佳答案

除非我们谈论的是获得 root 权限的设备,否则在堆栈中的某个级别必须处理 Android 上的 Java 是没有办法的。

您可以将代码包装在原生 Activity 中,这基本上意味着现有的 Android Java 类知道如何从 .so 文件加载一组预定义的公共(public)符号。

https://developer.android.com/reference/android/app/NativeActivity

https://developer.android.com/ndk/guides/stable_apis#native-application-apis

这里的问题是何时启动上述 Activity ,因为不能保证它会一直运行。

Android 没有 UNIX 意义上的守护进程,只有服务。

因此,作为替代方案,您可以创建一个 Android 服务类,但是从版本 8 开始,存在执行限制。这意味着您不能让它永远在后台运行。

https://developer.android.com/guide/components/services

可能通过使用绑定(bind)服务,应用程序在通过套接字进行对话之前需要连接到该服务可能会满足您的需要。

https://developer.android.com/guide/components/bound-services

关于Android - 将 C++ 套接字服务器移植到 Android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51214401/

相关文章:

C++ 数组随机播放

c - Linux C定义缓冲区

android - 火力地堡供应商

android - Qt 5.2 for Android 中没有 Android Kit

android - 如果我的项目链接到Firebase,如何集成Google Analytics(分析)?

c++ - 在 C++(不是 C)中用 bison 和 flex 创建简单的计算器

javascript - 我可以在不使用外部服务的情况下在 Chrome 应用程序中获取我的 IP 地址吗?

c# - 套接字的远程地址为 0.0.0.0 且其状态为 Bound 意味着什么

没有gradle的Android Studio 0.4.3 Eclipse项目

android - 恢复 UploadTask 导致 E/StorageException : BufferedInputStream is closed