【盜墓筆記】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

       將一些項目中的一些獨立功能打包成aar,不僅能於項目解耦,還能夠提供給其它項目使用相同的功能,可謂是爲項目開發帶來了很大的便利。最近第一次做sdk,碰到一些問題,花了不少時間才解決,所以這裏做一下簡單的記錄,方便以後參考,也希望能夠給碰到同樣問題的朋友提供一些便利。

       本篇包含如下兩種打包場景:

    (1)Module中不含有其它aar

    (2)Module中嵌套第三方aar

1、Module中不含有也不依賴其它第三方aar

    (1)在Project中新建Module,這裏以默認名爲app的Module來舉例,在app中實現需要封裝的功能。

    (2)進入到app的build.gradle文件

       在①處,將 apply plugin: 'com.android.application' 修改爲 apply plugin: 'com.android.library',該Module會變成了一個library。

       在②處,註釋掉applicationId這一行。由於打包後該Module不再是一個獨立的應用,而是一個其它項目的附屬,所以它不配擁有獨立的applicationId!(開個玩笑,希望這個aar不要生氣罷工哈-_-)。

    (3)進入到AnroidManifest.xml中

 

        在③處,如果有自定義的Application類,把這行刪掉。因爲打包成aar並被其它項目引用後,該AnroidManifest.xml會和所在項目的AnroidManifest.xml合併,所謂“一山不容二虎”,所以這裏必須刪除掉。

       在④處,icon這一行也要去掉。道理和上面一樣,否者aar被引入到項目中並安裝後,桌面上會出現兩個圖標,其中一個還不能運行。

    (4)進入到Gradle界面

        點擊⑤處,等上幾秒鐘,就能夠生成aar了,aar路徑如下圖:

 

2、該Module中包含有其它aar

       Module依賴其它aar的場景,可能是該aar在Module的libs目錄中,也可能在某個獨立的Module中,只是主Module依賴了該aar所在的Module。這裏我碰到的是第一中情況,也就是該aar在Module的libs目錄中的情況,這裏咱們要用到fataar方案。

    (1)先看看整體Project的部署情況,A處是嵌套的aar

 

     (2)進入到B處的build.gradle文件

        文件中要加上D處這一行,應用fat-aar。由於是libs中的aar是嵌套的,所以在E處需要用embed。

     (3)進入到C處的build.gradle,也就是整個Project的build.gradle文件

       按照上圖中的,添加F、G、H處的代碼。

       結合場景1的操作,再根據上述的3個步驟,這個嵌套了第三方aar的目標aar就生成了。

3、答疑

       問:如果我們只採用(1)中的步驟,而不是使用fataar的方式來打包嵌套第三方aar包的aar,那會出現什麼問題呢?

       答:如果只採用(1)中的方式,也能生成aar。但是我們的項目在使用時就需要依賴我們生成的aar,還要在項目中依賴這個第三方aar,可見這並不是我們想要看到的。當然,還有其它的打包方式來解決aar嵌套aar問題的方案,fataar方式只是其中一種,至於其它方式筆者沒有研究過,讀者可以自己嘗試一下。

4、推薦閱讀

       如下鏈接中包含了更多使用fataar打包複雜aar的場景,碰到相同場景的朋友可以參考該鏈接:https://github.com/kezong/fat-aar-android 。

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