日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
GradleforAndroid第五篇(多模塊構(gòu)建)

Android studio不僅允許你為你的app和依賴庫創(chuàng)建模塊,同時(shí)也可為Android wear,Android TV,Google App Engine等創(chuàng)建模塊,而這些單獨(dú)的模塊又可以在一個(gè)單獨(dú)的項(xiàng)目中使用。舉個(gè)栗子,在你的app開發(fā)后期階段,你可能需要用到Google Clound或者Android Wear。這種情況下,你可以在你的工程下?lián)碛腥齻€(gè)模塊:分別是app,google cloud,Android Wear整合。了解在一個(gè)工程下的多模塊構(gòu)建將會(huì)加速你的開發(fā)周期。

在這一章,我們將學(xué)習(xí)到多模塊的構(gòu)建,并且展示一些實(shí)際且有用的栗子:

  • 多模塊構(gòu)建的結(jié)構(gòu)
  • 為你的項(xiàng)目添加模塊
  • 建議

多模塊構(gòu)建的結(jié)構(gòu)

通常情況下,一個(gè)工程包含多模塊,這些模塊會(huì)在一個(gè)父目錄文件夾下。為了告訴Gradle,該項(xiàng)目的結(jié)構(gòu)以及哪一個(gè)子文件夾包含模塊,你需要提供一個(gè)settings.gradle文件。每個(gè)模塊可以提供其獨(dú)立的build.gradle文件。我們已經(jīng)學(xué)習(xí)了關(guān)于setting.gradle和build.gradle如何正常工作,現(xiàn)在我們只需要學(xué)習(xí)如何使用它們。

這是多模塊項(xiàng)目的結(jié)構(gòu)圖:

 
 
 
 
  1. project 
  2.   ├─── setting.gradle 
  3.   ├─── build.gradle 
  4.   ├─── app 
  5.   │    └─── build.gradle 
  6.   └─── library 
  7.        └─── build.gradle   

這是最簡單最直接的方式來創(chuàng)建你的多模塊項(xiàng)目了。setting.gradle文件申明了該項(xiàng)目下的所有模塊,它應(yīng)該是這樣:

 
 
 
 
  1. include ':app', ':library' 

這保證了app和library模塊都會(huì)包含在構(gòu)建配置中。你需要做的僅僅只是為你的模塊添加子文件夾。

為了在你的app模塊中添加library模塊做為其依賴包,你需要在app的build.gradle文件中添加以下內(nèi)容:

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

為了給app添加一個(gè)模塊作為依賴,你需要使用project()方法,該方法的參數(shù)為模塊路徑。

如果在你的模塊中還包含了子模塊,gradle可以滿足你得要求。舉個(gè)栗子,你可以把你的目錄結(jié)構(gòu)定義為這樣:

 
 
 
 
  1. project 
  2. ├─── setting.gradle 
  3. ├─── build.grade 
  4. ├─── app 
  5. │    └─── build.gradle 
  6. └─── libraries 
  7.      ├─── library1 
  8.      │    └─── build.gradle 
  9.      └─── library2 
  10.           └─── build.gradle     

該app模塊依然位于根目錄,但是現(xiàn)在項(xiàng)目有2個(gè)不同的依賴包。這些依賴模塊不位于項(xiàng)目的根目錄,而是在特定的依賴文件夾內(nèi)。根據(jù)這一結(jié)構(gòu),你需要在settings.xml中這么定義:

 
 
 
 
  1. include ':app', ':libraries:library1', ':libraries:library2' 

你會(huì)注意到在子目錄下申明模塊也非常的容易。所有的路徑都是圍繞著根目錄,即當(dāng)你添加一個(gè)位于子文件夾下的模塊作為另外一個(gè)模塊的依賴包得實(shí)惠,你應(yīng)該將路徑定為根目錄。這意味著如果在上例中app模塊想要依賴library1,build.gradle文件需要這么申明:

 
 
 
 
  1. dependencies { 
  2.  
  3.     compile project(':libraries:library1') 
  4.  
  5. }  

如果你在子目錄下申明了依賴,所有的路徑都應(yīng)該與根目錄相關(guān)。這是因?yàn)間radle是根據(jù)你的項(xiàng)目的根目錄來定義你的依賴包的。

構(gòu)建生命周期

理解了構(gòu)建過程讓你理解多模塊的構(gòu)建變得容易。我們很早前談過關(guān)于構(gòu)建的生命周期。所以現(xiàn)在你應(yīng)該知道其基本的過程,但是一些很重要的細(xì)節(jié)可能你并不是很清楚。

在***步驟中,即初始化階段,gradle會(huì)尋找到settings.grade文件。如果該文件不存在,那么gradle就會(huì)假定你只有一個(gè)單獨(dú)的構(gòu)建模塊。如果你有多個(gè)模塊,settings.gradle文件定義了這些模塊的位置。如果這些子目錄包含了其自己的build.gradle文件,gradle將會(huì)運(yùn)行它們,并且將他們合并到構(gòu)建任務(wù)中。這就解釋了為什么你需要申明在一個(gè)模塊中申明的依賴是相對(duì)于根目錄。

一旦你理解了構(gòu)建任務(wù)是如何將所有的模塊聚合在一起的時(shí)候,那關(guān)于幾種不同的構(gòu)建多模塊策略就會(huì)變得簡單易懂。你可以配置所有的模塊在根目錄下的build.gradle。這讓你能夠簡單的瀏覽到整個(gè)項(xiàng)目的配置,但是這將會(huì)變得一團(tuán)亂麻,特別是當(dāng)你的模塊需要不同的插件的時(shí)候。另外一種方式是將每個(gè)模塊的配置分隔開,這一策略保證了每個(gè)模塊之間的互不干擾。這也讓你跟蹤構(gòu)建的改變變得容易,因?yàn)槟悴恍枰赋瞿膫€(gè)改變導(dǎo)致了哪個(gè)模塊出現(xiàn)錯(cuò)誤等。

gradle的***策略是混合。你可以在根目錄下定義一個(gè)build文件去定義所有模塊相同的熟悉,然后在每個(gè)模塊中的build文件去配置只屬于該模塊的參數(shù)。Android studio遵循了該原則,其創(chuàng)建了一個(gè)build.gradle文件在根目錄,然后再每個(gè)模塊文件夾下創(chuàng)建了另外一個(gè)build文件。

模塊tasks

當(dāng)你在你的項(xiàng)目中有多個(gè)模塊的時(shí)候,你需要在運(yùn)行任務(wù)之前想一想。當(dāng)你在命令行界面運(yùn)行一個(gè)task的時(shí)候,gradle將會(huì)找到哪個(gè)模塊將會(huì)執(zhí)行這個(gè)任務(wù)。舉個(gè)栗子,當(dāng)你有個(gè)mobile app模塊和一個(gè)Android Wear模塊,你運(yùn)行了gradlew assembleDebug任務(wù)。當(dāng)你改變其中一個(gè)模塊的文件夾位置,gradle將只會(huì)運(yùn)行哪個(gè)特殊的模塊,縱使你使用了gradle wrapper在根目錄。舉個(gè)栗子,當(dāng)你運(yùn)行../gradlew assembleDebug在Android wear模塊的目錄下,其只會(huì)構(gòu)建Android wear模塊。

切換不同的文件夾去執(zhí)行不同的任務(wù)會(huì)讓人很不爽,幸運(yùn)的是,我們有其他的辦法。你可以準(zhǔn)備一個(gè)特別的task來執(zhí)行你的模塊。舉個(gè)栗子,為了只構(gòu)建Android Wear模塊,你僅僅只需在根目錄下運(yùn)行 gradlew :wear:assembleDebug。

為你的項(xiàng)目添加模塊

在Android studio中添加新模塊是很容易的一件事,該視圖同時(shí)也會(huì)為你創(chuàng)建build文件。如下圖所示:

添加Java依賴庫

當(dāng)你新建了一個(gè)Java模塊,build.grade文件會(huì)是這樣:

 
 
 
 
  1. apply plugin: 'java' 
  2.    dependencies { 
  3.        compile fileTree(dir: 'libs', include: ['*.jar']) 
  4. }  

Java模塊使用了Java插件,這意味著很多Android特性在這兒不能使用,因?yàn)槟悴恍枰?/p>

build文件也有基本的庫管理,你可以添加jar文件在libs文件夾下。你可以添加更多的依賴庫,根據(jù)第三章的內(nèi)容。

給你的app模塊添加Java模塊,這很簡單,不是嗎?

 
 
 
 
  1. dependencies { 
  2.  
  3.   compile project(':javalib') 
  4.  
  5. }  

這告訴了gradle去引入一個(gè)叫做javelin的模塊吧,如果你為你的app模塊添加了這個(gè)依賴,那么javalib模塊將會(huì)總是在你的app模塊構(gòu)建之前構(gòu)建。

添加Android依賴庫

同樣的,我們利用Android studio的圖形化界面創(chuàng)建Android模塊,然后其構(gòu)建文件如下:

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

記?。篈ndroid依賴庫不僅僅包含了Java代碼,同樣也會(huì)包含Android資源,像manifest和strings,layout文件,在你引入該模塊后,你可以使用該模塊的所有類和資源文件。

建議

我有點(diǎn)建議關(guān)于多模塊項(xiàng)目,并且有些東西你們應(yīng)該了解清楚,知道這些將會(huì)節(jié)約你們的時(shí)間。

在Android studio中運(yùn)行模塊tasks

當(dāng)你有多個(gè)模塊,Android studio會(huì)分析出來,并且展示在cradle中:

grade圖形化讓你運(yùn)行模塊間的任務(wù)變得簡單,但是其沒有為所有模塊同時(shí)運(yùn)行一個(gè)任務(wù),所以如果你希望這么做,最快的方式是使用命令行。

加速你的多模塊構(gòu)建

當(dāng)你構(gòu)建你的多模塊項(xiàng)目,gradle會(huì)依次執(zhí)行所有的模塊。當(dāng)你的電腦內(nèi)存夠大的時(shí)候,讓你的構(gòu)建過程多線程將會(huì)更快。該特性在gradle早已存在,但是其默認(rèn)關(guān)閉。

所以如果你希望啟動(dòng)parallel構(gòu)建,你需要在grade.properties文件中配置如下屬性:

 
 
 
 
  1. org.gradle.parallel=true 

gradle會(huì)選擇盡可能多的線程去執(zhí)行你的構(gòu)建過程,每個(gè)線程都會(huì)執(zhí)行一個(gè)模塊。parallel執(zhí)行的是獨(dú)立的模塊,即你的模塊是獨(dú)立的。

模塊耦合

即你可以在一個(gè)模塊中引用其他模塊的屬性,但是我不建議你們這么做,我們完全可以在根目錄下的build文件中定義這些屬性。

總結(jié)

我們學(xué)習(xí)了如何在一個(gè)項(xiàng)目中構(gòu)建多個(gè)模塊,以及添加新模塊是如何影響到構(gòu)建任務(wù)的執(zhí)行。

我們學(xué)習(xí)了相關(guān)事例,并且給出了一些建議。

在下一章節(jié),我們將會(huì)學(xué)習(xí)到測試,如何利用gradle讓你的測試更加簡單。我們將會(huì)學(xué)習(xí)到如何在jvm中運(yùn)行你的單元測試,以及如何運(yùn)行測試在你的手機(jī)上。


新聞標(biāo)題:GradleforAndroid第五篇(多模塊構(gòu)建)
標(biāo)題URL:http://www.5511xx.com/article/cohcgdc.html