2017-03-08 43 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。

相關問題