【问题标题】:How to make Android App backward compatible when AIDL interface gets updatedAIDL接口更新时如何使Android App向后兼容
【发布时间】:2021-07-13 07:11:39
【问题描述】:

AIDL接口更新后如何让Android App向后兼容?

例如,如果我的应用访问一个 AIDL 接口来完成 IPC 调用:

interface SampleAidl {
    int sampleMethod(int i);
}

在不同的平台上,相同的 AIDL 更新为新版本,不仅更改了原始 sampleMethod 的参数,还添加了另一个方法:
interface SampleAidl {
    int sampleMethod(int i, byte[] ext);
    void sampleMethodExtra();
}

AIDL 名称和包保持不变。


我有一个标志可以决定使用哪个版本的 AIDL。 问题是,是否有任何解决方案/线索表明我的应用程序可以在编译时包含两个版本的 AIDL,然后运行时根据标志选择正确的版本?

或者唯一的方法是,我的应用需要有单独的版本来支持不同的 AIDL?

【问题讨论】:

    标签: java android mobile-application aidl


    【解决方案1】:

    从 Android 10 开始,它支持稳定的 Android 接口定义语言 (AIDL),这是一种跟踪 AIDL 接口提供的应用程序接口 (API)/应用程序二进制接口 (ABI) 的新方法。稳定的 AIDL 与 AIDL 的主要区别如下:

    • 在构建系统中使用aidl_interfaces 定义接口。
    • 接口只能包含结构化数据。代表所需类型的 Parcelables 会根据其 AIDL 定义自动创建,并自动编组和解组。
    • 接口可以声明为稳定的(向后兼容)。发生这种情况时,他们的 API 会在 AIDL 接口旁边的文件中进行跟踪和版本控制。

    您可以通过这里了解更多详情 - https://source.android.com/devices/architecture/aidl/stable-aidl#versioning-interfaces

    如果您使用的是旧的简单 AIDL,那么您可以使用这个稳定的 AIDL 更新您的 AIDL 接口 - https://source.android.com/devices/architecture/aidl/stable-aidl#dealing-with-older-interfaces

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      相关资源
      最近更新 更多