2011-09-26 15 views
1

首先,我已經看到了這一點:如何連接到遠程服務從不同的apk

Remote Service as apk

而且它不會幫我。這筆交易。我有一個創建遠程服務的apk(稱之爲A)。然後我有另一個apk(稱之爲B)。如何將B連接到A而不包含AIDL文件或jar文件。我會認爲這是可能的。

**更新**

所以我抄AIDL文件分爲B和A創建的,以服務爲AIDL文件。我可以連接到遠程服務,並綁定到服務。然而,當我嘗試調用存在於服務,我得到一個方法:

java.lang.SecurityException異常:粘合劑調用不正確的接口

無法找到任何幫助。有任何想法嗎?

**問題已解決** AIDL文件必須位於項目B中同名的包中。感謝您的幫助。

回答

1

您必須知道在兩個獨立進程之間發送的數據格式。這是數據序列化/反序列化到Java對象所需要的。

AIDL是描述對象結構的描述語言。

所以,你有兩個選擇:

  1. 要麼你有一個AIDL,或

  2. 代碼明確地知道該怎麼做了去/序列化格式。這是Parcelable的執行。這個實現可以在你的應用中包含的jar中。

+0

想了解更多有關情況後,我並不反對使用jar文件。我認爲它實際上更好,因爲我不能看到任何其他解決此問題的方法,因爲我需要一個對象描述。那麼我可以將AIDL包含在jar文件中嗎?如果我在項目中使用AIDL不需要在jar文件中實現接口?在AIDL上使用Parcelable有什麼好處?謝謝你的幫助。你對這些問題的回答會幫助我很多! – jjNford

+0

使用Parcelable,您必須手動取消/序列化,並且只有在您發送Intents時纔可用,這是一種限制。對於真正的IPC,你需要AIDL。 –

+0

另外,如果你的IPC調用不是併發的,那麼你可以使用'Messenger'來排隊調用,但不需要AIDL。 http://developer.android.com/guide/topics/fundamentals/bound-services.html#Messenger –