打包Maven(裡面有第三方依賴和本地module依賴)
- 一、普通的aar打包
- 二、帶有第三方依賴的aar打包
- 三、帶有本地module依賴的aar打包
PS: aar 和 jar 包的差別是,arr支援将layout、照片等資源檔案一起打包,而jar不可以。
背景簡單介紹:
app依賴lib 1,lib1依賴 lib2,lib1 裡面還有第三方的gihub依賴,lib2裡面也什麼都沒有依賴,就是一個單純的封裝的工具module,現在的任務是:
1、lib2做成aar。(配合講解普通的aar如何打包)
2、lib1做成aar。(配合講解帶第三方依賴的lib怎麼打包成aar,帶本地lib module的怎麼打包成aar)
一、普通的aar打包
如果将lib2 打包成aar,那麼就屬于最基礎的打包方式了。
但是這種打包也有好幾種:
1、可以用gradlew 指令打包;
2、手動點選gradle task打包;
3、手動點選build 打包。
我這裡隻示範 3 、手動點選build 打包。
先選中你要打aar的 module,再點選Build,然後點選 Make Module “***”
就會生成一個aar,生成的aar在該module的 build/outputs/aar下
上可能會有人有疑問,為啥是debug.aar,這個是可以改的,如下圖:
把這個debug改成release,那麼build 出來的aar就是release的了。
你可以将你的aar提供給别人使用。
可能有人覺得這樣答出來的aar需要拷貝來拷貝去,不怎麼好,那麼下面我介紹maven方式的時候剛好也解決了這個問題。
二、帶有第三方依賴的aar打包
為了跟我最後要講的第三方依賴和module并存的情況,我這裡先暫時将module依賴注釋掉。
1、首先聲明,這種帶依賴的有兩種方式打aar:
(1)第一種:跟我上面介紹的一樣,你直接打aar即可,但是别人用你的aar的時候,隻要通路的類裡面包含了第三方依賴的東西,就會提示NoClassFoundException哦,解決辦法是你把你依賴的所有第三方依賴拷貝給他,他将這些依賴再在他的項目裡面依賴一下就可以正常通路你的aar了。
(2)第二種:使用maven或github形式生成的aar。我這裡暫時隻介紹送出到maven。
2、分為線上和離線生成兩種:
如果你有maven 位址或者是公司的maven位址,你可以直接傳上去。當然最好肯定是現在本地測試完上傳(上傳上去的也可以删除)。
離線測試;
線上測試送出(也會生成本地aar);
離線和線上都會生成aar,并且離線和線上的差別其實就是配置的maven位址不一樣。如下圖:
上圖是應用maven插件。
我紅色框出來的上面是線上的位址和賬号密碼,下面框出來注釋的是離線的位址,意思就是生成的aar會送出到本地倉庫。
如何生成aar?
找到Gradle 任務裡面去找到你剛剛在build.gradle 裡面配置的uploadArchvies 任務,輕按兩下啟動即可。
運作完畢之後,如果你選擇的是離線的送出到了本地.m2庫,自己可以去翻翻看,如果選擇的是直接送出到了maven線上倉庫,就需要去通路那個位址去看了。并且别人用的時候需要配置你放的那個maven庫的位址、賬号、密碼,在project的 build.gradle 裡面配置一下,配置完的效果如下:
本地倉庫位址:我用的是mac,mac的位址一般在.m2目錄下,這回目錄是隐藏的,你可一直接通過“前往檔案夾”或者是解除隐藏既可以看到這個檔案夾了。
你一層一層點進去就能找到你送出到本地倉庫的aar了。
使用的時候直接在project 的 build.gradle配置一下,新增可以通路本地maven庫就可以了:
配置好可以通路本地maven庫之外,記得将你的生成的aar依賴位址放到app的module 的build.gradle裡面 implemention哦,比如:
這個位址是你在前面配置的groupId那張照片裡面配置的送出到maven庫的依賴位址。
三、帶有本地module依賴的aar打包
重點來了,之是以寫這篇blog,是為了記錄這個。如果要打包的lib裡面有本地module依賴,如何打包。
當然您可以直接把您的module給别人,别人添加也行,但是我要介紹的和記錄的是送出到maven裡面,這樣用起來更友善。
如下圖:
Lib1 不光有 api 第三方依賴,還有 project 依賴。
我這裡采用的是github的一個工具fat-aar工具。首先需要将插件引入,然後應用:
apply plugin: 'com.android.library'
apply plugin: 'maven'
apply plugin: 'com.kezong.fat-aar'
在要打包(比如我介紹的lib 1)的 build.gradle 的android 節點裡面加上上圖的配置。
最後需要對第三方依賴、本地的module依賴進行改造:
這樣就改造完了。
然後打包的方式跟我上面介紹的一樣,還是去執行uploadArchives task就可以生成了。