在開發中用第三方庫是很常見的事,如何在AndroidStudio下管理這些依賴呢?這就是這篇文章的目的。
目錄
- Maven/Ivy倉庫依賴
- Module依賴
- aar文件依賴
- jar文件依賴
- 例子完整代碼
一、Maven/Ivy倉庫依賴
這中依賴在AndroidStudio中應用最廣泛,也是相比於Eclipse+ADT開發來說的閃光點之一。先給出一個例子:
dependencies {
//省略了一下默認配置
compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.jakewharton:butterknife:7.0.1' //其他依賴項 }
上面就是一個Maven倉庫依賴的例子,項目依賴於兼容包和jakewharton大大的‘黃油刀’,為了突出重點省略了其他類型的依賴項(后面會講到)。
1)配置倉庫
(這段這是基礎概念,可以選擇略過)在配置Maven依賴之前我們得明白一下什么是倉庫(repositories)和如何配置倉庫,那什么是倉庫呢?倉庫說白了就是存放代碼的地方,它能很好的進行版本控制和訪問。應用廣泛的倉庫類型有兩種:Ivy和Maven,Ivy在以Ant為構建的系統中應用比較廣;相比於Ivy,Maven倉庫就比較出名了。現在為廣大程序員所知的Maven倉庫有Jcenter和Maven Central,它們都是Maven倉庫的實現。而這兩種類型的倉庫在以Gradle為構建工具的AndroidStudio中都能使用,且使用很簡單,只需要在相應的配置文件中添加幾行代碼就行。
a.配置Maven倉庫
這AndroidStudio下新建的項目,在項目根目錄下的build.gradle里又這樣一段代碼:
allprojects {
repositories {
jcenter()
}
}
這指定了所有module(包括appilcation module和library module,關於module的概念后面會將到)的默認倉庫是Jcenter。這就有疑問了,同樣是maven倉庫為什么AndroidStudio默認指定不是Maven Central呢?Jcenter和Maven Central都是maven庫沒錯,但是Jcenter是Maven Central的超集,也就是說你能在Maven Central中找到的依賴在Jcenter中也能找到,反之則不然。如果你非要用Maven Central也行,只要把 jcenter() 換成 mavenCentral()就行,但不建議在項目的build.gradle中修改,而是去你的module中修改,這樣就能將影響范圍控制到單個module。
b.導入依賴
配置好倉庫后就可以導入依賴了,同樣建議到module的build.gradle文件中導入需要的依賴庫,而不是在項目的build.gradle中導入。講要導入的倉庫寫進dependencies代碼塊內就行,類似於開篇的例子。 說說倉庫是如何區分不同的庫已經同一庫的不同版本的,主要通過三個元素來區分:組別:庫名:版本號
- 組名:一般表明了庫的開發者,常用倒置的域名來表示,如com.jakewharton
- 庫名:說明了這個庫的名稱,如butterknife
- 版本號:庫的版本號
這三者用:分隔,一起組成了庫的唯一標識,所以我們導入庫依賴的格式就是: compile '組名:庫名:版本號' 起始不一定得是compile,也可能是provided、apk、testCompile,androidTestCompile,它們說明了把庫加到那部分編譯中去,具體是什么,自己google。
#### c.動態版本導入 什么叫動態版本導入呢?就是讓Gradle去給你下載最新的庫,而不是每次都是自己修改版本號。如下
dependencies {
compile 'com.android.support:support-v4:22.2.+' compile 'com.android.support:appcompat-v7:22.2+' compile 'com.android.support:recyclerview-v7:+' }
這里面涉及到版本號的命名規則:主版本號.次版本號.debug版本號,不同版本號什么意思也自己google。解釋一下上面三個依賴的意思:
- 要求是最新的debug版本
- 要求次版本至少大於2
- 最新的庫
2)其他Maven/Ivy倉庫的配置
非Jcenter和Maven Central倉庫怎么maven倉庫怎么配置?Ivy怎么配置?如下:
repositories {
maven {
url "http://baidu.com"//這里填寫倉庫地址 credentials { //這里填認證信息 username 'user' password 'secretpassword' } } }
Ivy配置類似,只要把maven改成ivy就行了,再次申明為了將影響范圍保持到最小,要將這項配置寫到module的build.gradle文件中。
二、Module依賴
在AndroidStudio上,一個應用是由一個或多個Module組成,其中一個application module,零個或多個library module。application module最后可以打包成apk,library module就是每打包的庫,它最后可以打包成jar或者aar(兩者區別自己google)。這一節我們來講講如何導入自己或者別人寫的module,下一節講如何導入打包好的aar。 完成module依賴只需要完成三步:
- 拷貝庫到項目的根目錄下,和app module同級
- 在項目的setting,gradle中加入module名。如下
include ':app', ':volley'
經過這個步驟,就就可以在項目導航的Android視圖下看到導入的項目了
其中app是Android生成的application module,volley是我導入的library module。但這只是告訴了Gradle去管理者兩個module,並不能再app中應用volley中的API,需要完成下面一個步驟才能使用。
- 添加dependencies聲明
dependencies {
//為了突出重點,省略其他
compile project(':volley') }
這樣一來導入module就成功了。 最后再說一下,如何在Android Studio中新建application module 和 library。File->new->new module 在彈出的對話框中選擇module類型,module的類型起始是根據它的build.gradle中的插件類型決定的。 application module:
apply plugin: 'com.android.application'
library module:
apply plugin: 'com.android.library'
三、arr文件依賴
arr文件是打包好的library module,在說明如何將aar文件引入到項目中,先說說如何打包module生成aar文件,Build->Make Module (module name)等Gradle構件完成后,會在下圖所示的路徑中生成aar文件
開始講如何將aar文件加入到項目中,同樣需要三個步驟:
- 拷貝aar文件到module目錄下,可以拷貝到libs文件中,或者任何新建的文件夾中
我這里新建了一個叫aars的文件夾,然后把之前生成的aar文件放了進去 - 添加文件倉庫 在module的build.gradle中添加代碼塊
repositories{
flatDir{
dirs 'aars' } }
- 添加依賴
dependencies {
//忽略其他
compile(name:'volley-debug', ext:'aar') }
至此添加aar文件依賴完成。
四、jar文件依賴
Android Studo文件依賴很簡單,把jar包往libs文件里一放就ok了。這得益於AndroidStudio的默認配置:
compile fileTree(dir: 'libs', include: ['*.jar'])
這句話就是將libs目錄下所有的jar包一次全倒過來。如果換成compile file(jar文件路徑)可以一次只導入一個jar包。