如何从不同的 .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 连接到远程服务的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Mac OS 终端连接到远程 mongo 服务器

如何从 Android 应用程序通过 JDBC 连接到远程 MySQL 服务器

如何连接到远程 Redis 服务器?

无法使用桥接网络模式从 docker 容器连接到远程 SQL 服务器

创建 perl 脚本以远程连接到另一台服务器并读取文件?

如何将 xampp 数据库连接到远程服务器?