1. 程式人生 > >Android 打包上傳AAR檔案到本地Maven倉庫並且引用

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 ComparisonMaven 和 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