首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个AIDL版本

多个AIDL版本
EN

Stack Overflow用户
提问于 2020-04-20 23:44:47
回答 2查看 404关注 0票数 0

AIDL的Android文档只声明

警告:第一个版本后对AIDL接口所做的任何更改都必须保持向后兼容,以避免破坏使用您的服务的其他应用程序。也就是说,因为您的.aidl文件必须复制到其他应用程序中,以便它们能够访问您的服务接口,所以您必须维护对原始接口的支持。

所以我尝试了一些实验。我有一个现有的AIDL接口,并实现了两个支持它的IPC服务,并且可以从我的主要服务中访问。

因此,在我的主要服务的AIDL接口中,我添加了一个方法,这个方法在预先存在的方法列表中是第一个,我构建了这个应用程序并进行了部署。但是这两个IPC服务没有变化;他们不知道新方法。它没有正常工作,但确实起作用了。但是,原始方法在调用时返回错误的值。看起来,在列表顶部插入新方法是问题所在(似乎整个包都是在一个字节数组中封送,从而破坏了接收端的非封送处理)。

因此,我将新方法添加为文件中的最后一个条目,这一次它运行得很好。当然,旧的IPC将无法处理新方法,如果我称它为远程异常,则可能会引发远程异常。

所以,我的问题是,为什么顺序上的变化会产生如此大的变化?这是侥幸吗?是否不可能在同一包中添加新方法?我不想让它通过在文件末尾添加一堆方法来工作,而这只是意外的侥幸。

EN

回答 2

Stack Overflow用户

发布于 2020-07-31 15:33:03

在.aidl文件中声明的方法的顺序在客户端和服务中应该是相同的。

票数 0
EN

Stack Overflow用户

发布于 2021-04-17 00:28:28

客户端和服务器端的aidl文件按位置链接,并在路由调用时检查参数。

代码语言:javascript
复制
client AIDL  <->   Server AIDL
methodA            methodB
methodB            methodA

如果像上面一样交换了位置,并且参数仍然适用,那么客户机调用methodA就会路由到服务器端的methodB。

我确实找到了任何关于这种行为的官方文件。这是基于我在Android R上的经验。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61333872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档