向 AIDL 客户端提供 Parcelable 对象的代码

Posted

技术标签:

【中文标题】向 AIDL 客户端提供 Parcelable 对象的代码【英文标题】:Provide the code of Parcelable objects to AIDL clients 【发布时间】:2013-05-07 16:10:53 【问题描述】:

文档说明:

如果您想通过 IPC 接口将一个类从一个进程发送到另一个进程,您可以这样做。但是,您必须确保您的类的代码可用于 IPC 通道的另一端,并且您的类必须支持 Parcelable 接口。

如果我向客户提供.java 文件,一切正常。但我想知道是否有办法传递.class 文件,或者任何其他方式来隐藏源代码。

【问题讨论】:

【参考方案1】:

但我想知道是否有办法传递 .class 文件或任何其他方式来隐藏源代码。

运送一个包含您的 Parcelable 类的 JAR 应该可以,虽然我还没有尝试过。

另外,请记住版本控制会成为一个问题——如果您更改了这些类,但它们没有更新其 JAR,该怎么办?这种复杂性是我不建议以这种方式在应用程序之间分配 Parcelable 对象的原因。

【讨论】:

如果他们不更新我提供的.java,我不会有同样的问题吗? @cYrus:是的。这就是为什么我不建议以这种方式在应用程序之间分配 Parcelable 对象的原因。 还有其他选择吗?我定义了一个使用 Parcelable 对象作为参数的 AIDL 接口。这个接口被客户端应用程序使用,你有什么建议部署它? @cYrus:不要使用自定义 Parcelable 定义 AIDL 接口。传递简单值(整数、字符串等)或使用平台提供的Parcelable 类,如Bundle。或者,永远不要更改自定义 Parcelable 类的定义。或者,完全放弃 AIDL 并切换到带有服务的命令模式(startService()Intent extras)。 另一条评论 - 因为您正在定义 Parcelable,您可以并且可能应该在包裹化表示中添加一个版本号。然后至少接收者可以检测到错误,而不是曲解数据和崩溃(或更糟糕的是,暴露安全漏洞)。

以上是关于向 AIDL 客户端提供 Parcelable 对象的代码的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio中如何创建AIDL

Binder 机制AIDL 分析 ( 创建 AIDL 文件 | 创建 Parcelable 类 | AIDL 中使用 Parcelable 类 | 编译工程生成 AIDL 对应的Java源文件 )(代

使用 AIDL 编写 Android 服务时如何为客户端分发自定义类

Android Studio开发环境建立aidl文件,怎么生成相应的java文件

服务 远程服务 AIDL 进程间通讯 IPC 深化

android aidl