接下來的一段時間會對Android Gradle的相關知識進行梳理,因此藉此整理成一個系列。若是你是剛入行的新秀,那麼這個系列將會很是適合你,由於Android基本的配置都與Gradle有關。固然若是你已經入行,但對Gradle仍是停留在表面的認知上,這個系列也會對你有所幫助。html
這篇文章定義爲入門篇,將結合本身剛開始學習Android時的疑惑與如今對Gradle的認識,進一步整理Gradle在Android中的總體結構。java
當我使用Android Studio時,一直有幾個疑問圍繞着我:android
後來知道Android Studio自身是不可以編譯成APK的,它是集成了Gradle。經過研究Gradle,發現Gradle也只是一個構建工具,真正編譯成APK的功能是由Android app plugins提供的。Gradle只是自動化構建工具,提供構建時的各類生命週期,例如:building、testing、publishing等。因此Gradle不只支持Android還支持C/C++、Scale等。git
而這個plugin其實就是在project中的build.gradle中聲明的classpathgithub
buildscript { repositories { // Gradle 4.1 and higher include support for Google's Maven repo using // the google() method. And you need to include this repo to download // Android Gradle plugin 3.0.0 or higher. google() ... } dependencies { classpath 'com.android.tools.build:gradle:3.4.0' } }
全部每次對Android構建進行了優化,咱們都要來更新這個版本。api
有了上面的基礎,當咱們新建一個Android項目時,你將會看到以下與Gradle相關的文件:閉包
你會看到文件名幾乎都有gradle字段,下面我會一一介紹它們的做用app
首先是gradle-wrapper.properties文件,打開它你將會看到以下相似信息jvm
#Sat Jan 19 08:25:46 CST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
這個是gradle版本的配置項,申明你當前項目中使用的gradle版本。當咱們構建項目的時候,它會根據版本自動下載。而且保存到你的電腦本地中。若是你使用的是Mac,你可使用以下命令查看你的全部已經下載的gradle版本。函數
ls ~/.gradle/wrapper/dists/
因此若是你不滿意當前版本,也能夠經過查看version of Gradle修改到相應的版本
這個文件是項目與其子項目或者module間的配置。裏面經過include函數來告訴該項目所包換的子項目或者依賴的module。例如剛新建項目時只有一個app子項目。
include ':app'
因此settings.gradle是位於project的最外層,即與app同級。
如今咱們已經知道一個project能夠包含一個或者多個sub-projects,而Android通常會將sub-projects當作module,因此你會在這看到兩個build.gradle。根據後面的hint提示,發現它們分別來自與project與module。
首先咱們來看project中的build.gradle,即位於根目錄下的文件
buildscript { //1 ext.objectboxVersion = '2.3.0' //4 repositories { //2 google() jcenter() } dependencies { //3 classpath 'com.android.tools.build:gradle:3.3.2' classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion" } } allprojects { //5 repositories { google() jcenter() } } task clean(type: Delete) { //6 delete rootProject.buildDir }
下面是module中的build.gradle
apply plugin: 'com.android.application' apply plugin: 'io.objectbox' //1 android { //2 compileSdkVersion 28 defaultConfig { minSdkVersion 21 targetSdkVersion 27 versionCode 100005 versionName "1.0.5" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { //3 implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:support-v4:28.0.0' }
這個文件通常都是本地文件,主要用來對gradle構建的一些我的配置項。例如gradle運行是否並行,gradle的jvmargs大小、是否開啓daemon等等。它會在gradle運行時注入到相應的build.gradle中。
這個文件也是本地文件,只不過它用來配置gradle以外的配置信息,例如ndk與sdk目錄,或者一些敏感的信息,例如插件開發打包上傳到遠程倉庫這時可能須要帳號、密碼、api_key等,防止打包時暴露。
gradle tasks是用來執行特定的gradle任務的。咱們能夠直接點擊Android Studio右邊的Gradle按鈕,你會發如今Tasks下會列出該項目的所用可執行的gradle任務。
或者你也能夠在命令行中執行以下命令,查看app下的全部tasks
./gradlew app:tasks
咱們順便點擊一個,例如assembleDebug,咱們將會在Run日誌系統中看到以下執行結果
根據輸出的日誌,也標明它是執行了task: assembleDebug
固然咱們也能夠在命令行執行指定的task,例如要達到上面相同的效果,咱們能夠輸入以下命令
./gradlew assembleDebug --console plain
既然說到這裏,再說一個初級者容易作的無心義的操做。有時會碰到一些問題而去點擊Clean Project,再點擊Rebuild Project。其實Clean Project是沒必要要的。咱們能夠直接先點擊Rebuild Project,查看日誌
結果是它分別執行了task: clean,assembleDebug。因此Rebuild Project就已經包含了Clean Project,咱們無需畫蛇添足執行Clean Project。
嗯,就這些。最後,但願這篇文章,可以讓你們對gradle在項目中的結構與所處的地位有一個更清晰的理解。
想更多的瞭解我,亦或者對個人文章感興趣的能夠關注個人公衆號,及時獲取最新動態~