Android 开始时在AIDL文件中添加新方法时的奇怪行为

Android 开始时在AIDL文件中添加新方法时的奇怪行为,android,aidl,Android,Aidl,我有AIDL文件(methodA,methodB)作为我的android项目的一部分。我在文件的开头添加了一个新方法(methodC)并构建了项目,在客户端我没有更新/替换为新的AIDL文件 现在,当我从客户端调用methodA时,它正在服务器端调用methodC。我不明白映射是怎么发生的 有人能解释这种行为吗 client side file: serverside file: methodA methodC methodB

我有AIDL文件(methodA,methodB)作为我的android项目的一部分。我在文件的开头添加了一个新方法(methodC)并构建了项目,在客户端我没有更新/替换为新的AIDL文件

现在,当我从客户端调用methodA时,它正在服务器端调用methodC。我不明白映射是怎么发生的

有人能解释这种行为吗

client side file:      serverside file:
methodA                 methodC 
methodB                 methodA
                        methodB

事实上,答案很简单。AIDL编译期间的方法接收增量标识符。粗略地说,在编译客户端methodA的AIDL文件期间,收到的标识符等于1,methodB-2。类似地,在编译过程中,在服务器端methodA接收等于1的标识符methodB-2。当您在服务器上更新AIDL文件并将methodC放在接口的开头时,在编译过程中,此methodC收到的标识符等于1。因此,当客户端调用methodA时,更新后的服务器将收到一个命令,以执行标识符为1的方法,即现在的methodC

您的方法是通过事务号调用的,而不是通过名称调用的。 事务号在生成文件夹中的auto-generated.java中自动生成。方法的编号在方法会议中生成。 所以,如果您想向aidl文件添加新方法,并且不在所有应用程序中更新此文件,请将此方法放在文件末尾

这样做:

client side file:      serverside file:
methodA                 methodA 
methodB                 methodB
                        methodC
                        methodD
在这种情况下,来自客户端的方法A和B将在服务器端调用正确的方法,因为它们具有相同的事务编号