最近在接手公司一同事的一个ADIL项目问题,先大概描述此ADIL项目,项目功能:将系统中原有的功能提取出来加入一个控制功能做接口供客户的APP直接调用并控制系统功能,如:禁用/启用导航中的HOME,BACK .RECENT键的功能,并且控制此三个虚拟按键隐藏与显示,
因客户是在客户自己的APP中调用此类接口,这涉及到进程之间的通信,项目采用的ADIL模式,在他们之前的开发过程中可能因各个客户的需求不同,因此项目的功能接口做了对应的增减,这两天因要实现禁用/启用系统截图功能控制接口,刚好同事之前忆实现了功能,
就直接从他们的项目把方法复制到本项目中,在ADIL两端的AIDL文件加入了此方法,在服务端实现了此方法的功能,在自己客户端(现称:测试APP)中也调用了此方法,但运行应用调用功能直接报packagemanagerServices的clearExternalStorageDataSync方法的packagename参数空指针异常,造成System_server 进程重启(系统重启),这问题好解决,就在此方法的最前面判断该参数是否为空,为空直接返回不再往下执行,再运行应用,空指针异常问题不报了,但在测试APP中调用该方法,服务端该方法完全没任何响应,也没报任何异常,显然就没调用到该方法,一遍遍仔细检查两端是否声明该方法,是否实现且调用该方法,都没任何错误,然后你知道的,各种百度,各种搜索 就这样纠结我一天半的问题,实现找不出原因,
没办法只能问同事了,这项目是他们一手建立的,说不定他们之前就有遇到过类似问题呢,一问才知项目里xxxx.aidl在编译后生成对应的java文件中的每一个方法都有一个ID 值,如果服务端aidl文件生成对应的java文件中A方法与测试端的adil文件生成对应java文件中A方法的ID不一致 有可能会造调用不到,如下图: