【问题标题】:Is it possible to bind to a Java Service, from a Native c++ client, and transact, receive data from the service?是否可以从 Native C++ 客户端绑定到 Java 服务,并进行事务处理,从服务接收数据?
【发布时间】:2017-06-19 13:30:40
【问题描述】:

我目前正在研究活页夹的一般工作原理。 通过查看以下项目:

https://github.com/qianjigui/android_system_service_example https://github.com/cloudchou/NativeBinderJavaClientDemo

我知道绑定交易是可能的

  • 本机服务 Java 客户端
  • 本机服务 本机客户端
  • Java 服务 Java 客户端

最后一个一直困扰我的问题是,以下是否可能...?

  • Java 服务 本机客户端

我找不到任何实际实现这一点的文章或代码,也没有人讨论它的可能性。据我了解,交易纯粹基于 .aidl 描述,因此实现语言无关紧要,因此上述内容应该是可能的。但我只是想确定...

【问题讨论】:

    标签: android ipc android-binder


    【解决方案1】:

    我认为它几乎不能使用原生 binder 客户端,因为 binder API 不是 NDK 的一部分。这里有一个参考链接:How to Create a android native service and use binder to communicate with it?

    但是,如果你能获得ASOP所有源代码,并使用android内置的工具,那将成为可能。

    【讨论】:

      【解决方案2】:

      使用 NDK binder API 成为可能(可从 Android 10 获得),但仍无法从本机代码启动/绑定服务(不使用私有 API)。

      https://developer.android.com/ndk/reference/group/ndk-binder

      【讨论】:

        【解决方案3】:

        完全有可能:Binder 跨越进程边界,因此用于实现服务或其调用者的编程语言是无关紧要的。你可以很容易地看到native client -> java service,通过使用“service call”(为了好玩,尝试“service call phone 2 s16 555-1234”调出拨号窗口,或者“service call statusbar 1”,“service call状态栏 2" 等。事务不需要 AIDL - AIDL 只是创建样板代码来促进它。

        但是请注意,如果您想处理 Java 对象,您需要自己进行“打包”(序列化)。也就是弄清楚 Parcelable 接口排序是什么(在 readFromParcel 中),然后将基元类型(uint32_t、float、String 等)一一铺好。

        【讨论】:

          猜你喜欢
          • 2017-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-21
          • 2017-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多