1. 程式人生 > >Android官方技術文檔翻譯——Gradle 插件用戶指南(4)

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

庫項目 包含 doc 努力 時也 外部 插件 http name

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

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

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

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

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


翻譯工作耗時費神,假設你認為本文翻譯得還OK。請點一下“頂”。我在精神上會倍受鼓舞的,謝謝。翻譯如有錯訛,敬請指正。



依賴、 Android Library和多項目設置

Gradle 項目能夠對其它組件具有依賴關系。

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


二進制包的依賴

本地包

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

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

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



compile配置用於編譯主應用程序。裏面的全部內容都會被加入到編譯類路徑,而且

打包到終於生成的 apk 其中。
以下是加入依賴時其它可能用到的配置:

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


創建一個新的Build Type會基於它的名字自己主動創建一個新的配置。



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

遠程文件

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。獨立於應用程序測試這個庫。
庫項目用著相同的錨任務(assembleDebugassembleRelease),所以構建這樣一個項目的命令也沒有不論什麽差別。

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

他們都有構建類型(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,或者是,為項目之間的依賴啟用全部的公布配置。

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