谷歌的protobuf可以用于Android中的C和Java服务之间的通信吗?

时间:2017-03-08 07:53:13

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

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

  1. 我们可以删除C ++接口并让Java服务通过protobuf与C-native进程通信吗?

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

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

1 个答案:

答案 0 :(得分:1)

  1. 当然应该有效。

  2. 正如@pskink已经指出的那样,JNI会带来更小的开销。特别是在大量具有小参数的调用的情况下。作为奖励,您实际上可以选择以字节数组的形式传递序列化协议缓冲区。我希望它的开销非常小,可以更容易地进一步修改界面。

  3. 根据您计划将所有内容打包在一起的方式,JNI界面可能更容易保持兼容,因为所有内容都构建在一个APK中。