Android Gradle Plugin指南(三)——依賴關係、android庫和多項目配置

來源:互聯網
上載者:User

標籤:3.2   include   art   系統   script   包含   creat   選項   tools   

原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Libraries-and-Multi-project-setup


4、Dependencies。Android Libraries and Multi-project setup(依賴關係,Android庫和多項目設定)


Gradle項目能夠依賴於其他組件。這些組件能夠是外部二進位包,或者是其他的Gradle項目。


4.1 Dependencies on binary packages(依賴二進位包)


4.1.1 Local packages(當地套件)


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

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

注意:這個dependencies DSL標籤是標準Gradle API中的一部分。所以它不屬於android標籤。


這個compile配置將被用於編譯main application。它裡面的全部東西都被會被加入到編譯的classpath中,同一時候也會被打包進終於的APK。

下面是加入依賴時可能用到的其他一些配置選項:

    * compile:main application(主module)。

    * androidTestCompile:test application(測試module)。

    * debugCompile:debug Build Type(debug類型的編譯)。

    * releaseCompile:release Build Type(公布類型的編譯)。

由於沒有可能去構建一個沒有關聯不論什麼Build Type(構建類型)的APK,APK預設配置了兩個或兩個以上的編譯配置:compile和<buildtype>Compile.

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


這對於debug版本號碼須要使用一個自己定義庫(為了反饋執行個體化的崩潰資訊等)但公布版本號碼不須要。或者它們依賴於同一個庫的不同版本號碼時會很實用。


4.2.2 Remote artifacts(遠程檔案)


Gradle支援從Maven或者Ivy倉庫中拉取檔案。


首先必須將倉庫加入到列表中,然後必須在依賴中聲明Maven或者Ivy聲明的檔案。

    repositories {        mavenCentral()    }    dependencies {        compile 'com.google.guava:guava:11.0.2'    }    android {        ...    }

注意:mavenCentral()是指定倉庫URL的簡單方法。Gradle支援遠程和本地倉庫。

注意:Gradle會遵循依賴關係的傳遞性。這意味著假設一個依賴本身依賴於其他東西,這些東西也會一併被拉取回來。


很多其它關於設定依賴關係的資訊,請參考Gradle使用者指南和DSL文檔。


4.2 Multi project setup(多項目設定)


Gradle項目也能夠通過使用多項目配置依賴於其他Gradle項目。


多項目配置的實現一般是在一個根項目路徑下將全部項目作為子目錄包括進去。



比如,給定下面項目結構:

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


我們能夠定義3個項目。

Grand將會依照下面名字映射它們:

    :app

    :libraries:lib1

    :libraries:lib2


每個項目都擁有自己的build.gradle檔案來聲明自己怎樣構建。

另外,在根資料夾下另一個setting.gradle檔案用於聲明全部項目。

這些檔案的結構例如以下:

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

當中setting.gradle的內容很easy:

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

這裡定義了哪一個目錄才是真正的Gradle項目。


當中:app項目可能依賴於這些庫,這是通過下面依賴配置聲明的:

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


很多其它關於多項目配置的資訊請參考這裡。


4.3 Library projects(庫項目)


在上面的多項目配置中。:libraries:lib1和:libraries:lib2可能是一個Java項目,而且:app這個Android項目將會使用它們的jar包輸出。


可是。假設你想要共用代碼來訪問Android API或者使用Android樣式的資源,那麼這些庫就不能是通常的Java項目,而應該是Android庫項目。


4.3.1 Creating a Library Project(建立一個庫項目)


一個庫項目與通常的Android項目很類似,僅僅是有一點小差別。


雖然構建庫項目不同於構建應用程式,它們使用了不同的plugin。可是在內部這些plugin共用了大部分同樣的代碼。而且它們都由同樣的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編譯SourceSet的庫項目,而且依賴關係的配置方法與應用程式項目的配置方法一樣,相同也支援自己定義配置。


4.3.2 Differences between a Project and a Library Project(普通項目和庫項目之間的差別)


一個庫項目的main輸出是一個.aar包(它代表Android的歸檔檔案)。它組合了編譯代碼(比如jar包或者是本地的.so檔案)和資源(manifest。res。assets)。

一個庫項目相同也能夠獨立於應用程式產生一個測試用的apk來測試。


標識Task相同適用於庫項目(assembleDebug,assembleRelease),因此在命令列上與構建一個項目沒有什麼不同。


其餘的部分,庫項目與應用程式項目一樣。它們都擁有build type和product flavor,也能夠產生多個aar版本號碼。

記住大部分Build Type的配置不適用於庫項目。可是你能夠依據庫項目是否被其他項目使用或者是否用來測試來使用自己定義的sourceSet改變庫項目的內容。


4.3.3 Referencing a Library(引用一個庫項目)


引用一個庫項目的方法與引用其他項目的方法一樣:

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

注意:假設你要引用多個庫,那麼排序將很重要。這類似於舊構建系統裡面的project.properties檔案裡的依賴排序。


4.3.4 Library Publication(庫項目公布)


普通情況下一個庫僅僅會公布它的release Variant(變種)版本號碼。

這個版本號碼將會被全部引用它的項目使用,而無論它們本身自己構建了什麼版本號碼。這是因為Gradle的限制,我們正在努力消除這個問題,所以這僅僅是暫時的限制。


你能夠控制哪一個Variant版本號碼作為發行版:

    android {        defaultPublishConfig "debug"    }

注意這裡的公布配置名稱引用的是完整的Variant版本號碼名稱.Relesae,debug僅僅適用於項目中沒有其他特性版本號碼的時候使用。假設你想要使用其他Variant版本號碼代替預設的公布版本號碼,你能夠:

    android {        defaultPublishConfig "flavor1Debug"    }


將庫項目的全部Variant版本號碼都公布也是可能的。我們計劃在一般的項目依賴項目(類似於上述所說的)情況下同意這樣的做法,可是因為Gradle的限制(我們也在努力修複這個問題)如今還不太可能。

預設情況下沒有啟用公布全部Variant版本號碼。能夠通過下面啟用:

    android {        publishNonDefault true    }


理解公布多個Variant版本號碼意味著公布多個arr檔案而不是一個arr檔案包括全部Variant版本號碼是很重要的。每個arr包都包括一個單一的Variant版本號碼。

公布一個變種版本號碼意味著構建一個可用的arr檔案作為Gradle項目的輸出檔案。

不管是公布到一個maven倉庫,還是其他項目須要建立一個這個庫項目的依賴都能夠使用到這個檔案。


Gradle有一個預設檔案的概念。當加入下面配置後就會被使用到:

    compile project(':libraries:lib2')


建立一個其他公布檔案的依賴,你須要指定詳細使用哪一個:

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


重要:注意已公布的配置是一個完整的Variant版本號碼。當中包含了build type,而且須要像以上一樣被引用。

重要:當啟用非預設公布,maven公布外掛程式將會公布其他Variant版本號碼作為擴充包(按分類器分類)。這意味著不能真正的相容公布到maven倉庫。

你應該另外公布一個單一的Variant版本號碼到倉庫中,或者同意公布全部配置以支援跨項目依賴。

Android Gradle Plugin指南(三)——依賴關係、android庫和多項目配置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.