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

Posted

技术标签:

【中文标题】google protobuf可以用于android中C和Java服务之间的通信吗?【英文标题】:Can Google protobuf be used for communication between C and Java services in android? 【发布时间】:2017-03-08 07:53:12 【问题描述】:

我们有一个用 C 语言编写的带有 c-protobuf 接口和 C++ 包装 API 的遗留协议栈,需要移植到 android 并使用 AIDL 接口开发 java 服务。那么问题来了,

    我们能否移除 C++ 接口并让 Java 服务通过 protobuf 与 C 原生进程通信?

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

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

【问题讨论】:

我会选择 #2,它会比 #1 快得多(即使你使用 unix 管道而不是套接字) 【参考方案1】:

    当然可以。

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

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

【讨论】:

以上是关于google protobuf可以用于android中C和Java服务之间的通信吗?的主要内容,如果未能解决你的问题,请参考以下文章

用于 C# 的 Google Protobuf 3.0.0 程序集

使用CSharp编写Google Protobuf插件

使用CSharp编写Google Protobuf插件

Google Protobuf简明教程

Google Protobuf简明教程

google protobuf 数据类型_理解Protobuf数据格式解析