自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Gradle for Android 第三篇( 依賴管理 )

移動(dòng)開發(fā) Android
依賴管理是Gradle最閃耀的地方,最好的情景是,你僅僅只需添加一行代碼在你的build文件,Gradle會(huì)自動(dòng)從遠(yuǎn)程倉庫為你下載相關(guān)的jar包,并且保證你能夠正確使用它們。Gradle甚至可以為你做的更多,包括當(dāng)你在你的工程里添加了多個(gè)相同的依賴,gradle會(huì)為你排除掉相同的jar包。

依賴管理

依賴管理是Gradle最閃耀的地方,最好的情景是,你僅僅只需添加一行代碼在你的build文件,Gradle會(huì)自動(dòng)從遠(yuǎn)程倉庫為你下載相關(guān)的jar包,并且保證你能夠正確使用它們。Gradle甚至可以為你做的更多,包括當(dāng)你在你的工程里添加了多個(gè)相同的依賴,gradle會(huì)為你排除掉相同的jar包。在這一章我們將學(xué)習(xí)以下內(nèi)容:

  • 倉庫
  • 本地依賴
  • 詳解依賴這一概念

倉庫

當(dāng)我們討論依賴的時(shí)候,我們通常說的是遠(yuǎn)程倉庫,就像那些依賴庫專門用來提供給其他開發(fā)者使用的依賴庫。手動(dòng)管理依賴將會(huì)為你帶來很大麻煩。你必須定位到該依賴文件位置,然后下載jar文件,復(fù)制該文件到你的項(xiàng)目,然后引用它們。通常這些jar文件還沒有具體的版本號(hào),所以你還必須去記憶它們的版本號(hào),這樣當(dāng)需要更新的時(shí)候,你才會(huì)知道需要替換成哪個(gè)版本。你同時(shí)必須將該依賴包放在svn或者Git上,這樣你的其他同事才可以不用手動(dòng)去下載這些依賴jar。

使用遠(yuǎn)程倉庫可以解決這些問題,一個(gè)倉庫可以被視為一些文件的集合體。Gradle不會(huì)默認(rèn)為你的項(xiàng)目添加任何倉庫。所以你需要把它們添加到repositories方法體內(nèi)。如果是使用的是Android studio,那么工具已經(jīng)為你準(zhǔn)備好了這一切:

  1. repositories { 
  2.     jcenter() 

Gradle支持三種不同的倉庫,分別是:Maven和Ivy以及文件夾。依賴包會(huì)在你執(zhí)行build構(gòu)建的時(shí)候從這些遠(yuǎn)程倉庫下載,當(dāng)然Gradle會(huì)為你在本地保留緩存,所以一個(gè)特定版本的依賴包只需要下載一次。

一個(gè)依賴需要定義三個(gè)元素:group,name和version。group意味著創(chuàng)建該library的組織名,通常這會(huì)是包名,name是該library的唯一標(biāo)示。version是該library的版本號(hào),我們來看看如何申明依賴:

  1. dependencies { 
  2.        compile 'com.google.code.gson:gson:2.3' 
  3.        compile 'com.squareup.retrofit:retrofit:1.9.0' 

上述的代碼是基于groovy語法的,所以其完整的表述應(yīng)該是這樣的:

  1. dependencies { 
  2.       compile group'com.google.code.gson'name'gson', version:'2.3' 
  3.       compile group'com.squareup.retrofit'name'retrofit' 
  4.            version: '1.9.0' 
  5.      }  

為你的倉庫預(yù)定義

為了方便,Gradle會(huì)默認(rèn)預(yù)定義三個(gè)maven倉庫:Jcenter和mavenCentral以及本地maven倉庫。你可以同時(shí)申明它們:

  1. repositories { 
  2.        mavenCentral() 
  3.        jcenter() 
  4.        mavenLocal() 
  5.    }  

Maven和Jcenter倉庫是很出名的兩大倉庫。我們沒必要同時(shí)使用他們,在這里我建議你們使用jcenter,jcenter是maven中心庫的一個(gè)分支,這樣你可以任意去切換這兩個(gè)倉庫。當(dāng)然jcenter也支持了https,而maven倉庫并沒有。

本地maven庫是你曾使用過的所有依賴包的集合,當(dāng)然你也可以添加自己的依賴包。默認(rèn)情況下,你可以在你的home文件下找到.m2的文件夾。除了這些倉庫外,你還可以使用其他的公有的甚至是私有倉庫。

遠(yuǎn)程倉庫

有些組織,創(chuàng)建了一些有意思的插件或者library,他們更愿意把這些放在自己的maven庫,而不是maven中心庫或jcenter。那么當(dāng)你需要是要這些倉庫的時(shí)候,你只需要在maven方法中加入url地址就好:

  1. repositories { 
  2.        maven { 
  3.            url "http://repo.acmecorp.com/maven2" 
  4.        } 

同樣的,Ivy倉庫也可以這么做。Apache Ivy在ant世界里是一個(gè)很出名的依賴管理工具。如果你的公司有自己的倉庫,如果他們需要權(quán)限才能訪問,你可以這么編寫:

  1. repositories { 
  2.        maven { 
  3.            url "http://repo.acmecorp.com/maven2" 
  4.            credentials { 
  5.                username 'user' 
  6.                password 'secretpassword' 
  7.            } 
  8.         }  
  9.    } 

注意:這不是一個(gè)好主意,最好的方式是把這些驗(yàn)證放在Gradle properties文件里,這些我們已經(jīng)介紹過在第二章。

本地依賴

可能有些情況,你需要手動(dòng)下載jar包,或者你想創(chuàng)建自己的library,這樣你就可以復(fù)用在不同的項(xiàng)目,而不必將該library publish到公有或者私有庫。在上述情況下,可能你不需要網(wǎng)絡(luò)資源,接下來我將介紹如何是使用這些jar依賴,以及如何導(dǎo)入so包,如何為你的項(xiàng)目添加依賴項(xiàng)目。

文件依賴

如果你想為你的工程添加jar文件作為依賴,你可以這樣:

  1. dependencies { 
  2.        compile files('libs/domoarigato.jar'

如果你這么做,那會(huì)很愚蠢,因?yàn)楫?dāng)你有很多這樣的jar包時(shí),你可以改寫為:

  1. dependencies { 
  2.        compile fileTree('libs'
  3.  }  

默認(rèn)情況下,新建的Android項(xiàng)目會(huì)有一個(gè)lib文件夾,并且會(huì)在依賴中這么定義(即添加所有在libs文件夾中的jar):

  1. dependencies { 
  2.        compile fileTree(dir: 'libs', include: ['*.jar']) 

這也意味著,在任何一個(gè)Android項(xiàng)目中,你都可以把一個(gè)jar文件放在到libs文件夾下,其會(huì)自動(dòng)的將其添加到編譯路徑以及最后的APK文件。

native包(so包)

用c或者c++寫的library會(huì)被叫做so包,Android插件默認(rèn)情況下支持native包,你需要把.so文件放在對(duì)應(yīng)的文件夾中:

  1. app 
  2.    ├── AndroidManifest.xml 
  3.    └── jniLibs 
  4.        ├── armeabi 
  5.        │   └── nativelib.so 
  6.        ├── armeabi-v7a 
  7.        │   └── nativelib.so 
  8.        ├── mips 
  9.        │   └── nativelib.so 
  10.        └── x86 
  11.            └── nativelib.so     

aar文件

如果你想分享一個(gè)library,該依賴包使用了Android api,或者包含了Android 資源文件,那么aar文件適合你。依賴庫和應(yīng)用工程是一樣的,你可以使用相同的tasks來構(gòu)建和測(cè)試你的依賴工程,當(dāng)然他們也可以有不同的構(gòu)建版本。應(yīng)用工程和依賴工程的區(qū)別在于輸出文件,應(yīng)用工程會(huì)生成APK文件,并且其可以安裝在Android設(shè)備上,而依賴工程會(huì)生成.aar文件。該文件可以被Android應(yīng)用工程當(dāng)做依賴來使用。

創(chuàng)建和使用依賴工程模塊

不同的是,你需要加不同的插件:

  1. apply plugin: 'com.android.library'  

我們有兩種方式去使用一個(gè)依賴工程。一個(gè)就是在你的工程里面,直接將其作為一個(gè)模塊,另外一個(gè)就是創(chuàng)建一個(gè)aar文件,這樣其他的應(yīng)用也就可以復(fù)用了。

如果你把其作為模塊,那你需要在settings.gradle文件中添加其為模塊:

  1. include ':app'':library' 

在這里,我們就把它叫做library吧,如果你想使用該模塊,你需要在你的依賴?yán)锩嫣砑铀?,就像這樣:

  1. dependencies { 
  2.  
  3.   compile project(':library'
  4.   

使用aar文件

如果你想復(fù)用你的library,那么你就可以創(chuàng)建一個(gè)aar文件,并將其作為你的工程依賴。當(dāng)你構(gòu)建你的library項(xiàng)目,aar文件將會(huì)在 build/output/aar/下生成。把該文件作為你的依賴包,你需要?jiǎng)?chuàng)建一個(gè)文件夾來放置它,我們就叫它aars文件夾吧,然后把它拷貝到該文件夾里面,然后添加該文件夾作為依賴庫:

  1. repositories { 
  2.     flatDir { 
  3.         dirs 'aars'  
  4.     } 

這樣你就可以把該文件夾下的所有aar文件作為依賴,同時(shí)你可以這么干:

  1. dependencies { 
  2.  
  3.   compile(name:'libraryname', ext:'aar'
  4.  

這個(gè)會(huì)告訴Gradle,在aars文件夾下,添加一個(gè)叫做libraryname的文件,且其后綴是aar的作為依賴。

依賴的概念

配置

有些時(shí)候,你可能需要和sdk協(xié)調(diào)工作。為了能順利編譯你的代碼,你需要添加SDK到你的編譯環(huán)境。你不需要將sdk包含在你的APK中,因?yàn)樗缫呀?jīng)存在于設(shè)備中,所以配置來啦,我們會(huì)有5個(gè)不同的配置:

  • compile
  • apk
  • provided
  • testCompile
  • androidTestCompile

compile是默認(rèn)的那個(gè),其含義是包含所有的依賴包,即在APK里,compile的依賴會(huì)存在。

apk的意思是apk中存在,但是不會(huì)加入編譯中,這個(gè)貌似用的比較少。

provided的意思是提供編譯支持,但是不會(huì)寫入apk。

testCompile和androidTestCompile會(huì)添加額外的library支持針對(duì)測(cè)試。

這些配置將會(huì)被用在測(cè)試相關(guān)的tasks中,這會(huì)對(duì)添加測(cè)試框架例如JUnit或者Espresso非常有用,因?yàn)槟阒皇窍胱屵@些框架們能夠出現(xiàn)在測(cè)試apk中,而不是生產(chǎn)apk中。

除了這些特定的配置外,Android插件還為每個(gè)構(gòu)建變體提供了配置,這讓debugCompile或者releaseProvided等配置成為可能。如果你想針對(duì)你的debug版本添加一個(gè)logging框架,這將很有用。這些內(nèi)容的詳細(xì)介紹,我會(huì)在下一個(gè)博客里詳細(xì)介紹。

動(dòng)態(tài)版本

在一些情形中,你可能想使用最新的依賴包在構(gòu)建你的app或者library的時(shí)候。實(shí)現(xiàn)他的最好方式是使用動(dòng)態(tài)版本。我現(xiàn)在給你們展示幾種不同的動(dòng)態(tài)控制版本方式:

  1. dependencies { 
  2.        compile 'com.android.support:support-v4:22.2.+' 
  3.        compile 'com.android.support:appcompat-v7:22.2+' 
  4.        compile 'com.android.support:recyclerview-v7:+' 

第一行,我們告訴gradle,得到最新的生產(chǎn)版本。第二行,我們告訴gradle,我們想得到最新的minor版本,并且其最小的版本號(hào)是2. 第三行,我們告訴gradle,得到最新的library。

你應(yīng)該小心去使用動(dòng)態(tài)版本,如果當(dāng)你允許gradle去挑選最新版本,可能導(dǎo)致挑選的依賴版本并不是穩(wěn)定版,這將會(huì)對(duì)構(gòu)建產(chǎn)生很多問題,更糟糕的是你可能在你的服務(wù)器和私人pc上得到不同的依賴版本,這直接導(dǎo)致你的應(yīng)用不同步。

如果你在你的build.gradle中使用了動(dòng)態(tài)版本,Android studio將會(huì)警告你關(guān)于動(dòng)態(tài)版本的潛在問題,就像你下面看到的這樣: 

 

 

Android studio UI操作依賴庫

在使用Android studio中,最簡(jiǎn)單的添加新依賴包的方法是使用工程結(jié)構(gòu)彈框。從文件按鈕中打開界面,導(dǎo)航到依賴包導(dǎo)航欄,然后你就可以看到你當(dāng)前的依賴包了: 

 

 

 

當(dāng)你想添加新的依賴包的時(shí)候,可以點(diǎn)擊綠色的小按鈕,你可以添加其他模塊,文件,甚至是上網(wǎng)搜索。 

 

 

 

使用Android studio的界面讓你能夠很簡(jiǎn)單的瀏覽你項(xiàng)目中的所有依賴,并且添加新的依賴包。你不必在build.gradle中手動(dòng)的添加代碼了,并且你可以直接搜索JCenter庫中的依賴資源。

總結(jié)

在這一章里,我們了解了多種方式添加依賴,我們學(xué)習(xí)了什么是倉庫,以及如何使用他們,同時(shí)學(xué)習(xí)了如何在不使用倉庫的情況下使用jar文件。

你現(xiàn)在知道了依賴包的屬性配置,動(dòng)態(tài)版本控制等。

我們也談到了關(guān)于在多個(gè)環(huán)境下構(gòu)建app變種,在下一章,我們將會(huì)學(xué)習(xí)到什么是構(gòu)建變種,以及為什么他們很重要,構(gòu)建變種將會(huì)使得開發(fā)測(cè)試以及分發(fā)app變得更加容易。理解變種的工作原理可以加快你的開發(fā)和分發(fā)效率。

責(zé)任編輯:龐桂玉 來源: Android開發(fā)中文站
相關(guān)推薦

2014-03-28 14:00:23

Android開源項(xiàng)目優(yōu)秀項(xiàng)目

2011-06-22 13:26:37

Oracle

2022-08-03 10:26:34

網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)TCP

2024-04-03 12:57:29

2017-04-10 14:46:29

AndroidGradleBuild.gradl

2017-04-10 13:43:34

AndroidGradleAS

2017-04-11 09:07:55

AndroidGradle構(gòu)建變體

2017-02-27 08:37:01

2023-06-27 07:44:53

xxl-job分布式任務(wù)調(diào)度平臺(tái)

2016-02-24 10:45:00

2017-04-13 14:55:07

AndroidGradle多模塊構(gòu)建

2012-02-16 09:56:29

2012-02-13 12:47:41

Android 4.0Launcher源碼分析

2021-06-29 08:41:15

架構(gòu)Tomcat 連接器

2019-07-16 16:26:16

Ansible桌面設(shè)置Linux

2012-04-25 16:46:25

ASO圖片視頻

2020-04-09 11:00:38

Python編程語言代碼

2018-09-30 15:18:29

2011-08-22 08:53:17

Android啟動(dòng)過程李洋

2018-06-01 15:41:21

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)