瞅瞅Gradle系列(二)-構建文件理解

當咱們在Android Studio中建立一個新項目時,會默認生成三個Gradle文件,其中settings.gradlebuild.gradle文件位於項目的根目錄,另外一個build.gradle文件則位於項目的app模塊中.html

settings.gradle

對於只包含一個Android應用的新項目來講,settings.gradle中是這樣的:java

include ':app'
複製代碼

settings文件在初始化階段被執行,而且其中定義了哪些模塊應該包含在構建內(單項目模塊能夠沒有settings文件,但多項目模塊必須有,不然Gradle不知道哪一個模塊應該包含在構建內).此時Gradle會爲每一個settings文件建立一個Settings對象,並調用該對象的相關方法.android

Settings類

Settings類的官方解釋是聲明實例化和配置要參與構建的Project實例的層次結構所需的配置,而且settings文件和Settings對象之間存在一一對應關係.
Settings對象的目的之一是容許咱們使用Settings.include(java.lang.String[])方法將項目添加到構建中.api

build.gradle(根目錄)

build.gradle用來配置模塊的一些參數,默認狀況下包含以下代碼塊:bash

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.1'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}
複製代碼
  • buildscript代碼塊用於構建配置.
    • repositories代碼塊用於配置構建依賴的倉庫地址
    • dependencies代碼塊用於配置構建過程當中的依賴包
  • allprojects代碼塊用來聲明那些須要被應用於全部模塊的屬性

build.gradle(模塊目錄)

模塊目錄下的build.gradle文件的屬性只能做用於Android app模塊,其中的配置能夠覆蓋根目錄的build.gradle文件中的任何屬性.該模塊的構建文件示例以下:app

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "io.sqms.study"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
複製代碼

插件

com.android.application代碼爲Android應用插件,該插件在根目錄的構建文件中被配置成了依賴,提供構建、測試和打包應用以及依賴項目的全部任務.工具

android

android{}代碼塊包含了所有的Android的特有配置,使用這些配置前提條件是應用了上面說的插件.
必須有的屬性是:測試

  • compileSdkVersion 用來編譯應用的Android API版本.
  • buildToolsVersion 構建工具和編譯器使用的版本號
defaultConfig

defaultConfig代碼塊用於配置應用的核心屬性(注:此代碼塊中的屬性可覆蓋AndroidManifest.xml文件中對應的條目,若是沒有在build.gradle文件中配置,那麼AndroidManifest.xml文件中配置的則會生效).gradle

  • applicationId 會覆蓋AndroidManifest.xml文件中的packagename
    • packagename有兩個作用:
      • 做爲應用的惟一標識
      • 在R資源類中被用做包名
    • 當咱們使用構建變體(variants)建立不一樣版本的應用時,如免費版和付費版,此時若是想同時將這兩個應用都安裝到手機上或上傳到應用商店,那麼此時就須要有不一樣的標識符,然而生成的R類和資源代碼須要在任什麼時候候都保持着相同的包名,不然全部源文件都要隨之改變.AndroidManifest.xml文件中的packagename會繼續使用在源代碼和R資源類中,applicationId用來當作惟一標識.
  • minSdkVersion 用來配置運行應用的最小API級別
  • targetSdkVersion 用於告知系統該應用已經在某個指定Android版本經過測試,從而操做系統沒必要啓動任何向前兼容的行爲
  • versionCode 定義版本號
  • versionName 版本名稱
相關文章
相關標籤/搜索