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

版权声明:本文为博主原创文章,转载请带出处。 https://blog.csdn.net/hejianhua1/article/details/80549770
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, 相应的改动调用文件的代码。 然后就可以正常通信了。




猜你喜欢

转载自blog.csdn.net/hejianhua1/article/details/80549770