Android官方技術文檔翻譯——Gradle 插件用戶指南(4)

近期趕項目,白天基本沒時間,僅僅有晚上在家的時候才幹看一看。昨天晚上僅僅翻譯完了第四章,今天就僅僅發第四章吧。html

本文譯自Android官方技術文檔《Gradle Plugin User Guide》,原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide。android

翻譯不易。轉載請註明CSDN博客上的出處:api

http://blog.csdn.net/maosidiaoxian/article/details/41955809
app

前三章見《Android官方技術文檔翻譯——Gradle 插件用戶指南(1-3)》。maven


翻譯工做耗時費神,假設你認爲本文翻譯得還OK。請點一下「頂」。我在精神上會倍受鼓舞的,謝謝。翻譯若有錯訛,敬請指正。ide



依賴、 Android Library和多項目設置

Gradle 項目可以對其它組件具備依賴關係。

這些組件可以是外部的二進制包,或其它的 Gradle 項目。post


二進制包的依賴

本地包

要配置一個外部庫 jar 包的依賴。您需要在 compile配置中加入一個依賴關係。

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

android {
    ...
}

注意: dependencies DSL 元素是標準的 Gradle API 的一部分。不屬於 android 元素內。



compile配置用於編譯主應用程序。裏面的所有內容都會被加入到編譯類路徑,並且打包到終於生成的 apk 其中。
如下是加入依賴時其它可能用到的配置: 
gradle

  • compile: 主應用程序
  • androidTestCompile: 測試的應用程序
  • debugCompile: debug Build Type
  • releaseCompile: release Build Type.
因爲不可能構建一個沒有不論什麼關聯的 Build Type的 APK。apk 老是配置兩個(或以上)的配置: compile<buildtype>Compile

 
建立一個新的Build Type會基於它的名字本身主動建立一個新的配置。ui



這可能會實用。比方debug版本號需要使用一個本身定義庫(好比報告崩潰的信息),而release版本號則不需要。或者是他們依賴於同一個庫的不一樣版本號的狀況下。 
google

遠程文件

Gradle 支持從 Maven 和 Ivy 倉庫中拉取文件。



首先,這個倉庫必須加入到列表其中。而後必須用Maven 或 Ivy 聲明文件的方式聲明這個依賴。



repositories {
    mavenCentral()
}


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

android {
     ...
}

注:  mavenCentral()是指定maven中央倉庫的URL的快捷方法。Gradle支持遠程和本地倉庫。


注:Gradle 將遵循所有依賴關係的傳遞性。這意味着,假設一個依賴有它本身的依賴關係,這些依賴也會被拉取。

有關設置依賴關係的不少其它信息。請參閱 Gradle 用戶指南(這裏)。和DSL文檔(這裏)。

多項目設置

Gradle 項目也可以經過使用多項目設置依賴於其它的 Gradle 項目。



一個多項目設置通常是經過讓所有的項目做爲給定根項目的子目錄來實現。

好比。給定下面項目結構:

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

咱們可以識別出3個項目。

Gradle 將經過下面名稱引用它們:

:app
:libraries:lib1
:libraries:lib2

每一個項目都有其本身的build.gradle文件,定義本身怎樣構建。


此外,在根路徑下還將有一個叫settings.gradle的文件用於聲明所有的項目。
這些文件的結構例如如下:

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

settings.gradle的內容很是easy:
include ':app', ':libraries:lib1', ':libraries:lib2'
它定義了哪一個目錄其實是一個 Gradle 項目。

:app項目可能依賴於libraries,這是經過聲明例如如下的依賴關係來配置的:

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

關於多項目設置的不少其它常用信息請參閱 這裏


庫項目

在上面的多項目的設置中。 :libraries:lib1:libraries:lib2可以是Java項目。而 :app  Android項目將會使用到它們的jar包輸出。


但是,假設你想共享訪問了 Andr​​oid API或使用了 Android-style的資源的代碼,這些庫項目就不能是普通的Java項目,而應該是 Andr​​oid Library 項目。

建立庫項目

Library項目與普通的 Android 項目很類似,僅僅有一些不一樣。

由於構建庫項目與構建應用程序有些不一樣不一樣,因此使用的是不一樣的插件。這兩個插件內部共享了大部分的相同的代碼,並且它們都由相同的 com.android.tools.build.gradle jar 包提供。



buildscript {
    repositories {
        mavenCentral()
    }

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

apply plugin: 'android-library'

android {
    compileSdkVersion 15
}

上面的樣例中建立了一個使用API​​ 15編譯的庫項目。

SourceSets和依賴關係與它們在應用程序項目中的處理方式同樣。並且支持相同方式的本身定義。

普通項目和Library 項目之間的差異

一個 Library 項目主要輸出的是一個 .aar包(它表明Android的歸檔文件)。它組合了編譯代碼(如一個jar文件或原生的.so文件)和資源(manifest,res,assets)。
一個庫項目還可以生成測試apk。獨立於應用程序測試這個庫。

庫項目用着相同的錨任務( assembleDebug,  assembleRelease),因此構建這樣一個項目的命令也沒有不論什麼差異。

對於其它的內容,庫項目和應用程序項目的行爲是同樣的。

他們都有構建類型(build types)和產品定製(product flavors),並且都可以生成多個版本號的aar。

需要注意的是。 Build Type 的大部分配置都不適用庫項目。但是。您可以依據一個庫項目是否被其它項目使用仍是被測試。使用本身定義  sourceSet  來更改庫項目的內容。

引用一個庫項目

引用一個庫庫和引用其它不論什麼項目的方法是同樣的:

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

注意: 假設您有多個庫。那麼排序將很重要。這相似於舊的生成系統中, project.properties 文件的依賴項的順序的重要性。

庫項目公佈

默認狀況下,一個庫項目僅僅公佈它的 release variant。這variant將被所有引用該庫的項目使用,無論那些項目構建的是哪一種variant。

這是由於 Gradle 限制而有的一個暫時限制,咱們正在努力消除這個問題。


您可以控制要公佈哪個variant 
android {
    defaultPublishConfig "debug"
}

注意。這個公佈的配置名稱引用的是完整的 variant 名稱。 releasedebug,僅僅在未定義flavor時適用。假設你想在使用flavors時更改默認的公佈variant,你可以這樣寫:
android {
    defaultPublishConfig "flavor1Debug"
}

公佈一個庫項目的所有variants也是可以作到的。

咱們正計劃在正常的項目對項目(project-to-project)的依賴(如上面的樣例)時也可以這樣作,但現在因爲 Gradle 的限制(咱們也在努力修復這些問題),還沒法作到。

默認狀況下沒有啓用公佈所有variant。

要啓用它們可以這樣作:

android {
    publishNonDefault true
}

公佈多個variants意味着公佈多個aar文件,而不是公佈一個包括多個variants的aar文件。能意識到這一點是很重要的。每一個 aar 包都是包括一個單一的variant。
公佈一個variant,意識着讓這個可用的 aar 做爲 Gradle 項目的輸出文件。

這個文件將會在公佈到一個maven倉庫中,或者還有一個項目建立對這個項目依賴時用到。


Gradle 有一個默認文件的概念。

它就是在編寫如下的代碼時用到的:

compile project(':libraries:lib2')

若要建立對一個項目的還有一個已公佈的文件的依賴,您需要指定使用哪個:
dependencies {
    flavor1Compile project(path: ':lib1', configuration: 'flavor1Release')
    flavor2Compile project(path: ':lib1', configuration: 'flavor2Release')
}

重要說明:注意已公佈的配置是一個完整的variant,包含生成類型,並且需要像以上那樣被引用。 
重要說明: 當啓用非默認的公佈時。Maven 公佈插件將把這些額外的variant做爲額外的包(按分類器分類)公佈。這意味着它對公佈到一個 maven 倉庫並不是真正的兼容。您應該僅僅向一個倉庫公佈一個單一的 variant,或者是,爲項目之間的依賴啓用所有的公佈配置。
相關文章
相關標籤/搜索