背景
binder通信流程涉及整个安卓架构,可以作为学习安卓系统的切入点。
应用层发起binder通信请求,FW层经过数据封装,通过ioctl向binder驱动发起请求。binder驱动将request转发给server,server返回结果给binder驱动,binder驱动再将结果原路返回。
AIDL通信本质是对binder的封装,可以从这里一步步学习binder通信。
AIDL简单使用
- 在server端项目新建.aidl文件。在.aidl文件中定义接口函数
- 同步项目,在build/generated目录里会自动生成Java接口文件。这个文件是Android SDK 工具生成的,文件内容就是对binder的封装。
- 在server端创建service,在service中创建属于server端aidl接口(Stub实例),在onbind()返回stub给FW
- 拷贝aidl整个目录到client项目,同步项目
- 在client端通过bindservice获取server端的binder句柄,再转换成client端aidl接口(Proxy实例),即可在调用server端的方法
- 注意targetSdkVersion在30及以上,需要在client端项目manifest文件,使用queries标签注册server的包名
AIDL原理
binder原理
Binder的调用流程
尽情期待