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






























