android - 如何创建android原生服务并使用binder与之通信?

标签 android c++ android-service android-binder

我的基本任务是在 android 中创建一个本地服务,然后编写一个简单的本地程序来测试它。假设我想编写一个简单的服务,返回两个整数之和。我必须使用 Binder 从程序中与它对话,我试图用谷歌搜索但我找不到一个精确的例子。我需要知道如何创建 native 服务并在程序中找到它,如果需要还可以在 Java 中找到它。

最佳答案

如果您使用 NDK 创建普通的 Android 应用程序,则不能使用 Binder,因为它不是 NDK API 的一部分。

在 NDK docs/STABLE-APIS.html 中查看完整的稳定 API 列表,以及此线程中 David Turner(NDK 维护者)的明确评论,即 Binder 不是受支持的 API。

https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/1QmVRrNckfM

您的选择是:

  • 在 native 代码中使用其他形式的 IPC - 例如 UNIX 域套接字
  • 使用 Android SDK 的普通 Service 和 AIDL 工具,用 Java 实现。如果您希望将其与 native 代码结合使用,您可以使用 JNI 从 native 代码调用 Java。
  • (不推荐)从 Android 开源项目中复制相关的库和 header ;构建到您的 NDK 项目中;并使用 API。然而,这并没有得到官方支持,并且极有可能在未来的版本中破坏您的应用程序,因为谷歌没有义务维护此类库的兼容性(而且经常没有)。这也非常困难,因为您需要找到某种方式来注册服务,以便客户端可以找到它。

关于android - 如何创建android原生服务并使用binder与之通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14215462/

相关文章:

c++ - 如何使用其复制构造函数和复制赋值是私有(private)的对象?

Android onCreate 或 onStartCommand 用于启动服务

java.time.ZonedDateTime 不在 android Studio 中导入

android - 如何确定下载的 HTML 源代码来自特定网站?

java, System.loadlibrary ("someDLLFile") 获取未统计的链接错误

c++ - 关于使用捆绑属性创建 C++ Boost 图

android - 具有远程数据的 Android 应用程序的最佳方法是什么?

android - onTaskRemoved() 什么时候可以调用?

android - 通话过程如何与蓝牙设备配合使用?

android - 更改拨号屏幕