我目前是初级开发人员。我听说过IPC,现在我正在学习Android AIDL。
我已经创建了一个adb server version (36) doesn't match this client (39); killing...
adb E 03-27 08:01:55 2925 147690 usb_osx.cpp:333] Could not open interface: e00002c5
adb E 03-27 08:01:55 2925 147690 usb_osx.cpp:294] Could not find device interface
error: could not install *smartsocket* listener: Address already in use
ADB server didn't ACK
* failed to start daemon *
error: cannot connect to daemon
文件,我已经在服务中实现了.aidl
中的方法,并且我在其他应用程序中使用了这些方法,但是我没有看到这一点
为什么我不能在不使用AIDL的情况下制作包含该服务的.aidl
或.aar
文件?当我应该使用AIDL时,我应该导入.jar
个文件。更一般地说,当我们使用.jar
文件时,使用IPC有什么意义?
答案 0 :(得分:4)
为什么我不能在不使用AIDL的情况下制作包含该服务的.aar或.jar文件?
来自文档https://developer.android.com/guide/components/aidl.html:
只有当您允许来自不同应用程序的客户端访问IPC服务并希望在您的服务中处理多线程时,才需要使用AIDL。
当您在aar或jar中打包Service
时,此服务可以在任何地方运行,即在应用程序的相同或不同进程中运行。 AIDL专为IPC而设计,即不同流程中的服务和应用程序。
IPC是一种操作系统提供的数据共享机制,jar是字节码分配的手段。它们是不同的东西。更一般地说,当我们使用.jar文件时,使用IPC有什么意义?
假设您想要使用某人提供的服务,并且您没有其源或字节码。您只能在运行时,由提供商管理的进程中访问此服务,而不是您自己的服务。在这种情况下,您需要提供商指定的AIDL才能与服务进行通信。