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

Gradle for Android第一篇( 從Gradle和AS開(kāi)始 )

移動(dòng)開(kāi)發(fā) Android
如果你是名Android開(kāi)發(fā)新手,或者是名從eclipse切換到Android studio的新手,那么我強(qiáng)烈建議您follow我的文章,正如封面所見(jiàn),利用gradle構(gòu)建工具來(lái)自動(dòng)構(gòu)建你的Android項(xiàng)目。今天主要介紹Android studio工具的使用,以及cradle基礎(chǔ)入門(mén),使用cradle wrapper和如何從eclipse遷移到Android studio。

正如大家所見(jiàn),這是本英文書(shū),而由于國(guó)內(nèi)的gradle翻譯資料不全,所以特次開(kāi)辟專(zhuān)欄,翻譯gradle for android這本書(shū),同時(shí)添加自己的心得體會(huì)以及在實(shí)際工作上的實(shí)戰(zhàn),希望大家能夠喜歡。 

 

 

Gradle for Android 第一篇( 從 Gradle 和 AS 開(kāi)始 )  

如果你是名Android開(kāi)發(fā)新手,或者是名從eclipse切換到Android studio的新手,那么我強(qiáng)烈建議您follow我的文章,正如封面所見(jiàn),利用gradle構(gòu)建工具來(lái)自動(dòng)構(gòu)建你的Android項(xiàng)目。廢話(huà)不多說(shuō),我們直接開(kāi)始吧。

今天主要介紹Android studio工具的使用,以及cradle基礎(chǔ)入門(mén),使用cradle wrapper和如何從eclipse遷移到Android studio。

這篇文章記于2015.12.30,Android studio正式版本已經(jīng)開(kāi)發(fā)到1.5,而預(yù)覽版已經(jīng)到了2.0,所以轉(zhuǎn)到Android studio吧。

當(dāng)你第一次打開(kāi)Android studio的時(shí)候,有一個(gè)視圖顯示你即將創(chuàng)建的環(huán)境以及確保你使用了最新的Android SDK和必要的google依賴(lài)包,同時(shí)會(huì)讓你選擇是否創(chuàng)建AVD,這樣你就可以使用模擬器了。在這兒多說(shuō)幾句:

  1. 盡量使用Android studio 2.0,因?yàn)樗娴淖兛炝?,而其模擬器的速度也提升了不少,我使用至今,也無(wú)發(fā)現(xiàn)任何bug,所以完全不用擔(dān)心。
  2. 如果使用模擬器開(kāi)發(fā)Android,盡量使用Genymotion模擬器,盡管其現(xiàn)在的Android6.0仍然有很多bug,但是在其以下版本,其速度還是非??斓?,利用模擬器開(kāi)發(fā),為虛擬機(jī)安裝文件夾瀏覽器,是及時(shí)查看SQLite表文件利器,具體操作辦法,可以google。
  3. 盡量使用最新的23.0.0以上的構(gòu)建版本。

理解基本的Gradle

如果你想創(chuàng)建一個(gè)Android project基于gradle,那么你必須寫(xiě)一個(gè)構(gòu)建腳本,這個(gè)文件通常稱(chēng)之為build.grade,你可能已經(jīng)覺(jué)察到了,當(dāng)我們查看這一腳本,gradle會(huì)為我們提供很多默認(rèn)的配置以及通常的默認(rèn)值,而這極大的簡(jiǎn)化了我們的工作,例如ant和maven,使用他們的時(shí)候,我們需要編寫(xiě)大量的配置文件,而這很惡心。而gradle得默認(rèn)配置,如果你需要使用自己的配置,完全可以簡(jiǎn)單的去重寫(xiě)他們就好。

Gradle腳本不是像傳統(tǒng)的xml文件那樣,而是一種基于Groovy的動(dòng)態(tài)DSL,而Groovy語(yǔ)言是一種基于jvm的動(dòng)態(tài)語(yǔ)言。

你完全不用擔(dān)心,你在使用gradle的時(shí)候,還需要去學(xué)習(xí)Groovy語(yǔ)言,該語(yǔ)言很容易閱讀,并且如果你已經(jīng)學(xué)習(xí)過(guò)java的話(huà),學(xué)習(xí)Groovy將不會(huì)是難事,如果你想開(kāi)始創(chuàng)建自己的tasks和插件,那么你最好對(duì)Groovy有一個(gè)較深的理解,然而由于其基于jvm,所以你完全可能通過(guò)純正的java代碼或者其他任何基于jvm的語(yǔ)言去開(kāi)發(fā)你自己的插件,關(guān)于插件開(kāi)發(fā),我們后續(xù)將會(huì)有相關(guān)介紹。

Project和tasks

在grade中的兩大重要的概念,分別是project和tasks。每一次構(gòu)建都是有至少一個(gè)project來(lái)完成,所以Android studio中的project和Gradle中的project不是一個(gè)概念。每個(gè)project有至少一個(gè)tasks。每一個(gè)build.grade文件代表著一個(gè)project。tasks在build.gradle中定義。當(dāng)初始化構(gòu)建進(jìn)程,gradle會(huì)基于build文件,集合所有的project和tasks,一個(gè)tasks包含了一系列動(dòng)作,然后它們將會(huì)按照順序執(zhí)行,一個(gè)動(dòng)作就是一段被執(zhí)行的代碼,很像Java中的方法。

構(gòu)建的生命周期

一旦一個(gè)tasks被執(zhí)行,那么它不會(huì)再次執(zhí)行了,不包含依賴(lài)的Tasks總是優(yōu)先執(zhí)行,一次構(gòu)建將會(huì)經(jīng)歷下列三個(gè)階段:

  • 初始化階段:project實(shí)例在這兒創(chuàng)建,如果有多個(gè)模塊,即有多個(gè)build.gradle文件,多個(gè)project將會(huì)被創(chuàng)建。
  • 配置階段:在該階段,build.gradle腳本將會(huì)執(zhí)行,為每個(gè)project創(chuàng)建和配置所有的tasks。
  • 執(zhí)行階段:這一階段,gradle會(huì)決定哪一個(gè)tasks會(huì)被執(zhí)行,哪一個(gè)tasks會(huì)被執(zhí)行完全依賴(lài)開(kāi)始構(gòu)建時(shí)傳入的參數(shù)和當(dāng)前所在的文件夾位置有關(guān)。

build.gradle的配置文件

基于grade構(gòu)建的項(xiàng)目通常至少有一個(gè)build.gradle,那么我們來(lái)看看Android的build.gradle:

  1. buildscript { 
  2.    repositories { 
  3.         jcenter() 
  4.    } 
  5.    dependencies { 
  6.        classpath 'com.android.tools.build:gradle:1.2.3' 
  7.  }  
  8.  

這個(gè)就是實(shí)際構(gòu)建開(kāi)始的地方,在倉(cāng)庫(kù)地址中,我們使用了JCenter,JCenter類(lèi)似maven庫(kù),不需要任何額外的配置,grade還支持其他幾個(gè)倉(cāng)庫(kù),不論是遠(yuǎn)程還是本地倉(cāng)庫(kù)。

構(gòu)建腳本也定義了一個(gè)Android構(gòu)建工具,這個(gè)就是Android plugin的來(lái)源之處。Android plugin提供了所有需要去構(gòu)建和測(cè)試的應(yīng)用。每個(gè)Android應(yīng)用都需要這么一個(gè)插件:

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

插件用于擴(kuò)展gradle腳本的能力,在一個(gè)項(xiàng)目中使用插件,這樣該項(xiàng)目的構(gòu)建腳本就可以定義該插件定義好的屬性和使用它的tasks。

注意:當(dāng)你在開(kāi)發(fā)一個(gè)依賴(lài)庫(kù),那么你應(yīng)該使用’com.android.library’,并且你不能同時(shí)使用他們2個(gè),這將導(dǎo)致構(gòu)建失敗,一個(gè)模塊要么使用Android application或者Android library插件,而不是二者。

當(dāng)使用Android 插件的時(shí)候,Android標(biāo)簽將可以被使用,如下所示:

  1. android { 
  2.        compileSdkVersion 22 
  3.        buildToolsVersion "22.0.1" 
  4.  

更多的屬性我們將在第二章中進(jìn)行討論。

項(xiàng)目結(jié)構(gòu)

和eclipse對(duì)比來(lái)看,Android studio構(gòu)建的結(jié)構(gòu)有很大的不同:

  1. MyApp 
  2.   ├── build.gradle 
  3.   ├── settings.gradle 
  4.   └── app 
  5.       ├── build.gradle 
  6.       ├── build 
  7.       ├── libs 
  8.       └── src 
  9.           └── main 
  10.               ├── java 
  11.               │   └── com.package.myapp 
  12.               └── res 
  13.                   ├── drawable 
  14.                   ├── layout 
  15.                   └── etc.  

grade項(xiàng)目通常在根文件夾中包含一個(gè)build.gradle,使用的代碼在app這個(gè)文件夾中,這個(gè)文件夾也可以使用其他名字,而不必要定義為app,例如當(dāng)你利用Android studio創(chuàng)建一個(gè)project針對(duì)一個(gè)手機(jī)應(yīng)用和一個(gè)Android wear應(yīng)用的時(shí)候,模塊將被默認(rèn)叫做application和wearable。

gradle使用了一個(gè)叫做source set的概念,官方解釋?zhuān)阂粋€(gè)source set就是一系列資源文件,其將會(huì)被編譯和執(zhí)行。對(duì)于Android項(xiàng)目,main就是一個(gè)source set,其包含了所有的資源代碼。當(dāng)你開(kāi)始編寫(xiě)測(cè)試用例的時(shí)候,你一般會(huì)把代碼放在一個(gè)單獨(dú)的source set,叫做androidTest,這個(gè)文件夾只包含測(cè)試。

開(kāi)始使用Gradle Wrapper

grade只是一個(gè)構(gòu)建工具,而新版本總是在更迭,所以使用Gradle Wrapper將會(huì)是一個(gè)好的選擇去避免由于gradle版本更新導(dǎo)致的問(wèn)題。Gradle Wrapper提供了一個(gè)windows的batch文件和其他系統(tǒng)的shell文件,當(dāng)你使用這些腳本的時(shí)候,當(dāng)前gradle版本將會(huì)被下載,并且會(huì)被自動(dòng)用在項(xiàng)目的構(gòu)建,所以每個(gè)開(kāi)發(fā)者在構(gòu)建自己app的時(shí)候只需要使用Wrapper。所以開(kāi)發(fā)者不需要為你的電腦安裝任何gradle版本,在mac上你只需要運(yùn)行g(shù)radlew,而在windows上你只需要運(yùn)行g(shù)radlew.bat。

你也可以利用命令行./gradlew -v來(lái)查看當(dāng)前gradle版本。下列是wrapper的文件夾:

  1. myapp/ 
  2.   ├── gradlew 
  3.   ├── gradlew.bat 
  4.   └── gradle/wrapper/ 
  5.       ├── gradle-wrapper.jar 
  6.       └── gradle-wrapper.properties  

可以看到一個(gè)bat文件針對(duì)windows系統(tǒng),一個(gè)shell腳本針對(duì)mac系統(tǒng),一個(gè)jar文件,一個(gè)配置文件。配置文件包含以下信息:

  1. #Sat May 30 17:41:49 CEST 2015 
  2.    distributionBase=GRADLE_USER_HOME 
  3.    distributionPath=wrapper/dists 
  4.    zipStoreBase=GRADLE_USER_HOME 
  5.    zipStorePath=wrapper/dists 
  6.    distributionUrl=https\://services.gradle.org/distributions/ 
  7.    gradle-2.4-all.zip  

你可以改變?cè)搖rl來(lái)改變你的gradle版本。

使用基本的構(gòu)建命令

使用你的命令行,導(dǎo)航到你的項(xiàng)目,然后輸入:

  1. $ gradlew tasks 

這一命令將會(huì)列出所以可運(yùn)行的tasks,你也可以添加–all參數(shù),來(lái)查看所有的task。當(dāng)你在開(kāi)發(fā)的時(shí)候,構(gòu)建項(xiàng)目,你需要運(yùn)行assemble task通過(guò)debug配置:

  1. $ gradlew assembleDebug 

該任務(wù)將會(huì)創(chuàng)建一個(gè)debug版本的app,同時(shí)Android插件會(huì)將其保存在MyApp/app/build/ outputs/apk目錄下。

除了assemble,還有三個(gè)基本的命令:

  • check 運(yùn)行所以的checks,這意味著運(yùn)行所有的tests在已連的設(shè)備或模擬器上。
  • build 是check和assemble的集合體。
  • clean 清楚項(xiàng)目的output文件。

保持舊的eclipse文件結(jié)構(gòu)

關(guān)于如何將eclipse項(xiàng)目導(dǎo)入Android studio本文不再介紹。

  1. android { 
  2.      sourceSets { 
  3.        main { 
  4.          manifest.srcFile 'AndroidManifest.xml' 
  5.          java.srcDirs = ['src'
  6.          resources.srcDirs = ['src'
  7.          aidl.srcDirs = ['src'
  8.          renderscript.srcDirs = ['src'
  9.          res.srcDirs = ['res'
  10.          assets.srcDirs = ['assets'
  11.     } 
  12.      androidTest.setRoot('tests'
  13.     }  
  14. }    

在grade文件中配置,將會(huì)保存eclipse目錄結(jié)構(gòu),當(dāng)然,如果你有任何依賴(lài)的jar包,你需要告訴gradle它在哪兒,假設(shè)jar包會(huì)在一個(gè)叫做libs的文件夾內(nèi),那么你應(yīng)該這么配置:

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

該行意為:將libs文件夾中所有的jar文件視為依賴(lài)包。

總結(jié)

通過(guò)本文,我們可以學(xué)習(xí)到gradle的優(yōu)勢(shì),以及為什么要使用gradle,我們簡(jiǎn)單的看了看Android studio,以及其是如何幫助我們生成build文件。

同時(shí)我們學(xué)習(xí)了Gradle Wrapper,其讓我們維護(hù)以及分享項(xiàng)目變得更加簡(jiǎn)單,我們知道了如何創(chuàng)建一個(gè)新的項(xiàng)目在Android studio中,以及如何從eclispe遷移到Android studio并且保持目錄結(jié)構(gòu)。

同時(shí)我們學(xué)習(xí)了最基本的gradle task和命令行命令。在下一篇文章中,我們將會(huì)定制自己的build文件。 

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

2011-03-14 15:52:50

Windows Azu

2014-03-28 13:14:33

2015-05-27 09:32:29

iOS應(yīng)用架構(gòu)

2011-06-21 09:14:01

Oracle查詢(xún)

2014-07-30 14:25:41

SwiftiBeacon

2017-04-10 14:46:29

AndroidGradleBuild.gradl

2015-08-20 10:13:34

2022-08-01 08:18:58

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

2017-03-14 19:18:56

AndroidGradle實(shí)踐

2015-07-20 16:37:11

2017-04-10 17:35:54

AndroidGradle依賴(lài)管理

2017-04-11 09:07:55

AndroidGradle構(gòu)建變體

2016-12-28 10:37:46

AndroidGradleApache Ant

2013-04-15 10:00:14

Hyper-V虛擬化網(wǎng)絡(luò)

2017-04-13 14:55:07

AndroidGradle多模塊構(gòu)建

2017-03-02 14:35:33

Androidgradle常用配置

2013-07-18 17:00:12

Gradle構(gòu)建AndAndroid開(kāi)發(fā)Android學(xué)習(xí)

2015-12-11 17:24:50

Androidgradle開(kāi)發(fā)

2023-02-20 09:55:00

微服務(wù)框架單體架構(gòu)

2023-06-21 10:33:13

SIGMOD阿里云數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

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