天天看點

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

在打包aar時會碰到一種場景:該aar中還引用了第三方aar。這種嵌套第三方aar的aar的方式,在項目中使用時,不僅要依賴我們打包的aar,還有依賴該第三方aar,這顯然不夠友善。本文結合自己實際工作中碰到的問題,記錄一種在aar中打包嵌套aar的方式——fataar,通過這種方式,可以将第三方aar完美融合到我們自己打包的aar中。

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

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

    (1)Module中不含有其它aar

    (2)Module中嵌套第三方aar

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

    (1)在Project中建立Module,這裡以預設名為app的Module來舉例,在app中實作需要封裝的功能。

    (2)進入到app的build.gradle檔案

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

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

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

    (3)進入到AnroidManifest.xml中

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

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

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

    (4)進入到Gradle界面

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

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

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

2、該Module中包含有其它aar

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

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

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

     (2)進入到B處的build.gradle檔案

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

        檔案中要加上D處這一行,應用fat-aar。由于是libs中的aar是嵌套的,是以在E處需要用embed。

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

【填坑往事】圖解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar

       按照上圖中的,添加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 。

繼續閱讀