Android Studio基礎之依賴管理(五)-學習篇
在我們的專案中,或我或少都會用到一起第三方的庫,那麼對它的管理也就成為了專案中的一部分。這裡就介紹下在Android Studio中如何去管理專案中的庫和它們的依賴。
如何新增一個庫
Android Studio中新增一個庫有三種方法
第一種,直接拷貝到libs目錄下
如圖先把ja包拷貝到module中的libs目錄下,然後點選如下圖中所示按鈕(Sync Project with Gradle Files)。完成,很簡單的,這是常用的做法。
第二種, 在Project Structure中新增
開啟Project Structure(File->Project Structure… 或者 ctrl+alt+shift+S),選擇要新增的module, 選擇Dependencies。
點選右邊綠色的“+”號。
- 選擇File dependency, 可以選擇新增該Project下面的庫檔案。選擇Module dependency, 可以選擇Project下的依賴Module.
- 點選確定就可以新增。
開啟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包名字,可輸入關鍵字,點選搜尋。
2. Gradle會去搜索合適的庫,選擇你想到的庫,點選確定。
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等等。
這不是很方便呢,如果第三方庫有更新的版本了,也可以方便的去替換。那麼還有個問題,這些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選項,這有什麼用呢。
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打包。