在最近的Google IO大會(huì)上我注意到Android Studio開發(fā)環(huán)境引起了大家的關(guān)注。我發(fā)現(xiàn)Eclipse經(jīng)常會(huì)變慢而且健壯性不強(qiáng),所以一個(gè)新的替代Android IDE是最受歡迎的消息。在仔細(xì)關(guān)注這次的發(fā)布時(shí),我發(fā)現(xiàn)另一個(gè)亮點(diǎn)是基于Gradle的Android項(xiàng)目新的構(gòu)建系統(tǒng)。因此我決定更仔細(xì)地了解Gradle。
下面列舉了一些使用Gradle構(gòu)建Android項(xiàng)目的好處:
- 在IDE環(huán)境和命令行下使用同一個(gè)構(gòu)建系統(tǒng)
- 改進(jìn)的依賴關(guān)系管理
- 更容易地集成到自動(dòng)化構(gòu)建系統(tǒng)
一個(gè)額外的好處來(lái)自Android函數(shù)庫(kù)包格式“aar”格式。以前,Android函數(shù)庫(kù)通常需要被導(dǎo)入到IDE以此將App需要的資源加入編譯。但是現(xiàn)在的Android函數(shù)庫(kù)可以被直接包含,與“jar”文件被Java項(xiàng)目包含的方式類似。這項(xiàng)功能雖然出現(xiàn)已久,但確實(shí)非常受歡迎。
下面是我一個(gè)項(xiàng)目的gradle構(gòu)建腳本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | buildscript { // 定義一些項(xiàng)目需要的JAR函數(shù)庫(kù) LIBS_DIR = "../../../libs" // 需要從maven中央庫(kù)得到gradle的android插件 repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4.2' } } // 聲明項(xiàng)目是一個(gè)android構(gòu)建 apply plugin: 'android' dependencies { // 同時(shí)用本地maven庫(kù)查找依賴 repositories { mavenLocal() } // 下面是一些app需要的jar文件 compile files( "${LIBS_DIR}/hiscore/hiscore.jar" ) compile files( "${LIBS_DIR}/GoogleAnalytics/libGoogleAnalytics.jar" ) // 這是一個(gè)我存放在本地maven倉(cāng)庫(kù)(使用“aar”格式)的android函數(shù)庫(kù) compile ( 'com.mopub.mobileads:mopub-android-sdk:unknown' ) } //android 構(gòu)建的項(xiàng)目定義 android { compileSdkVersion 15 buildToolsVersion "17.0.0" // 下面的代碼路徑不是推薦的新項(xiàng)目結(jié)構(gòu) // 我仍然使用的Eclipse風(fēng)格結(jié)構(gòu) sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = [ 'src' ] resources.srcDirs = [ 'src' ] aidl.srcDirs = [ 'src' ] renderscript.srcDirs = [ 'src' ] res.srcDirs = [ 'res' ] assets.srcDirs = [ 'assets' ] } instrumentTest.setRoot( 'tests' ) } // 聲明創(chuàng)建一個(gè)帶簽名的發(fā)布版本細(xì)節(jié) signingConfigs { release { storeFile file ( "../keys/android.keystore" ) storePassword "######" keyAlias "######" keyPassword "######" } } // 聲明此發(fā)布構(gòu)建在簽名之前需要運(yùn)行proguard buildTypes { release { runProguard true proguardFile getDefaultProguardFile( 'proguard-android.txt' ) proguardFile 'proguard.cfg' signingConfig signingConfigs.release } } } |
從命令行構(gòu)建app可以運(yùn)行下面的命令:
1 2 | gradle assembleDebug #debug構(gòu)建 gradle assembleRelease #release構(gòu)建 |
我以前用過(guò)Maven做了幾個(gè)項(xiàng)目,發(fā)現(xiàn)用Maven來(lái)管理項(xiàng)目配置非常有用,尤其是在依賴管理方面。但是我發(fā)現(xiàn)Maven在某些情況下缺少靈活性,你不得不為某些特殊的情況進(jìn)行自定義。理論上你可以編寫自己的Maven插件,但實(shí)踐起來(lái)大多數(shù)用戶不會(huì)這么做通常他們會(huì)依賴現(xiàn)有的插件。所以我經(jīng)常使用Ant而不是Maven,因?yàn)樗谔幚眄?xiàng)目特殊操作,比如拷貝或修改代碼文件時(shí)更加靈活。
Gradle看上去在這兩方面都做得很好:通過(guò)插件為絕大多數(shù)的常用情況提供了全面支持,管理依賴關(guān)系方面與Maven做得同樣好;同時(shí)也提供了良好的靈活性,在需要修改構(gòu)建腳本時(shí)可以自由地定制。
我相信Gradle是構(gòu)建Android應(yīng)用的趨勢(shì)。Gradle還提供了很多其他很贊的特性,例如構(gòu)建“佐料(flavors)”等,本文沒(méi)有涉及。我相信Google采用Gradle是在Android發(fā)展上的一個(gè)重要進(jìn)步?,F(xiàn)在,我會(huì)將其他的項(xiàng)目都轉(zhuǎn)為使用Gradle。
-- 掃描加關(guān)注,微信號(hào): importnew --
聯(lián)系客服