1. 程式人生 > >Android Studio基礎之依賴管理(五)-學習篇

Android Studio基礎之依賴管理(五)-學習篇

在我們的專案中,或我或少都會用到一起第三方的庫,那麼對它的管理也就成為了專案中的一部分。這裡就介紹下在Android Studio中如何去管理專案中的庫和它們的依賴。

如何新增一個庫

Android Studio中新增一個庫有三種方法

第一種,直接拷貝到libs目錄下

如圖先把ja包拷貝到module中的libs目錄下,然後點選如下圖中所示按鈕(Sync Project with Gradle Files)。完成,很簡單的,這是常用的做法。
拷貝到libs

第二種, 在Project Structure中新增

  1. 開啟Project Structure(File->Project Structure… 或者 ctrl+alt+shift+S),選擇要新增的module, 選擇Dependencies。
    Dependiencies

  2. 點選右邊綠色的“+”號。
    新增

  3. 選擇File dependency, 可以選擇新增該Project下面的庫檔案。選擇Module dependency, 可以選擇Project下的依賴Module.
  4. 點選確定就可以新增。
    確定
    開啟Module下的build.gradle檔案,我們可以看到,這裡新增加了我們新增的庫,當然你也可以直接修改這個檔案。
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1' compile files('libs/universal-image-loader-1.9.4.jar') compile project(':app2') }

另外說一句,module庫中build.gradle的申明為com.android.library

apply plugin: 'com.android.library'

第三種, 使用”Library dependency“方式新增

相信有人注意到了,在Project Structure中點選綠色的“+”號,會出現三種選擇,在前面我介紹了其中兩種,但我把“Library dependency”這個選擇規入了第三種新增方式。原因是這裡我們並不會直接去操作jar包,而是把它交給了Gradle去管理。我們先來看下怎麼去新增,這裡我以Google的gson為例:
1. 開啟在Project Structure->Module->Dependencies->”+”->Library dependency。輸入你要新增的jar包名字,可輸入關鍵字,點選搜尋。
Choose Library Dependency


2. Gradle會去搜索合適的庫,選擇你想到的庫,點選確定。
com.google.code.gson:gson:2.5
3. 點選確定。
確定
來看下Module的build.gradle檔案, 可以看到,這裡的gson並沒有看到libs\之類的路徑,你在libs或者module中也找不到對應的jar檔案。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile files('libs/universal-image-loader-1.9.4.jar')
    compile project(':app2')
    compile 'com.google.code.gson:gson:2.5'
}

那麼這個jar包在哪裡呢?注意專案下面的External Libraries,展開它,原來它跑到這裡來了。選中gson,點選右鍵,選擇Library Properties…,可以看到,原來它的jar包下載到了這裡。我們還可以對它進行管理,附加javadoc或者soure等等。
External Libraries

這不是很方便呢,如果第三方庫有更新的版本了,也可以方便的去替換。那麼還有個問題,這些jar包是從哪裡去下載的呢?
還記得下Project中的build.gradle中的這句話嗎,Android Studio就是從build.gradle裡面定義的Maven倉庫伺服器上下載library的。jcenter 就是一個標準的Android library檔案伺服器,所有通過gradle匯入的jar包都是從http://bintray.com/bintray/jcenter這個倉庫上扒下來的。如果你需要的jar包在這個網站上沒有,那就無法通過gradle的方式來匯入。

allprojects {
    repositories {
        jcenter()
    }
}

除此之外,我們還可以分享自己的Library到jcenter上,還可以自己定義特有的Maven倉庫伺服器,這裡就沒有去研究了。
好了,新增庫到這裡就說完了,至於如何刪除一個庫就很簡單了,你可以在Project Structure中去刪除,也可以在build.gradle中去刪除。這裡就不用多說了。
另外還可以修改依賴的順序,同樣的都可以在Project Structure或者build.gradle中做修改,也沒有啥子多說的。

依賴範圍

在Project Structure->Dependencies中,每一個庫後面都有一個Scrope選項,這有什麼用呢。
Scrope
Dependency scope 是用來限制Dependency的作用範圍的, 影響專案在各個生命週期時匯入的庫的狀態。
compile:預設選項,是對所有的build type以及favlors都會參與編譯並且打包到最終的apk檔案中。
provided:是對所有的build type以及favlors只在編譯時使用,類似eclipse中的external-libs,只參與編譯,不打包到最終apk。
APK:只會打包到apk檔案中,而不參與編譯,所以不能再程式碼中直接呼叫jar中的類或方法,否則在編譯時會報錯。
Test compile:針對單元測試程式碼的編譯編譯以及最終打包測試apk時有效,而對正常的debug或者release apk包不起作用。
Debug compile:針對debug模式的編譯和最終的debug apk打包
Release compile:針對Release 模式的編譯和最終的Release apk打包。