關於AIDL基礎的填坑

經過兩天的摸索,筆者頓覺AIDL是個大坑,細節問題稍不注意就會搞事情,唉。

爲了不讓更多的小夥伴們被坑住浪費時間,我在這裏把我這幾天遇到的坑總結一下,希望能幫到大家。

1. 坑一, 二者存放aidl文件的包結構必須相同,下面放兩個截圖:

這是服務端:


這是客戶端:



可以看出,二者的IDictionaryManager.aidl的包結構是完全一樣的,都是src/com.example.test1,只有這樣,當make project或者clean project的時候系統幫我們生成的binder在兩個項目中才會是一樣的。不一樣的話會導致通信失敗而報錯。實際上筆者感覺可以直接把服務端生成的binder接口直接複製粘貼到客戶端,省的出錯。


2.坑二,編譯坑

要注意最好在app目錄下的build.gradle中的android中加入以下話語,下面截圖:



不然可能會提示找不到類或者其他亂七八糟的錯誤。


3.坑三,遠程連接服務坑

先來看一下筆者的AndroidManifest.xml文件中關於service的內容:



切記,intent-filter中的action過濾條件可以任意取(但是要注意不要跟其他服務的過濾條件重複而且必須是三級或者三級以上包名)。但是category過濾條件(這裏用的是默認的),只能是項目包名(這裏就是com.example.test1)。

下面我們來看一下我的客戶端申請連接時的intent的配置:



這裏注意action必須和服務端服務的action相同, setPackage裏的字符串就是要遠程連接的服務器程序的程序包名(不一定是服務器端服務所在的包名,而是程序包名)。否則會連接失敗。


隨本文章上傳源碼,感興趣的朋友可以參考下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章