Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将AIDL更新到下一版本时出错_Java_Android_Process_Ipc_Aidl - Fatal编程技术网

Java 将AIDL更新到下一版本时出错

Java 将AIDL更新到下一版本时出错,java,android,process,ipc,aidl,Java,Android,Process,Ipc,Aidl,我正在创建一个新的aidl服务,它将由第三方使用,在服务器端更新aidl文件时面临一个问题。 假设。 服务器AIDL文件rivison 1:有一个API 1.加(整数a,整数b) 客户端AIDL文件版本1:有一个api 1.加(整数a,整数b) 现在我已经更新了服务器AIDL 服务器AIDL文件驱动程序2:有两个API 1.减法(整数a,整数b); 2.添加(内部a、内部b) 当我用first revision客户端运行第二台rivision服务器时,它不是调用add,而是调用subtract方

我正在创建一个新的aidl服务,它将由第三方使用,在服务器端更新aidl文件时面临一个问题。 假设。 服务器AIDL文件rivison 1:有一个API 1.加(整数a,整数b)

客户端AIDL文件版本1:有一个api 1.加(整数a,整数b)

现在我已经更新了服务器AIDL 服务器AIDL文件驱动程序2:有两个API 1.减法(整数a,整数b); 2.添加(内部a、内部b)


当我用first revision客户端运行第二台rivision服务器时,它不是调用add,而是调用subtract方法。。这个问题有什么解决办法吗?android是否限制服务器端和客户端AIDL功能顺序应相同?

是的,服务器和客户端的AIDL接口必须同步。AIDL文件只是一个接口,其在客户端和服务器端的实现是在编译客户端和服务器代码期间生成的。此接口定义了如何封送从客户端到服务器的调用,因此,如果您的接口在客户端和服务器上不同步,您将在封送调用时遇到问题(这就是您在案例中看到的问题)


最好创建一个包含AIDL接口的库作为单独的项目,并将其附加到客户端和服务器项目。因此,这两个项目将具有相同的AIDL接口

在我的测试中,我发现您在AIDL末尾添加了方法,然后旧方法继续工作,而不更新AIDL。(我不建议您这样做,除非没有其他选择)


如果在中间插入新方法,则它最终会调用错误的方法。

是的,必须保持函数具有相同的声明顺序

AIDL将为活页夹通信生成适当的java文件。 它取决于不同的消息ID来区分将调用什么函数

基本消息id为零,第一个声明函数的消息id为(0+1), 第二个声明函数的消息id为(0+2)

因此,如果您试图保持不同版本的AIDL文件之间的兼容性。 请保持功能顺序不变,只需在尾部添加功能即可