1. 程式人生 > >公開aidl介面給外部apk呼叫時注意事項

公開aidl介面給外部apk呼叫時注意事項

當我們寫的一個service通過aidl公開介面給外部第三方應用時,通常的做法是會將aidl以及對應java檔案打成jar包,以供第三方的app使用。這樣做沒有任何問題,但要注意的是在後續升級這個介面的時候,得保持介面中方法順序不變,即只能在aidl的後面新增新方法,而不能在中間插入新方法。

這是為什麼呢?原因很簡單,如果我們是通過eclipse寫的aidl,那麼Eclipse會自動幫我們生成對應的java檔案,在這個java檔案中的onTransact方法中,自動為我們分配好了每一個方法的code,通過分析android程序間通訊binder機制可以知道,則是客戶端最後是通過呼叫transact方法,並傳遞這個code給server端,來完成呼叫。

因此如果我們在原來的介面中間插入新的方法,且沒有及時升級第三方app引用的jar包的話,那麼第三方應用在呼叫介面時傳回來的code,就不是他真正想要呼叫的方法。

舉個例子:

client:引用的jar包有3個方法, A(1), B(2),C(3)

service:未升級前也有3個方法, A(1), B(2),C(3)

service:升級後有4個方法, A(1), B(2),D(3),C(4)

這時client呼叫A或B均不會出現問題,而呼叫C時,在service端onTransact實際響應的確是D!!