Android ADIL两端能连接成功但无法调用对应方法,且packagemanagerServices中报空指针异常

            最近在接手公司一同事的一个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不一致 有可能会造调用不到,如下图:

看图最下面的ID值 ,左边的ADIL文件中声明117个方法  而右边的ADIL文件中只声明了114个方法,显然两边文件中声明的方法没有对应好,

  测试端调用服务端的对应方法没响应,就是因为两端的方法ID值不一致造成,将两AIDL文件中的方法应对一致后运行,问题OK了,

大家在处理ADIL文件时,记得直接将服务端的AIDL文件复制到客户端项目下且要相同包名下,(方法数量,各个方法名称,及方法的顺序都必须保持一致)