NOTE
- 源码版本:Android 7.1.2。
- 内核版本:android-goldfish-3.4
- 内核下载:
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
(清华镜像站)
- 以下分析思路均来自老罗的《Android 系统源代码情景分析(修订版)》。
Binder 进程间通讯库
Android
在框架层中将各种 Binder
驱动程序封装成了一个通讯库。
- 在库中
Binder
的 Service
组件与 Client
组件分别采用模板类 BnInterface
与 BpInterface
来描述。
BnInterface
:
Binder
本地对象。
- 对应
Binder
驱动中的 Binder
实体对象。
BpInterface
:
Binder
代理对象。
- 对应
Binder
驱动中的 Binder
引用对象。
1. IInterface.h
- 位置:
frameworks/native/include/binder/IInterface.h
class BnInterface
:
template<typename INTERFACE>
class BnInterface : public INTERFACE, public BBinder
{
public:
virtual sp<IInterface> queryLocalInterface(const String16& _descriptor);
virtual const String16& getInterfaceDescriptor() const;
protected:
virtual IBinder* onAsBinder();
};
template<typename INTERFACE>
class BpInterface : public INTERFACE, public BpRefBase
{
public:
BpInterface(const sp<IBinder>& remote);
protected:
virtual IBinder* onAsBinder();
};
- NOTE:
- 模板参数
INTERFACE
是由进程自定义的 Service
组件接口,而 BnInterface
与 BpInterface
都要实现这个接口。
- 除了
Service
组件接口外,还需要实现相应的一个 Bn
类和一个 Bp
类,它们分别继承于 BnInterface
与 BpInterface
。
2. Binder.h
- 位置:
frameworks/native/include/binder/Binder.h
2.1 class BBinder</