Можно ли использовать Google protobuf для связи между сервисами C и Java в Android?
У нас есть устаревший стек протоколов, написанный на C с интерфейсом c-protobuf и API-оболочкой C++, который необходимо перенести на Android и разработать Java-сервис с интерфейсами AIDL. Итак, вот вопросы,
Можем ли мы удалить интерфейс C++ и заставить Java-сервис общаться с C- native процессом через protobuf?
Другой подход заключается в удалении интерфейса c-protobuf и разработке интерфейса JNI. Каков компромисс между подходом protobuf против JNI?
Насколько я знаю, производительность будет проблемой из-за IPC, сериализации и т. Д. По сравнению с подходом JNI. Есть ли какой-либо другой существенный недостаток в этом подходе, учитывая контекст Java и Android? Также этот сервис будет использоваться несколькими пользовательскими приложениями.
1 ответ
Конечно, это должно работать.
Как уже отмечалось @pskink, JNI приведет к меньшим накладным расходам. Особенно в случае большого количества звонков с небольшими аргументами. В качестве бонуса вы можете фактически передать сериализованный буфер протокола в виде байтового массива. Я ожидаю, что издержки будут довольно малы, и это может упростить дальнейшие модификации интерфейса.
В зависимости от того, как вы планируете упаковать все вместе, интерфейс JNI может быть проще поддерживать совместимым, поскольку все встроено в один APK.