一、本地依賴方式
由於要使用第三方jar包。而第三方給的SDK是jar包,並沒有上傳到Maven庫,因此不支持Maven庫在線依賴,所以需要如下所示的,在項目中手動集成jar包。
然後在build.gradle中 導入剛纔的libs目錄
dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')
}
這種方式本人不喜歡,因爲習慣了使用Maven在線依賴的方式,因此想把這些jar包上傳到Maven私服上,然後通過Maven在線依賴的方式來使用這些第三方jar包。
二、將jar包上傳到Maven私服
2.1 登錄Maven私服並打開【3rd party】這個Respsitory
- 打開內部搭建的Maven私服,比如我們內部的Maven私服網站爲 http://xxx.xxxx.com:8081/nexus/
2、點擊右上角的【LogIn】按鈕,進行登錄
3、登陸之後點擊左側列表中的【views/respsitories】–>【Respsitories】 顯示出所有的Respositories,然後以後點擊【3rd party】。
因爲我們要上傳的是第三方的jar包,所以就放在【3rd party】這個Respsitory裏面比較合適
點擊【Browse Storage】可以看到所有已經上傳到這個【3rd party】這個Respsitory裏面jar包或者aar包
2.2 在【3rd party】這個Respsitory中上傳第三方的jar包
- 點擊【Artifact Upload】面板,進行上傳jar包操作
填寫要上傳的jar包的相關信息,如下所示:
2.2.1 填寫【Select GAV Definition Source】
這一步主要是填寫,我們上傳jar包之後的一些產物在Maven中的屬性,比如groupid和artifactId被統稱爲“座標”是爲了保證項目唯一性而提出的,如果你要把你項目弄到maven本地倉庫去,你想要找到你的項目就必須根據這兩個id去查找。
- 參數【GAV Definition】
第一個參數【GAV Definition】可以選擇【GAV Parameters】和【From POM】兩種方式,我們選擇【GAV Parameters】
如果選擇【From POM】的方式,界面如下
- 參數【Group】
groupId 是(Maven)項目的唯一標識。Group ID必須滿足 Java包名規範 ,這意味着是形如:org.apache.maven,org.apache.commons的格式。Maven不強制此規範,很多遺留的舊項目使用單個單詞作爲group ID。但是,很難用單個單詞作爲(新項目的)group ID,並將其提交到Maven中央倉庫中。
你可以創建任意數量的子分組。一種比較好的來劃分groupId的顆粒度的方式是使用項目結構(package structure)。這是指,如果當前項目是一個多模塊(module)的項目,可以通過在父groupId的基礎上增加後綴的形式來定義,例如:
org.apache.maven,
org.apache.maven.plugins,
org.apache.maven.reporting
- 參數【Artifact】
artifact 是不帶版本號的jar的名字,唯一要求是使用小寫字母,且沒有特殊符號。如果這是一個第三方的jar包,必須使用其被髮布的包名。
例如:maven,commons-math
- 參數【Version】
version 如果要發佈,可以選擇典型的數字和點號組成的版本號(1.0,1.1,1.0.1…)不要使用日期,因爲它們通常和SNAPSHOT版本號聯繫在一起。如果是一個第三方的artifact,你必須使用它提供的版本號,無論這些版本號看起來多麼奇怪,比如:2.0,2.0.1,1.3.1
我們這邊上傳的如下所示
那麼我們如果上傳成功的話,需要在Android 項目中的build.gradle中引用的話,用下面的形式
dependencies {
api 'com.umeng.analytics:analytics-overseas:7.5.4'
}
- 參數【Packaging】
packaging【可選的,默認爲jar】:
當不定義packaging時,maven會使用默認值jar。
2.2.2 填寫【Select Artifact(s) for Upload】
1、點擊【Select Artifact(s) to Upload】按鈕,選擇需要上傳的jar包。
2、點擊【Add Artifact】按鈕
點擊【Add Artifact】按鈕,自動生成下面的artifacts內容,上面的三個框空白了。
3、點擊【Upload Artifact(s)】按鈕,上傳成功,如下所示
4.上傳之後 點擊【Browse Storage】面板,然後點擊下【Refresh】按鈕刷新下,就可以查看上傳好的jar包
順便將另外的一個jar包也上傳上去,上傳好後,如下所示
三、Maven在線依賴方式
剛剛我們已經將兩個jar包上傳了,現在可以直接在線依賴它們了。
dependencies {
//api fileTree(include: ['*.jar'], dir: 'libs')
api 'com.umeng.analytics:analytics-overseas:7.5.4'
api 'com.umeng.sdk:common-overseas:1.5.4'
}
sync完畢之後,查看【External Libraies】裏面就有剛剛Maven在線依賴引入的兩個jar包
這樣就方便多了!
四、關於上傳AAR包
(ps: 更新2020年4月8日)
今天有同事下載了一些第三方的aar包,如何放在項目本地使用,我立馬建議他將aar包上傳到Maven私服。
4.1 上傳aar
上傳私服如下圖所示
打包方式沒有aar
點擊上傳
上傳完後
4.2 引用上傳到Maven私服的AAR
4.2.1 錯誤使用方式
implementation 'com.youdao.asr:youdaoasr:1.0.0@aar'
implementation 'com.youdao.audio:youdaoaudio:1.0.0@aar'
這樣的寫法 無法下載剛剛上傳的AAR包
4.2.2 正確使用方式
參考博客:https://blog.csdn.net/u011424451/article/details/87378439
該博客的Nexus版本比我的版本新,我的版本暫時不支持這樣的方式,因此 使用
添加結尾 @aar
的方式來引用
在項目中使用如下的代碼,注意後面的@aar
implementation 'com.youdao.asr:youdaoasr:1.0.0@aar'
implementation 'com.youdao.audio:youdaoaudio:1.0.0@aar'
成功下載下來
以前在我之前的博客
【我的Android進階之旅】快速創建和根據不同的版本類型(Dev、Beta、Release)發佈Android 開發庫到Maven私服
上傳的AAR庫 不需要添加結尾 @aar
即可引用,是因爲上傳的腳本里面就寫好了打包方式爲aar
所以以腳本的形式上傳的 直接不需要結尾 @aar
即可引用。
4.2.3 關於添加後綴@aar的作用
博客:
https://stackoverflow.com/questions/30157575/why-should-i-include-a-gradle-dependency-as-aar
翻譯過來:
當您指定@後綴時,您將強制以您指定的格式(可能存在也可能不存在)下載庫。 這很有用,例如 當作者忘記指定庫是.aar和maven(或gradle,不確定)默認情況下將其視爲.jar。 如果指定了@後綴,則不再下載此庫的依賴項,因此您必須手動確保。
compile 'com.android.support:appcompat-v7:22.1.1@aar'
compile 'com.android.support:support-v4:22.1.1@jar'
爲了確保在指定@後綴時下載了庫的完整依賴樹,您必須以以下方式編寫它:
compile ('com.android.support:appcompat-v7:22.1.1@aar') {
transitive = true
}
博客:https://www.cnblogs.com/lkc9/p/10813518.html 描述
一、.aar和.jar之間的區別。
‘.aar’可以包含源代碼和資源,但是’.jar’只能包含源代碼。
二、下載依賴庫時的區別
當您在項目的build.gradle中包含一個帶有後綴@arr的庫時,該庫將下載.aar後綴的庫文件。如果沒有,默認情況下將下載.jar的庫文件。當然,您也可以添加後綴@jar使下載
.jar的庫文件。
implementation 'com.android.support:appcompat-v7:22.1.1@aar'
implementation 'com.android.support:support-v4:22.1.1@jar'
五、參考資料
- https://ouyangpeng.blog.csdn.net/article/details/78804637
- https://ouyangpeng.blog.csdn.net/article/details/56872556
- https://blog.csdn.net/qq_31459039/article/details/81361496
- https://blog.csdn.net/u011424451/article/details/87378439
- https://stackoverflow.com/questions/30157575/why-should-i-include-a-gradle-dependency-as-aar
- https://www.cnblogs.com/lkc9/p/10813518.html
作者:歐陽鵬 歡迎轉載,與人分享是進步的源泉!
轉載請保留原文地址:https://blog.csdn.net/qq446282412/article/details/90482592
☞ 本人QQ: 3024665621
☞ QQ交流羣: 123133153
☞ github.com/ouyangpeng
☞ [email protected]