之前负责java层某service的开发找我说希望可以通过我这边(我们之间有HIDL接口)通知另一个Native进程状态。
问过领导说是JAVA层定义的AIDL的接口C++层也可以用,不需要经过我这边通知。
所以我这边也尝试一下。
Android11,Java层作为服务端定义了AIDL接口,Native C++层作为客户端。
1.由于服务端只是在bp里面将aidl做为src参与编译,没有生成C++代码,所以我按照服务端的目录结构,在客户端这边创建同样的目录结构,并将aidl文件拷贝过来,作为src在bp中添加才可以编译。
2.由于我的服务编译生成在VENDOR,做完之后遇到的问题是一直查询不到Java层的service,日志显示servicemanager wait for service xxx on /dev/vndbinder
3.没办法只能将进程编译生成到SYSTEM,这次可以查询到Java层的service,但是注册的监听,一直收不到回调,service端打印也都回调了,后来加了下面才能收到回调。
sp<ProcessState> proc(ProcessState::self());
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
之前这个NativeTest程序是做HIDL接口测试的,上面的加了之后一直编译报错就没加,后来把HIDL都删了,只保留了AIDL的,再加上上面才能编译通过,并接收到回调。
下一步尝试将Native Test生成到VENDOR.并可以访问JAVA侧的AIDL接口,根据查的资料应该要用稳定的AIDL,需要改造现有service端的AIDL接口。