【问题标题】:How do I Connect to remote service from a different .apk如何从不同的 .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。

【问题讨论】:

    标签: android service apk aidl


    【解决方案1】:

    您必须知道在两个独立进程之间发送的数据的格式。这是将数据序列化/反序列化为 Java 对象所必需的。

    AIDL 是一种描述对象结构的描述语言。

    所以,你有两个选择:

    1. 要么您有 AIDL,要么

    2. 您的代码明确知道执行反序列化/序列化的格式。这是Parcelable 的实现。此实现可以在您包含在应用程序中的 jar 中。

    【讨论】:

    • 在考虑了更多情况之后,我并不反对使用 jar 文件。我认为这种方式实际上更好,因为我看不到解决这个问题的任何其他方式,因为我需要一个对象描述。那么我可以在 jar 文件中包含 AIDL 吗?如果我在项目中使用 AIDL,我不需要在 jar 文件中实现接口吗?与 AIDL 相比,使用 Parcelable 有什么优势?谢谢你的帮助。您对这些问题的回答对我有很大帮助!
    • 使用 Parcelable,您必须手动反序列化/序列化,并且仅在您发送 Intent 时才可用,这是一种限制。对于真正的 IPC,您需要 AIDL。
    • 另外,如果您的 IPC 呼叫不是并发的,那么您可以使用 Messenger 将呼叫排队,但不需要 AIDL。 developer.android.com/guide/topics/fundamentals/…
    • 非常感谢!我认为 AIDL 将是要走的路。我现在要玩它,看看我能做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-17
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2014-07-17
    相关资源
    最近更新 更多