android aidl-cpp方式接口调用出现问题

本文探讨了Android AIDL在CPP方式下实现跨进程通信时出现的问题,详细解释了因未在接口文件名前加“I”导致的描述符不匹配错误,并提供了修正方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android aidl-cpp方式:

java client 端调用接口: return mPoiGateWayService.hasHomeLocation();

C++ service端实现接口: 
Status hasHomeLocation(bool* _aidl_return) override {
ALOGI("Entering hasHomeLocation");
*_aidl_return = true;
return Status::ok();
}

aidl 声明的接口:  boolean hasHomeLocation();

问题:为啥java端接口调用的时候报错:  I apkPoiTest: call cns hasHomeLocation fail: java.lang.IllegalArgumentException


root cause:

由于PoiService.aidl 这个文件前面没有加I (标准的应该是IPoiService.aidl),   导致 java端aidl自动生成的的java文件 描述符 和 C++端自动生成cpp文件的描述符 不一样 (cpp这边会自动加上个I, 而java端不会自动加上I)。 造成两个进程无法通信。 这个错误是java, cpp的aidl自动生成代码工具处理方法不一致导致。我们人为不能去处理的, 还是要客户把aidl文件按照标准写法写,接口文件前面都要统一加上I才行。


cpp端自动生成的:

IMPLEMENT_META_INTERFACE(PoiService, "android.poi.IPoiService")


java端自动生成的:

private static final java.lang.String DESCRIPTOR = "android.poi.PoiService";


名字不一样,所以无法正常进行通信。 


把接口文件前面加上I, 相应的改动调用文件的代码。 然后就可以正常通信了。




评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卜溪大人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值