2017-03-08 19 views
1

我们有一个使用c-protobuf接口和C++包装API编写的用C语言编写的传统协议栈,它需要移植到Android并使用AIDL接口开发Java服务。所以下面是问题,Google protobuf可以用于Android中C和Java服务之间的通信吗?

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

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

  3. 据我所知性能将是一个问题,由于IPC,系列化等相比JNI方法。考虑到Java和Android环境,这种方法是否还有其他主要缺点?此外,该服务将被多个用户应用程序使用。

+0

我会去#2,它会比#1快得多(即使你使用的是unix管道而不是套接字) – pskink

回答

0
  1. 当然,应该工作。

  2. 正如@pskink已经指出,JNI会导致小的开销。特别是在大量带有小参数的呼叫的情况下。作为奖励,你实际上可以选择以字节数组的形式传递序列化的协议缓冲区。我希望它的开销很小,并且可以使接口的进一步修改变得更容易。

  3. 根据您打算如何包装都在一起JNI接口可能会更容易保持兼容,因为一切都是建立成一个单一的APK。

相关问题