Gradle for Android系列之四 依賴包管理
在Gradle for Android系列之二 build.gradle檔案 中已經初步介紹過依賴包。為什麼我們這裡還要在專門介紹呢,因為我們在專案中往往需要用到各種依賴方式,對我們來說很重要。掌握Gradle依賴包管理,可以讓我們事半功倍。
接下來我們就直接開始介紹了
倉庫
倉庫是平時引用第三方庫時使用最多的方式,非常的方便,往往都是通過一句話compile來引用。倉庫又可以分為遠端倉庫和本地倉庫。
遠端倉庫又包括中央倉庫JCenter,私服,Jboss倉庫和Java.net倉庫。我們開發Android時用的最多的應該就是JCenter了。我們個人也是可以把自己的庫釋出到JCenter,這樣別人也可以一句話引用你的庫了,是不是很爽?具體過程可以參考我的這篇部落格手把手教你在JCenter釋出開源庫 。
那麼遠端倉庫幫我們做了什麼呢,為什麼需要它?這是因為手動管理依賴是一個非常麻煩的事情。如果是手動管理依賴,那麼首先你必須先定位到該依賴檔案位置,然後下載jar檔案,複製該檔案到你的專案,然後引用它們。通常這些jar檔案沒有具體的版本號,所以還必須去搞清楚它們的版本號,這樣當需要更新的時候,我們才會知道需要替換成哪個版本。同時還必須將該依賴包放在svn或者git上,這樣其他同事才可以不用手動去下載這些依賴jar。這簡直是噩夢。使用遠端倉庫可以解決這些問題,一個倉庫可以被視為很多依賴檔案的集合。我們可以通過Gradle輕鬆的獲取到這些依賴。
那麼Gradle怎麼獲取這些依賴呢,首先Gradle預設不會為我們的專案新增任何倉庫。所以我們需要把它們新增到repositories方法體內:
buildscript {
repositories {
jcenter()
}
...
}
就是這麼的簡單,配置好了之後,依賴包會在執行build構建的時候從這些遠端倉庫下載,Gradle會為我們在本地快取,所以一個版本的依賴包只需要下載一次。釋出到JCenter倉庫的依賴一般需要定義三個元素:group,name和version。group意味著建立該library的組織名,通常這會是包名,name是該依賴的唯一標示。version是該依賴的版本號,而我們在引用時也是通過這三個元素來定位依賴包的:
compile 'group:name:version'
就像這樣:
compile 'com.android.support:appcompat-v7:25.1.0'
group:com.android.support
name:appcompat-v7
version:25.1.0
以上就是Android中經常使用的引用JCenter倉庫中依賴的方法。當然遠端倉庫遠遠不僅僅指這些。如果我們公司或者自己不想把依賴放在JCenter而是我們制定的伺服器中,應該怎麼引用呢?
很簡單,只需要在maven方法中加入url地址就好::
repositories {
maven {
url "http://xxx.xxx.xxx"
}
}
本地maven庫包含我們曾使用過的所有依賴包,當然我們也可以新增自己的依賴。預設情況下,可以在的home檔案下找到.m2的資料夾。除了這些倉庫外,還可以使用其他的公有的甚至是私有倉庫。
本地依賴
如果我們已經在網上下載好了jar,aar,so等依賴,不再需要聯網下載了,我們可以通過本地依賴方式,在專案中引用。在 Gradle for Android系列之二 build.gradle檔案 中我們已經介紹過jar,file,project依賴引入方式:
1.compile fileTree(dir, ‘libs’ ,include : ‘*.jar’) 依賴本地libs目錄下的所有jar檔案
2.compile file(‘libs/xxx.jar’) 依賴當個libs目錄(可以自己指定路徑,不一定要是libs)下的單個jar檔案。
3. compile project(:xx:xx) 依賴某個工程。
那麼aar檔案應該怎麼引用呢?其實也不難,將你要使用的aar檔案放到指定的目錄,我們可以命名為aars,接著在repositories中宣告:
repositories {
flatDir {
dirs 'aars'
}
}
這樣就可以把該aars資料夾下的所有aar檔案作為依賴,同時,我們還可以引用名字叫做libraryname的aar檔案:
dependencies {
compile(name:'libraryname', ext:'aar')
}
so檔案的引入,稍微要複雜一點,一般情況下,我們需要先將so包放在app/src/main/JniLibs目錄下,然後在需要引入so的模組對應的build.gradle檔案的android模組中加入如下程式碼:
sourceSets {
main {
jniLibs.srcDirs = ['src/main/JniLibs']
}
}
這樣就可以通過jni呼叫到so中的內容。
使用依賴模組
我們有兩種方式去引用一個依賴工程。一個就是通過在工程中直接引用,另外一個就是建立一個aar檔案,通過aar的方式引用。如果是通過直接引用的話,並且還想把其當著一個module就像這樣:
首先需要在作為依賴的module的build.gradle檔案中將外掛引用改為(如圖中的紅框所示):
apply plugin: 'com.android.library'
接著在root目錄下的setting.gradle檔案中新增wheelview:
include ':app', ':wheelview'
然後在app的build.gradle檔案的依賴中新增
dependencies {
compile project(':wheelview')
}
這樣就可以引用成功了。
在一些情形中,我們可能想使用最新的依賴包,我們可以使用動態版本來解決這個問題。下面是幾種不同的動態控制版本方式:
dependencies {
compile 'com.android.support:support-v4:23.0.+'
compile 'com.android.support:appcompat-v7:23.2+'
compile 'com.android.support:recyclerview-v7:+'
}
第一種方式,使用最新的生產版本。
第二種方式,使用最新的minor版本,並且其最小的版本號是2.
第三種方式,使用最新的Library。
在使用動態版本的時候要注意,有可能使用的版本是最新版,但不一定是穩定版,也就是可能是α或者β版。因為不確定版本,那麼在不同的主機上可能使用的版本不同步,這一風險還是需要考慮的。所以,如果在build.gradle中使用了動態版本,Android Studio將會警告,避免使用動態版本:
除了在gradle檔案中新增依賴,我們也可以藉助Android Studio中視覺化操作:
在Project Structure中可以設定個Modules的依賴。很方便,設定完成之後,Android Studio會自動的在你的gradle檔案中新增相應的內容。
依賴包管理差不多就是這些內容了。下一篇準備分析一下多渠道打包。
相關文章
- Android Gradle 依賴配置:implementation & apiAndroidGradleAPI
- Gradle For Android (一) 基礎定義與依賴管理篇GradleAndroid
- Android -Gradle依賴匯入及相關知識AndroidGradle
- Gradle系列之Android Gradle基礎配置GradleAndroid
- Gradle 使用技巧(四) - 如何定位和解決依賴衝突Gradle
- idea gradle 專案依賴IdeaGradle
- Maven依賴管理之BOMMaven
- npm如何管理依賴包的版本NPM
- 解決Android studio中gradle依賴下載太慢的問題AndroidGradle
- 使用Gradle檢視Android專案中庫的依賴關係GradleAndroid
- Spring原始碼系列:依賴注入(四)-總結Spring原始碼依賴注入
- Gradle系列(四) Gradle外掛Gradle
- 依賴管理和依賴範圍
- 寫給 Android 開發者的 Gradle 系列(四)plugin 實戰包體積瘦身AndroidGradlePlugin
- 【譯】Android Gradle 外掛 4.0.0 中 Feature-on-Feature 的依賴關係AndroidGradle
- 四、yum獲取安裝的軟體包及依賴包
- Android從零擼美團(一) – 統一管理 Gradle 依賴 提取到單獨檔案中AndroidGradle
- Android從零擼美團(一) - 統一管理 Gradle 依賴 提取到單獨檔案中AndroidGradle
- 一文徹底搞清 Gradle 依賴Gradle
- 軟體包管理-rpm命令管理-包命名與依賴性
- 使用CocoaPods來做iOS程式的包依賴管理iOS
- android引入依賴,合集Android
- Maven依賴管理Maven
- Maven 依賴管理Maven
- - Maven 依賴管理Maven
- Maven依賴管理:控制依賴的傳遞Maven
- 依賴注入系列教程依賴注入
- 依賴引入 | Android依賴引入史上最全攻略Android
- Gradle根據引數配置不同的依賴Gradle
- Gradle排除依賴模組的某個類Gradle
- Gradle系列之Gradle外掛Gradle
- Gradle系列(三) Gradle配置構建和渠道包Gradle
- PHP依賴管理ComposerPHP
- govendor依賴包管理Go
- 用例依賴管理
- Gradle入門系列(四)——初識Gradle TaskGradle
- 【spring原始碼系列】之【Bean的迴圈依賴】Spring原始碼Bean
- 入門系列-依賴注入依賴注入
- Spring系列.依賴注入配置Spring依賴注入