向 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 对象的代码的主要内容,如果未能解决你的问题,请参考以下文章
Binder 机制AIDL 分析 ( 创建 AIDL 文件 | 创建 Parcelable 类 | AIDL 中使用 Parcelable 类 | 编译工程生成 AIDL 对应的Java源文件 )(代
使用 AIDL 编写 Android 服务时如何为客户端分发自定义类