java - Google protobuf可以用于android中C和Java服务之间的通信吗?

标签 java android java-native-interface protocol-buffers protobuf-c

我们有一个用 C 语言编写的遗留协议(protocol)栈,带有 c-protobuf 接口(interface)和 C++ 包装器 API,需要移植到 Android 并使用 AIDL 接口(interface)开发 java 服务。所以这里有问题,

  1. 我们能否删除 C++ 接口(interface)并让 Java 服务通过 protobuf 与 C 原生进程通信?

  2. 另一种方法是剥离c-protobuf接口(interface)并开发JNI接口(interface)。 protobuf 与 JNI 方法之间的权衡是什么?

  3. 据我所知,与 JNI 方法相比,由于 IPC、序列化等原因,性能将成为一个问题。考虑到 Java 和 Android 上下文,这种方法还有其他主要缺点吗?此外,该服务将由多个用户应用程序使用。

最佳答案

  1. 当然可以。

  2. 正如@pskink 已经指出的那样,JNI 会导致较小的开销。特别是在使用小参数进行大量调用的情况下。作为奖励,您实际上可以选择以字节数组的形式传递序列化 Protocol Buffer 。我希望这样做的开销非常小,并且可以更轻松地进一步修改界面。

  3. 根据您计划如何将所有内容打包在一起,JNI 接口(interface)可能更容易保持兼容性,因为所有内容都构建到单个 APK 中。

关于java - Google protobuf可以用于android中C和Java服务之间的通信吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42665811/

相关文章:

java - Hotswap/DCEVM 在 Intellij IDEA(社区版)中不起作用

java - 在 CMake 中使用 Java 生成 GENERATE_NATIVE_HEADERS

java - JNI Throw 是否会中断方法执行?

java - 来自 Java 源错误 : cannot find symbol 的 Grails 域类方法

java - 使用 Java 和 Hibernate 存储历史数据

java - 如何在android上将kotlin转换为java?

java:我想从内部类返回快照键但得到空变量

android - 请教AChartEngine的几个问题

android - 在Android中计算歌曲的FFT