android studio gradle plugin 用戶指南 選擇性翻譯

原文html

http://tools.android.com/tech-docs/new-build-system/user-guidejava

構建文件 build.gradleandroid

Basic Project

1.最簡單的配置:

apply plugin: 'java'

使用自帶的java插件,用gradle編譯javaapi

2.最多見的android配置:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.11.1'
    }
}

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"
}


repositories 使用maven central repository

dependencies 依賴android plugin

apply plugin 使用android plugin
android {} 配置android plugin 參數,這個事dsl的入口

提示:須要 local.properties 設置表明android sdk 路徑的sdk.dir屬性,或者使用 ANDROID_HOME 環境變量
app

項目結構

1.默認目錄結構:

  • src/main/         放源碼
  • src/androidTest/  放測試代碼

2.java和android plugin 共有源碼目錄:

  • java/
  • resources/

3.android plugin 源碼目錄

  • AndroidManifest.xml
  • res/
  • assets/
  • aidl/
  • rs/
  • jni/

配置路徑

修改java plugin默認路徑的兩種方式

sourceSets {
    main {
        java {
            srcDir 'src/java'
        }
        resources {
            srcDir 'src/resources'
        }
    }
}
sourceSets {
    main.java.srcDirs = ['src/java']
    main.resources.srcDirs = ['src/resources']
}

將android plugin 的路徑修改成舊的形式

android {
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        androidTest.setRoot('tests')
    }
}

構建任務

常見任務

  • assemble 合併輸出
  • check 運行全部檢查
  • build 運行 assemble 和 check
  • clean 清空輸出

這幾個任務自己不作什麼事,具體的事情要往裏面插,相似策略模式maven

java任務

  • assemble
    • jar
      This task creates the output.
  • check
    • test
      This task runs the tests.

jar 直接或者間接依賴於其餘任務,好比classes 編譯java代碼ide

具體看http://gradle.org/docs/current/userguide/java_plugin.html測試

android任務

  • assemble
    The task to assemble the output(s) of the project
  • check
    The task to run all the checks.
  • connectedCheck
    Runs checks that requires a connected device or emulator. they will run on all connected devices in parallel.
  • deviceCheck
    Runs checks using APIs to connect to remote devices. This is used on CI servers.
  • build
    This task does both assemble and check
  • clean
    This task cleans the output of the project

  多了connectedCheck和deviceCheck檢查設備鏈接gradle

  tip:gradle支持任務名簡寫:好比用gradle aR 代替gradle assembleReleaseui

自定義構建過程

Manifest entries

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        versionCode 12
        versionName "2.0"
        minSdkVersion 16
        targetSdkVersion 16
    }
}

默認值

 Property Name  Default value in DSL object  Default value
 versionCode  -1  value from manifest if present
 versionName  null  value from manifest if present
 minSdkVersion  -1  value from manifest if present
 targetSdkVersion  -1  value from manifest if present
 applicationId  null  value from manifest if present
 testApplicationId  null  applicationId + 「.test」
 testInstrumentationRunner  null  android.test.InstrumentationTestRunner
 signingConfig  null  null
 proguardFile  N/A (set only)  N/A (set only)
 proguardFiles  N/A (set only)  N/A (set only) 

依賴管理

依賴於本地包

dependencies {
    compile files('libs/foo.jar')
}

android {
    ...
}

compile的文件都會加入classpath當中,並打包到apk

可選的compile配置

  • compile: main application
  • androidTestCompile: test application
  • debugCompile: debug Build Type
  • releaseCompile: release Build Type.

依賴於遠程包

repositories {
    mavenCentral()
}


dependencies {
    compile 'com.google.guava:guava:11.0.2'
}

android {
    ...
}

先把repository加進來,而後在dependencies以maven或者ivy的形式聲明artifacts,就能夠了

配置其餘maven庫

repositories {
    maven {
        url "http://repo.mycompany.com/maven2"
    }
}

http://gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html

多項目構建

示例:

MyProject/
 + app/
 + libraries/
    + lib1/
    + lib2/

app,lib1,lib2 都是gradle項目
gradle這麼引用他們 :app :libraries:lib1 :libraries:lib2
每一個項目都有build.gradle文件
根目錄有settings.gradle
結構以下:

MyProject/
 | settings.gradle
 + app/
    | build.gradle
 + libraries/
    + lib1/
       | build.gradle
    + lib2/
       | build.gradle
 

爲了表示當前目錄是一個gradle目錄,須要有settings.gradle文件,內容以下:

include ':app', ':libraries:lib1', ':libraries:lib2'

app依賴其餘項目,依賴關係這麼寫

dependencies {
    compile project(':libraries:lib1')
}

library項目

上面 :libraries:lib1 :libraries:lib2能夠是java項目,:app使用它們的jar包,

可是 若是這些庫要訪問android api 或者其餘android資源,它們不能是普通的java項目,必須是Android Library Projects

建立Android Library Projects

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.6'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 15
}

使用android-libraray plugin 其餘跟普通android項目相似

輸出.aar文件,包含編譯代碼(.jar/.so)和資源文件(manifest, res, assets)

引用Library

dependencies {
    compile project(':libraries:lib1')
    compile project(':libraries:lib2')
}

發佈Library

android {
    defaultPublishConfig "debug"
}

默認只發布release版本,能夠經過上面代碼修改

若是有變體(後面將提到),要加上變體名

android {
    defaultPublishConfig "flavor1Debug"
} 

發佈全部版本

android {
    publishNonDefault true
}

引用其餘發佈的artifact

dependencies {
    flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
    flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
} 

構建變體

變體:相似普通版和高級版

android {
    ....

    productFlavors {
        flavor1 {
            ...
        }

        flavor2 {
            ...
        }
    }
}

Build Type + Product Flavor = Build Variant

例如

  • Flavor1 - debug
  • Flavor1 - release
  • Flavor2 - debug
  • Flavor2 - release
相關文章
相關標籤/搜索