Android Library釋出到Maven倉庫以及使用
如同以往的部落格一樣,先來說說為什麼要寫這篇部落格吧。昨天做了一個android類庫,由於有資原始檔,所以打包成了aar,於是順利將其整合到其它專案中,看起來沒問題可以用,但是除錯時候發現類庫dependency中compile的第三方包沒有正確的打包進來。這就悲催了,總不能在新的專案中將類庫中需要的包compile進來啥,這不久太low了麼,於是絞盡腦汁想解決辦法,在網上找到不少資料說將類庫釋出到本地Maven倉庫可以解決這個問題,嘗試了下,的確可以解決(如果類庫依賴了其它本地類庫或者jar包則超出本部落格的討論範圍,請看fat-aar相關資料)。
這篇文章的目的就是總結將Android類庫釋出到Maven倉庫的實現方法,這裡的Maven倉庫有兩種一種是本地的,一種是遠端的(以Git為例)。
1、釋出類庫到本地Maven倉庫
首先建立一個Android專案,然後建立一個我們需要的Android Library
這裡建立一個名為androidLib的類庫,在androidLib中新增對應的dependency依賴,這裡添加個Gson和OkHttp3的依賴
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support' , module: 'support-annotations'
})
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.android.support:appcompat-v7:26.+'
testCompile 'junit:junit:4.12'
}
同時建立一個HelpUtil的輔助類(這個無所謂,主要是方便測試)
我們知道pom依賴是由三部分組成的比如下面的okhttp3的依賴,主要就是需要groupId、artifactId以及version。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>3.4.1</version>
<scope>compile</scope>
</dependency>
那麼我們在將類庫釋出到Maven倉庫就需要配置這三個資訊,同時還需要配置倉庫的位置,於是就有了下面三個關鍵步驟。
a、androidLib模組中新建gradle.properties檔案,新增以下內容
#包資訊
ARTIFACTID = androidLib
LIBRARY_VERSION = 1.0.0
#Mac下地址: file:///Users/<username>/my/local/repo
#Windows下地址: file:///<碟符>:/users/<username>/my/local/repo
LOCAL_REPO_URL=file:///C:/Users/caicai/my/local/repo
這裡設定好artifactId、version以及倉庫位置對應的幾個變數資訊。
b、專案根目錄下的gradle.properties(沒有則新建一個)中新增如下內容
#包資訊
GROUP_ID = com.yoryky.mavendemo
# Licence資訊
PROJ_LICENCE_NAME=The Apache Software License, Version 2.0
PROJ_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
PROJ_LICENCE_DEST=repo
這裡設定好groupId對應的變數資訊。
c、開始配置groupId、artifactId、version以及倉庫位置
在androidLib對應的build.gradle中新增如下內容
apply plugin: 'maven'
uploadArchives{
repositories.mavenDeployer{
repository(url:LOCAL_REPO_URL)
pom.groupId = GROUP_ID
pom.artifactId = ARTIFACTID
pom.version = LIBRARY_VERSION
}
}
實際上a和b都是在配置變數,正真的設定就是c這個地方,也可以直接跳過a、b步驟,直接在c這裡賦值就行了。
關於釋出的配置配置就算結束,同步下gradle,然後可以看到gradle工具中有如下uploadArchives命令
雙擊觸發該命令,然後到我們設定的對應repo中可以發現,釋出成功。
這裡可以看到生成了一個pom檔案以及對應的androidLIb.aar包,再來看看pom檔案內容
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yoryky.mavendemo</groupId>
<artifactId>androidLib</artifactId>
<version>1.0.0</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>3.4.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.android.support</groupId>
<artifactId>appcompat-v7</artifactId>
<version>26.+</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
發現我們需要的okhttp3和gson都在裡面了,那麼在其它專案中compile這個maven倉庫中的androidLib就會根據這個pom檔案找到androidLib包的依賴並將其自動新增到專案中。
2、使用本地倉庫中的類庫
第一小節講了如何將類庫釋出到本地倉庫,那麼這一小節來說說使用的問題。既然都發布成功了使用就很簡單了。
首先,在Project的build.gradle中新增對本地Maven倉庫的引用
allprojects {
repositories {
jcenter()
maven{
url 'file:///C:/Users/caicai/my/local/repo/'
}
}
}
這裡的url就對應我們上面設定的倉庫路徑。
然後在對應模組中新增對androidLib的依賴既可
這裡冒號分割的三個部分,就分別對應上面設定的groupId、artifactId以及version。
再看在專案中的使用
這確認了,androidLib依賴包被成功新增到了專案中。
3、說說遠端Maven倉庫
第一、二小節說了類庫釋出到本地Maven倉庫以及使用,那麼可以釋出到遠端Maven倉庫麼,答案是當然可以啊,這裡就以github來說明吧。
先到github上建立一個new repository命名我MavenDemo,獲取其git地址,然後將專案拉取到本地(名字也是MavenDemo),將repo下對應的類庫拷貝到MavenDemo目錄下,然後push到github。
本地的MavenDemo目錄如下
提交到github後如下
那麼遠端Maven倉庫就算是配置完成了(啥?這麼簡單)。
然後來看看使用吧
同樣的我們需要在Project對應的build.gradle檔案中去配置maven的url地址
賦值github專案路徑
https://github.com/Yoryky/MavenDemo
將其變換為
https://raw.githubusercontent.com/Yoryky/MavenDemo/master
這其中將gitub.com變成了raw.githubusercontent.com然後在路徑末尾添加了master。
這個raw.githubusercontent.com域名是github的素材庫,我估計上傳的maven倉庫被放到這個域名下面,至於為什麼不能直接用github專案路徑作為地址,我也感到納悶,有高手望指出。
有了路徑後,還是配置好
allprojects {
repositories {
jcenter()
maven{
//遠端maven路徑
url 'https://raw.githubusercontent.com/Yoryky/MavenDemo/master'
}
}
}
然後通過同樣的方法compile依賴androidLib,測試後發現依賴成功。
到這裡也就算是說清楚了Android類庫釋出及使用maven倉庫的過程,這裡給出一個測試Demo吧,MavenDemo。
4、參考文獻