在Android的Cpp中使用IPC

use of IPC in Cpp in Android

本文关键字:IPC Cpp Android      更新时间:2023-10-16

在对Android2.2源代码进行了一些探索之后,我了解到Android框架可以使用大量用Cpp编写的IPC机制,如CameraService,MediaService等。

我还看到许多关键类驱动这些IPC机制,如IInterface, BpInterface, BnInterface, Binder, IBinder, RefBase和许多其他…

我现在想写我的ipc服务在cpp(不是在Java中使用AIDL),不幸的是,我找不到任何有用的资源(文章,教程,书籍等),彻底详细使用这些类

谁是精通这方面,你可以给我的想法吗?

谢谢!

基本上没有关于这些的文档,因为它们不是公共SDK/NDK的一部分。如果你在这个层次上工作,你就是在做平台开发;文档在很大程度上是平台的其余部分和您正在使用的东西的源代码。

您会发现这些比SDK中的Binder api使用起来更粗糙。例如,aidl目前不能生成c++接口,因此您必须手工编写所有的接口存根。

当Android SDK提供了你所需要的一切,包装在一个独立于设备的包中时,为什么还要使用c++ ?Android SDK是Java,如果你想使用c++,你将会在很长一段时间内,特别是如果你想要硬件访问。

如果你真的想研究这个,看看Native Development Kit。

我不知道这是否有帮助。但是我正在尝试用aidl-cpp

生成c++绑定接口

这里的一些内容:

建立接口将AIDL写入. AIDL文件中,并将其添加到Android.mk中的LOCAL_SRC_FILES中。如果你的构建目标是一个二进制文件(例如你包含$(BUILD_SHARED_LIBRARY)),那么生成的代码将是c++,而不是Java。AIDL定义应该驻留在与实现相同的存储库中。任何需要定义的系统也需要实现(parcelables和接口)。如果有多个实现(例如,一个在Java中,一个在c++中),则保留原生实现的定义。Android现在有一些系统可以在没有Java的情况下运行系统的本地组件。如果在AIDL中使用import语句,即使是来自同一个包,也需要为LOCAL_AIDL_INCLUDES添加一个路径。这个路径应该相对于Android树的根目录。例如,文件IFoo。定义com.example.IFoo的aidl可能位于文件夹层次结构中:some/some-other/com/example/ifoo.aidl。然后我们会写:LOCAL_AIDL_INCLUDES:= something/something-else