Android 打包上傳AAR檔案到本地Maven倉庫並且引用
1.前言
建議電腦端觀看,多圖慎入
平常專案中遇到的一些公共元件,公共模組,多個專案都在使用的情況下,我們一般有以下幾種做法
1.整個module匯入工程,如果module中有什麼bug,修改了還要其他專案再重新新增進去,很不方便 2.module打包AAR,多個專案引用新增,如果有什麼bug,修改了重新發給其他專案成員重新更新 3.使用Gradle Add Libay的方式 類似:implementation 'com.android.support:appcompat-v7:27.1.1' 的方式來 引用我們的module,如果有bug,只需要維護,修改的人直接重新上傳module,我們修改版本號,重新bulid就可以更新module
從上面可以看到,第三種做法更佳,所以呢,接下來,往下看
2.How To Use
1.從文章標題知道,我們將要使用maven來管理我們的AAR檔案,但是我們做Android開發也沒有涉及到什麼Maven相關的知識啊,怎麼辦呢,沒關係,現在傻瓜式教學,首先看下圖
這裡用Rxjava舉個例子,可以看到左邊有很多的引用方式,apache maven ,apache Buildr,Gradle等引用方式,那麼這maven引用和平時用Gradle引用又有什麼關係呢?文章標題說上傳到本地maven,那是不是就是用圖上說的maven的方式去引用呢?彆著急,接下來我就百度google一下,解決大家的問題,以及我也想知道,為什麼上傳到maven以後,可以通過gradle的方式來引用,哈哈。
結果如下:
1.首先呢,maven和Gradle都是構建工具,
2.我也沒看明白,大概就是說,Gradle也是基於Maven來構建的,只是引用方式不同,maven採用xml的配置,gradle簡化了這樣的配置操作,一行程式碼可以搞定。
這裡有一篇文章做了maven和Gradle的對比:Gradle vs Maven Comparison 、Maven 和 Gradle 對比,裡面大概講了gradle的靈活性,效能,使用者體驗都比maven好,這也是google採用gradle作為Android的官方build Tools。
好了,上面講了那麼多題外話,不管怎麼樣(當然知其然更要知其所以然也很重要 調皮.jpg),接下來看看我們應該怎麼用吧。
分享一下我在開始搗鼓這個東西的時候,我是怎麼一個思路吧,既然我知道可以通過maven的方式管理AAR檔案,那麼我們接下來要做的事情就是
1.要擁有一個maven倉庫,能夠上傳到maven
那麼我們第一件事就是安裝maven,這裡nexus maven百度瞭解一下,那麼我們就開始吧:
2.1 第一步
這裡我選擇Windows下載
- 2.進入到你安裝的目錄,這裡我最後逇目錄是nexus-3.12.0-01-win64\nexus-3.12.0-01\bin 目錄下執行 nexus.exe /run,然後等待安裝,我這裡已經安裝好了執行nexus.exe /run是下面這個樣子
3.需要進入到nexus-3.12.0-01\etc檔案下 ,按需修改nexus-default.properties配置檔案,這裡我的配置檔案如下:
4.然後可以使用http://127.0.0.1:8081的地址開啟,然後右上角登入,賬號預設admin 密碼 admin123,登入進去的介面:
ok,到這裡我們完成了第一階段,安裝了可以管理maven的這樣一個平臺。
2.2 第二步
既然已經安裝好了,那麼,我們也要有東西可以上傳啊。那麼我們肯定要有一個module啊,接下來我們新建一個簡單的module測驗
2.2.1 第一個新建model
上圖可以看見,我們新建了一個很簡單的module,裡面添加了一個AAA的測試類,然後右邊的檔案證明這是一個apply plugin
是Android libary,就知道啥意思了吧,哈哈,現在我們有一個module,然後怎麼上傳到maven呢,這裡有2種方式
2.2.2上傳AAR包 做法1
2.2.2.1 建立,上傳AAR
.首先生成一個AAR檔案,執行gradle task-> build assembleRelease
開啟我們的http://127.0.0.1:8081/這個網站,如果發現打不開了,估計是服務被關了,重新啟動一下就好了,啟動方式還是剛才安裝的那個命令
開啟cmd進入到安裝目錄下bin目錄下開啟 nexus.exe /run
開啟以後按照如下做法
1.從左邊切換到Browse選單,然後點選maven-releases進入
第一次應該出現這樣的介面
2.上傳AAR檔案
然後upload,會出現
點選View it now檢視,
現在可以檢視到我們上傳的AAR咯
2.2.2.2 整合AAR
1.首先在我們需要引用專案的專案下的build.gradle檔案下而不是最外層的build.gradle,新增
repositories {
maven {
url 'http://127.0.0.1:8081/repository/maven-releases' //這個路徑就是Browse下maven-release右邊有一個copy按鈕,複製出來的。
}
}
然後新增
implementation 'demo.xiaxiayige.com:testmaven:[email protected]'
這裡的組合就是剛才填寫的 graoupId:artifactId:version這裡注意需要後面跟上@aar,如果不跟上這個預設是去載入.jar的檔案,就會出現找不到的情況,怎麼樣可以不加,後面會講到。
2.重新sync一下,就會從maven裡面去下載我們的AAR包到本地,接下來看下效果
我們使用了前面Module裡面建立的一個AAA類裡面的print方法,並且在測試類中能夠正常列印
怎麼樣,是不是很溜啊,傲嬌.jpg
2.2.3 上傳AAR包 做法2
這種做法就比較easy了,直接看程式碼吧
1.首先我們修改我們的AAA類 新增一個方法
package demo.xiaxiayige.com.testmaven;
public class AAA {
public static void print(String string){
System.out.println("string = [" + string + "]");
}
public static boolean isEmpty(String str){
return str==null || str.length()==0;
}
}
2.然後在module的bulid.gradle下新增
apply plugin:'maven'
和
uploadArchives {
configuration = configurations.archives
repositories {
mavenDeployer {
repository(url: 'http://127.0.0.1:8081/repository/maven-releases/') {
authentication(userName: 'admin', password: 'admin123')
}
pom.project {
version '1.1.0'
artifactId 'testmaven'
groupId 'demo.xiaxiayige.com'
packaging 'aar'
description 'update version 1.1.0'
}
}
}
}
現在我們module的build.gradle 程式碼長這個樣子
`apply plugin: 'com.android.library'
apply plugin:'maven' //新增
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
uploadArchives { //新增 ,因為Android Studio gradle 支援maven外掛,所以可以新增此task
configuration = configurations.archives
repositories {
mavenDeployer {
repository(url: 'http://127.0.0.1:8081/repository/maven-releases/') {
authentication(userName: 'admin', password: 'admin123')
}
pom.project {
version '1.1.0' //版本名稱
artifactId 'testmaven' //和前面網站上填寫的一樣
groupId 'demo.xiaxiayige.com' //和前面網站上填寫的一樣
packaging 'aar' //填寫aar
description 'update version 1.1.0 add new method' //更新描述
}
}
}
}
`
更多關於gradle maven外掛 詳情檢視 Maven Plugin
最後我們執行uploadArchives task
ok 可以看見bulid success。我們再去網站上看看,有沒有1.1.0版本的存在
然後再去引用專案的build.gradle 程式碼修改版本號,改為 implementation ‘demo.xiaxiayige.com:testmaven:1.1.0’,重新sync,
這個時候,可以發現後面不用新增@aar也可以引用成功
我們再去測試程式碼呼叫剛才新增的這樣一個方法
嗯,真是溜呢。
到這裡,基本上結束了。
3.結尾
慣例結尾 喜歡的點個贊
4.彩蛋
總結一下吧:
1.安裝maven管理的一個工具nexus
2.製作AAR
3.網站上傳AAR
4.程式碼上傳AAR