使用Gradle構(gòu)建Android項目
在前一陣子的Google IO大會上我注意到Android Studio開發(fā)環(huán)境引起了大家的關(guān)注。我發(fā)現(xiàn)Eclipse經(jīng)常會變慢而且健壯性不強,所以一個新的替代Android IDE是***的消息。在仔細關(guān)注這次的發(fā)布時,我發(fā)現(xiàn)另一個亮點是基于Gradle的Android項目新的構(gòu)建系統(tǒng)。因此我決定更仔細地了解Gradle。
下面列舉了一些使用Gradle構(gòu)建Android項目的好處:
- 在IDE環(huán)境和命令行下使用同一個構(gòu)建系統(tǒng)
- 改進的依賴關(guān)系管理
- 更容易地集成到自動化構(gòu)建系統(tǒng)
一個額外的好處來自Android函數(shù)庫包格式“aar”格式。以前,Android函數(shù)庫通常需要被導入到IDE以此將App需要的資源加入編譯。但是現(xiàn)在的Android函數(shù)庫可以被直接包含,與“jar”文件被Java項目包含的方式類似。這項功能雖然出現(xiàn)已久,但確實非常受歡迎。
下面是我一個項目的gradle構(gòu)建腳本:
- buildscript {
- //定義一些項目需要的JAR函數(shù)庫
- LIBS_DIR = "../../../libs"
- //需要從maven中央庫得到gradle的android插件
- repositories {
- mavenCentral()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:0.4.2'
- }
- }
- //聲明項目是一個android構(gòu)建
- apply plugin: 'android' dependencies {
- //同時用本地maven庫查找依賴
- repositories {
- mavenLocal()
- }
- //下面是一些app需要的jar文件
- compile files("${LIBS_DIR}/hiscore/hiscore.jar")
- compile files("${LIBS_DIR}/GoogleAnalytics/libGoogleAnalytics.jar")
- //這是一個我存放在本地maven倉庫(使用“aar”格式)的android函數(shù)庫
- compile ('com.mopub.mobileads:mopub-android-sdk:unknown') } //android構(gòu)建的項目定義 android {
- compileSdkVersion 15 buildToolsVersion "17.0.0"
- //下面的代碼路徑不是推薦的新項目結(jié)構(gòu)
- //我仍然使用的Eclipse風格結(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)建一個帶簽名的發(fā)布版本細節(jié)
- signingConfigs {
- release {
- storeFile file("../keys
- /android.keystore")
- storePassword "######"
- keyAlias "######"
- keyPassword "######"
- }
- }
- //聲明此發(fā)布構(gòu)建在簽名之前需要運行proguard
- buildTypes {
- release {
- runProguard true
- proguardFile getDefaultProguardFile('proguard-android.txt')
- proguardFile 'proguard.cfg'
- signingConfig signingConfigs.release }
- }
- }
從命令行構(gòu)建app可以運行下面的命令:
- gradle assembleDebug #debug構(gòu)建
- gradle assembleRelease #release構(gòu)建
我以前用過Maven做了幾個項目,發(fā)現(xiàn)用Maven來管理項目配置非常有用,尤其是在依賴管理方面。但是我發(fā)現(xiàn)Maven在某些情況下缺少靈活性,你不得不為某些特殊的情況進行自定義。理論上你可以編寫自己的Maven插件,但實踐起來大多數(shù)用戶不會這么做通常他們會依賴現(xiàn)有的插件。所以我經(jīng)常使用Ant而不是Maven,因為它在處理項目特殊操作,比如拷貝或修改代碼文件時更加靈活。
Gradle看上去在這兩方面都做得很好:通過插件為絕大多數(shù)的常用情況提供了全面支持,管理依賴關(guān)系方面與Maven做得同樣好;同時也提供了良好的靈活性,在需要修改構(gòu)建腳本時可以自由地定制。
我相信Gradle是構(gòu)建Android應用的趨勢。Gradle還提供了很多其他很贊的特性,例如構(gòu)建“佐料(flavors)”等,本文沒有涉及。我相信Google采用Gradle是在Android發(fā)展上的一個重要進步。現(xiàn)在,我會將其他的項目都轉(zhuǎn)為使用Gradle。