2017-03-08 5 views
1

私たちは、C-protobufインターフェイスとC++ラッパーAPIを使用してCで書かれたレガシープロトコルスタックをAndroidに移植し、AIDLインターフェイスを使用してJavaサービスを開発する必要があります。だからここに質問があり、AndroidのCサービスとJavaサービス間の通信にGoogleを使用できますか?

  1. は、我々はC++インターフェイスを削除しているProtobuf上でネイティブプロセスをC-と話しJavaサービスを持つことができますか?

  2. もう1つのアプローチは、c-protobufインターフェイスを取り除き、JNIインターフェイスを開発することです。 protobufとJNIのアプローチとのトレードオフは何ですか?

  3. 私が知る限り、パフォーマンスはIPC、シリアライズなどの問題がJNIアプローチと比較して分かります。 JavaとAndroidのコンテキストを考慮して、このアプローチに他にも大きな欠点がありますか?また、このサービスは複数のユーザーアプリケーションで使用されます。

+0

私は#2に行くでしょう、それは(ソケットの代わりにUnixパイプを使ったとしても)#1よりはるかに高速です。 – pskink

答えて

0
  1. 動作するはずです確かに。

  2. @pskinkはすでに指摘しているように、JNIはオーバーヘッドを小さくします。特に、引数の少ない呼び出し回数が多い場合。ボーナスとして、実際にバイト配列の形式でシリアル化されたプロトコルバッファを渡すことができます。私はそのオーバーヘッドが非常に小さくなることを期待しており、インターフェースの変更をより簡単にすることができます。

  3. すべてをまとめてパックする方法によっては、すべてが単一のAPKに組み込まれているため、JNIインターフェイスの互換性を保つ方が簡単かもしれません。

関連する問題