《Gradle for Android》核心總結(一)Gradle文件

Gradle文件

如上圖,當咱們使用 Android Studio建立一個新項目時,會默認生成三個Gradle文件。其中的兩個文件爲 settings.gradlebuild.gradle位於項目的根目錄。另一個 build.gradle文件則在Android的app模塊內被建立。

settings.gradle

對於一個只包含一個Android應用的新項目來講,settings.gradle的內容以下,表示app模塊應該包含在構建內:android

include':app'bash

settings.gradle文件在初始化階段被執行,而且定義了哪些模塊應該包含在構建內。app

注意:單模塊項目並不必定須要setting文件,可是多模塊項目必需要有setting文件,不然,Gradle不知道哪一個模塊應包含在構建內。測試

根目錄下的build.gradle

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}
複製代碼
  • buildscript:在裏面進行具體的構造配置
  • repositories:指定代碼倉庫,設置依賴時,從該代碼倉庫下載
  • dependencies:配置構建過程的依賴包。默認狀況下,惟一被定義的依賴包是GradleAndroid插件。每一個Android模塊都須要有Android插件,由於該插件中定義了執行Android的相關任務。
  • allprojects:聲明應用到全部模塊的屬性,若是模塊中的build.gradle的設置與根目錄下的build.gradle文件中的allprojects設置衝突,則模塊中的設置覆蓋根目錄下的設置。

模塊下的build.gradle

下面是app模塊下的build.gradle的代碼:gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
複製代碼

插件

第一行apply plugin: 'com.android.application'表示應用Android插件,該插件在頂層構建文件中被配置成了依賴ui

dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
    }
複製代碼

android

android代碼塊包含了所有的Android特有配置,這些特有配置之因此可被使用,是由於以前咱們使用了Android插件。配置以下:google

compileSdkVersion

compileSdkVersion是要用來聲明編譯應用的Android API版本。spa

defaultConfig

defaultConfig代碼塊用於配置應用的核心屬性。此代碼塊中的屬性可覆蓋Android.Manifest.xml文件中對應的條目操作系統

  • applicationId:該屬性覆蓋了manifest文件中的packagename

applicationIdpackagename的區別:在應用構建以前, AndroidManifest.xml中的package name 有兩個用途:1.做爲一個應用的惟標符,2.在R 資源類中被用做包名。在構建後定義在manifest 文件中的 package,繼續用在你的源代碼和 R 類中,而以前被用做設備惟一標識的 package name, 如今則被稱之爲applicationId插件

  • minSdkVersion : 用來配置運行應用的最小 APl 級別
  • targetSdkVersion : 用於通知系統, 該應用已經在某特定 Android 版本經過測試, 從而操做系統沒必要啓用任何向前兼容 的行爲。 這和咱們以前看到的 compileSdkVersion 沒有任何關係。
  • versionCode : 定義版本號
  • versionName : 定義版本號名稱

若是你在 build.gradle 中定義了它們, 就沒有必要在 manifest 文件中再去定義。 若是構建 文件不包含某個屬性, 那麼 manifest 中的該屬性就會被用做後備。

buildTypes

buildTypes代碼塊可用來定義如何構建和打包不一樣構建類型的應用

dependencies

依賴代碼塊是標準 Gradle 配置的部分(這就是其放在 android 代碼塊以外的緣由), 其定義了個應用或依賴項目的全部依賴包。

相關文章
相關標籤/搜索