AndroidGradle最實用的指南

來源:互聯網
上載者:User

標籤:val   結合   git   android開發   方式   color   ndk   view   引號   

AndroidStudio目前已經成為Android開發人員的主流工具,而Gradle的原理,配置,使用仍然是很多android開發人員感到困惑的地方。網上雖然有很多相關文檔,但是要麼是只會用但是不知道gradle的原理,要麼就是過於深究Gradle和Groovy,沒能和具體的android使用情境結合,導致很多人看完雲裡霧裡。本文只針對android開發人員,結合具體使用,捎帶介紹一下Gradle和Groovy的本質,希望可以讓更多的android開發人員不僅能知其然,更能知其所以然。

參考書籍:

實戰Gradle

Android Gradle 權威指南

巧用Gradle構建Android應用

1.  Gradle簡介

2013 年,Google 發布了全新的 Android 開發 IDE————Android Studio,核心是 Google 新推出的 Gradle 編譯環境。首先,我們要明白,Android Studio 使用 Gradle 構建工具,Eclipse 的 ADT 外掛程式使用的是 Ant 構建工具。其次,要搞明白Android Studio 為什麼使用 Gradle 構建工具。Gradle有什麼特點呢?

  • 採用了 Domain Specific Language(DSL 語言) 來描述和控制構建邏輯。
  • 構建檔案基於 Groovy,並且允許通過混合聲明 DSL 元素和使用代碼來控制 DSL 元素以控制自訂的構建邏輯。
  • 支援 Maven 或者 Ivy 的依賴管理。
  • 非常靈活。允許使用最好的實現,但是不會強制實現的方式。
  • 外掛程式可以提供自己的 DSL 和 API 以供構建檔案使用。
  • 良好的 API 工具供 IDE 整合。

由此可知,Gradle 之所以強大是因為繼承了強大、靈活的 Ant 和 Maven 豐富的依賴管理,組態管理簡單,指令碼編寫方便靈活,外掛程式模組化。

 

2.  AS中的Gradle檔案

Gradle的優越性讓它在很多地方都有應用,本文從Android的角度來分析和使用。

Android中的一個項目結構通常如下:

相關檔案資訊如下:

目錄檔案 定義
.gradle gradle項目產生檔案(自動編譯工具產生的檔案)
.idea IDEA專案檔(開發工具產生的檔案)
app 其中一個 module,複用父項目的設定,可與父項目擁有相同的設定檔
build 自動構建時組建檔案的地方
gradle 自動完成 gradle 環境支援檔案夾
.gitignore git源碼管理檔案
build.gradle gradle 項目自動編譯的設定檔
gradle.properties gradle 運行環境設定檔
gradlew 自動完成 gradle 環境的 linux mac 指令碼,配合 gradle 檔案夾使用
gradlew.bat 自動完成 gradle 環境的 windows 指令碼,配合 gradle 檔案夾使用
local.properties Android SDK NDK 環境路徑配置
*.iml IDEA 專案檔
setting.gradle gradle 項目的子項目包含檔案
2.1  settings.gradle

為什麼我沒有從build.gradle開始介紹,而是從settings.gradle這個檔案開始呢?是因為這個問價是Gradle的設定檔案,用於初始化以及工程樹的配置,位置放在根工程目錄下。設定檔案大多數的作用是為了配置子工程。在Gradle中多工程是通過工程樹表示的,就相當於As中看到的Project和Moudle的概念一樣。根工程相當於AS中的Project,一個根工程可以有很多子工程,也就是很多Moudle。

一個子工程只有在settings檔案裡配置了Gradle才會識別,才會在構建的時候被包含進去。具體使用如下:

//定義一個名為initMinshengGradleEnvironment的函數。該函數內部完成一些初始化操作//比如建立特定的目錄,設定特定的參數等def initTKGradleEnvironment(){      println"initialize TK Gradle Environment ....."      ......//幹一些special的私活....      println"initialize TK Gradle Environment completes..."  }  //settings.gradle載入的時候,會執行initTKGradleEnvironment
initTKGradleEnvironment()
include ‘:voice‘
include ‘:imagepicker‘project(‘:imagepicker‘).projectDir = new File(rootDir, ‘tk/imagepicker‘)

首先,這個檔案中可以自己設定一些函數,如initTKGradleEnvironment(),這些函數會在gradle構建整個工程任務的時候執行,所以,可以在settings做一些初始化的工作。

其次,可以通過include函數,將子Project的名字(其檔案夾名)包含進來 。這裡要注意的是,如果像imagepicker‘子工程指定了檔案夾的目錄,它的工程目錄就是rootDir/tk/imagepicker;而像voice子工程這樣沒有指定相應的檔案夾目錄,預設目錄會是其同級的目錄,即Gradle會把當前與settings.gradle檔案同級的voice目錄作為voice子工程的工程目錄。如果沒有的話,會報錯。

2.2  build.gradle

每個project都會有build檔案,該檔案是該project構建的入口,可以在這裡針對該project進行設定,比如配置版本,需要哪些外掛程式,依賴哪些庫等。AS項目結構中有兩個build檔案。我們分別對其進行介紹。

2.2.1  app Moudle的build檔案

Android Studio 自動建立的 module 預設產生的 build.gradle 檔案,這個檔案是開發中打交道最多的一個檔案。

這個檔案中包括apply plugin,android,greendao,repositories,dependencies等多個代碼塊。

android {    compileSdkVersion project.ANDROID_BUILD_SDK_VERSION as int    buildToolsVersion project.ANDROID_BUILD_TOOLS_VERSION     defaultConfig {        applicationId project.APPLICATION_ID        versionCode project.VERSION_CODE as int        versionName project.VERSION_NAME        minSdkVersion project.ANDROID_BUILD_MIN_SDK_VERSION as int        targetSdkVersion project.ANDROID_BUILD_TARGET_SDK_VERSION as int    }} dependencies {    compile fileTree(include: [‘*.jar‘], dir: ‘libs‘)    //這裡注意是雙引號    compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY}"    compile "com.android.support:design:${SUPPORT_LIBRARY}"    compile "com.android.support:recyclerview-v7:${SUPPORT_LIBRARY}"    compile "com.android.support:support-annotations:${SUPPORT_LIBRARY}"    compile "com.android.support:cardview-v7:${SUPPORT_LIBRARY}"    compile "com.android.support:support-v4:${SUPPORT_LIBRARY}"}

  

2.2.2  root Project的build檔案2.3   gradle.properties

配置全域的管理檔案。用來配置 gradle 運行環境的檔案,比如配置 gradle 運行模式,運行時 jvm 虛擬機器的大小。

## Project-wide Gradle settings.## For more details on how to configure your build environment visit# http://www.gradle.org/docs/current/userguide/build_environment.html## Specifies the JVM arguments used for the daemon process.# The setting is particularly useful for tweaking memory settings.# Default value: -Xmx1024m -XX:MaxPermSize=256m# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8## When configured, Gradle will run in incubating parallel mode.# This option should only be used with decoupled projects. More details, visit# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects# org.gradle.parallel=true#Wed Mar 21 09:55:30 CST 2018org.gradle.jvmargs=-Xmx1536m -Xmx4048m

properties其實是Java項目中的設定檔,不是Gradle獨創的。又因為Gradle文法可以和Java進行混合使用,所以在Java項目上面使用properties檔案的方式,在Gradle上面也可以使用。Gradle借用了這一點,所以內建了對gradle.properties的使用方式.

properties裡面的資料格式採用索引值對的方式,大概有以下幾種寫法: 
1. key=value 
2. key:value 
3. key :value 
4. # 作為注釋 
在Android Studio 中最好使用第一種寫法,要不會有警告。

在實際開發中,一般大型的項目都是拆分進行模組化開發的,每個模組在合并的時候容易有衝突(比如版本衝突),或者需要改版本的時候比較麻煩,需要一個一個地方去改,這時候配置全域的 gradle.properties 檔案就很有必要了。具體參考如下設定:

## Project-wide Gradle settings.## For more details on how to configure your build environment visit# http://www.gradle.org/docs/current/userguide/build_environment.html## Specifies the JVM arguments used for the daemon process.# The setting is particularly useful for tweaking memory settings.# Default value: -Xmx1024m -XX:MaxPermSize=256m# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8## When configured, Gradle will run in incubating parallel mode.# This option should only be used with decoupled projects. More details, visit# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects# org.gradle.parallel=true#Wed Mar 21 09:55:30 CST 2018org.gradle.jvmargs=-Xmx1536m -Xmx4048m#添加ndk支援(按需添加)android.useDeprecatedNdk=true# 應用版本名稱VERSION_NAME=1.0.0# 應用版本號碼VERSION_CODE=100# 支援庫版本SUPPORT_LIBRARY=24.2.1# MIN_SDK_VERSIONANDROID_BUILD_MIN_SDK_VERSION=14# TARGET_SDK_VERSIONANDROID_BUILD_TARGET_SDK_VERSION=24# BUILD_SDK_VERSIONANDROID_BUILD_SDK_VERSION=24# BUILD_TOOLS_VERSIONANDROID_BUILD_TOOLS_VERSION=24.0.3

  

 

2.4  local.properties

Android Studio 自動建立的工程中,IDE 自動配備了本地設定檔,並且設定了 sdk.dir 屬性。也就是配置了 Android_Home 環境變數,所以 IDE 能夠自動產生這個設定檔。一般情況都不用修改這個設定檔,除非你一定要重新制定一個 SDK 路徑。

AndroidGradle最實用的指南

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.