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