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, 相应的改动调用文件的代码。 然后就可以正常通信了。




更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 读取android手机流量信息
  4. android 使用html5作布局文件: webview跟javascript交互
  5. Android(安卓)Wifi模块分析(三)
  6. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  7. android“设置”里的版本号
  8. Android中dispatchDraw分析
  9. Android开发环境搭建

随机推荐

  1. redis 6.0源码安装
  2. Ansible 之 ansible-doc模块文档说明
  3. 硬货来了!轻松掌握 MongDB 流式聚合操作
  4. JavaScript引擎是如何工作的?从调用栈到Pr
  5. WebSockets实战:在 Node 和 React 之间进
  6. 干货丨时序数据库DolphinDB横截面引擎教
  7. 一步步教你用 WebVR 实现虚拟现实游戏[每
  8. 用惰性加载优化 React 程序[每日前端夜话
  9. 聊聊我的 Java 自学之路
  10. 用JavaScript实现插入排序[每日前端夜话0