如何从不同的 .apk 连接到远程服务
Posted
技术标签:
【中文标题】如何从不同的 .apk 连接到远程服务【英文标题】:How do I Connect to remote service from a different .apk 【发布时间】:2011-09-26 20:47:35 【问题描述】:首先我看到了这个:
Remote Service as apk
而且它对我一点帮助都没有。这是交易。我有一个创建远程服务的 apk(称为 A)。然后我有另一个apk(称之为B)。如何在不包含 AIDL 文件或 jar 文件的情况下将 B 连接到 A。我认为这是可能的。
** 更新 **
所以我已将 AIDL 文件复制到 B 中,并在 A 中为 AIDL 文件创建了一个服务。我现在可以连接到远程服务,并绑定到该服务。但是,当我尝试调用服务中存在的方法时,我得到:
java.lang.SecurityException: 对错误接口的 Binder 调用
在这方面找不到任何帮助。有什么想法吗?
** 问题已解决 ** AIDL 文件必须在项目 B 中的同名包中。感谢您的帮助 Peter。
【问题讨论】:
【参考方案1】:您必须知道在两个独立进程之间发送的数据的格式。这是将数据序列化/反序列化为 Java 对象所必需的。
AIDL 是一种描述对象结构的描述语言。
所以,你有两个选择:
要么您有 AIDL,要么
您的代码明确知道执行反序列化/序列化的格式。这是Parcelable
的实现。此实现可以在您包含在应用程序中的 jar 中。
【讨论】:
在考虑了更多情况之后,我并不反对使用 jar 文件。我认为这种方式实际上更好,因为我看不到解决这个问题的任何其他方式,因为我需要一个对象描述。那么我可以在 jar 文件中包含 AIDL 吗?如果我在项目中使用 AIDL,我不需要在 jar 文件中实现接口吗?与 AIDL 相比,使用 Parcelable 有什么优势?谢谢你的帮助。您对这些问题的回答对我有很大帮助! 使用 Parcelable,您必须手动反序列化/序列化,并且仅在您发送 Intent 时才可用,这是一种限制。对于真正的 IPC,您需要 AIDL。 另外,如果您的 IPC 呼叫不是并发的,那么您可以使用Messenger
将呼叫排队,但不需要 AIDL。 developer.android.com/guide/topics/fundamentals/…
非常感谢!我认为 AIDL 将是要走的路。我现在要玩它,看看我能做什么。以上是关于如何从不同的 .apk 连接到远程服务的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Android 应用程序通过 JDBC 连接到远程 MySQL 服务器