在學(xué)習(xí) gradle 之前我們先要知道 gradle 是個(gè)什么東西,知道的覺得沒什么,不知道的可是真沒什么感念,gradle 就是自動(dòng)化構(gòu)建,編譯工具。先不忙 gradle,我們先來看看這個(gè)自動(dòng)化構(gòu)建,編譯工具。
項(xiàng)目自動(dòng)化構(gòu)建工具的發(fā)展
最早在開發(fā)的過程中是沒有項(xiàng)目自動(dòng)化構(gòu)建這個(gè)東西的,每次編譯項(xiàng)目的時(shí)候都是在命令行下對(duì)每個(gè)源文件執(zhí)行編譯命令,這種方式對(duì)于源文件不多的小項(xiàng)目還行,但是當(dāng)項(xiàng)目比較大有成百上千個(gè)源文件需要編譯時(shí)就比較痛苦了,所以才有了一些自動(dòng)化構(gòu)建工具的誕生,其本質(zhì)是將一些繁瑣的無須人工干預(yù)的編譯流程交由機(jī)器來完成。
Makefile
最早出現(xiàn)的構(gòu)建工具是makefile,它主要用于C/C++項(xiàng)目,大家會(huì)發(fā)現(xiàn)Android的源碼里面用的就是這一套構(gòu)建機(jī)制。makefile文件將程序編譯,鏈接,裝載(編譯原理上的東西,不熟悉的可以去翻閱相關(guān)書籍)的流程定義成一套統(tǒng)一的規(guī)則。其中就包括了:哪些源文件需要編譯,如何去編譯,依賴的庫文件,以及如何生成最終的可執(zhí)行文件等等。通過這些規(guī)則去實(shí)現(xiàn)我們的構(gòu)建需求,那么當(dāng)你在編譯整個(gè)工程的時(shí)候就只需要在命令行下執(zhí)行一個(gè)make命令就可以搞定了,極大的提高了項(xiàng)目的構(gòu)建效率。
Ant
ant也是一套構(gòu)建工具,主要應(yīng)用于Java項(xiàng)目(在eclipse上開發(fā)Android項(xiàng)目的時(shí)候用的比較多)。它是一個(gè)將軟件編譯,測試,部署過程組織起來自動(dòng)化執(zhí)行的工具。ant構(gòu)建文件基于xml,每個(gè)文件對(duì)應(yīng)一個(gè)唯一的project,每個(gè)project下面可以有很多的target,這些target之間存在著一定的依賴關(guān)系,當(dāng)執(zhí)行某個(gè)target時(shí)需要先執(zhí)行該target的依賴。每個(gè)target里面又包含了一些task,task就是最終需要執(zhí)行的命令。
Maven
ant雖然能大幅提高構(gòu)建的效率,但是也存在一些缺點(diǎn),比方說ant中的組件依賴(jar包)不能跨網(wǎng)絡(luò)使用,為了解決這個(gè)問題,于是maven出現(xiàn)了,maven使用了強(qiáng)大的中央倉庫,使得項(xiàng)目中使用到的一些公共組件可以很方便的聯(lián)網(wǎng)依賴和更新,這也極大的方便了一些開源項(xiàng)目的使用。
Gradle
由于maven的配置過于復(fù)雜和繁瑣,于是出現(xiàn)了我們今天的主角gradle,下面給大家看下兩者配置文件的對(duì)比。
maven的配置:
<dependencies>
<dependency>
<groupId>com.crashlytics.sdk.android</groupId>
<artifactId>crashlytics</artifactId>
<version>2.5.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
gradle的配置:
dependencies {
compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar')
testCompile('junit:junit:4.7')
}
看完項(xiàng)目自動(dòng)化構(gòu)建工具的發(fā)展歷史,想必各位心里有點(diǎn)譜了,至于對(duì)這個(gè) gradle 干的活有點(diǎn)理解了。