国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Android Gradle系列-入門篇

spademan / 3442人閱讀

摘要:接下來的一段時間會對的相關知識進行梳理,所以借此整理成一個系列。所以不僅支持還支持等。所以是位于的最外層,即與同級。根據后面的提示,發現它們分別來自與與。它會在運行時注入到相應的中。

接下來的一段時間會對Android Gradle的相關知識進行梳理,所以借此整理成一個系列。如果你是剛入行的新秀,那么這個系列將會非常適合你,因為Android基本的配置都與Gradle有關。當然如果你已經入行,但對Gradle還是停留在表面的認知上,這個系列也會對你有所幫助。

這篇文章定義為入門篇,將結合自己剛開始學習Android時的疑惑與現在對Gradle的認識,進一步整理Gradle在Android中的整體結構。

思考

當我使用Android Studio時,一直有幾個疑問圍繞著我:

Android Studio是怎樣將Java與Kotlin代碼的編譯成APK文件?

Gradle是怎樣將Java與Kotlin代碼編譯成APK文件?

后來知道Android Studio自身是不能夠編譯成APK的,它是集成了Gradle。通過研究Gradle,發現Gradle也只是一個構建工具,真正編譯成APK的功能是由Android app plugins提供的。Gradle只是自動化構建工具,提供構建時的各種生命周期,例如:building、testing、publishing等。所以Gradle不僅支持Android還支持C/C++、Scale等。

而這個plugin其實就是在project中的build.gradle中聲明的classpath

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構建進行了優化,我們都要來更新這個版本。

Scripts

有了上面的基礎,當我們新建一個Android項目時,你將會看到如下與Gradle相關的文件:

你會看到文件名幾乎都有gradle字段,下面我會一一介紹它們的作用

Gradle Wrapper

首先是gradle-wrapper.properties文件,打開它你將會看到如下類似信息

#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修改到相應的版本

settings.gradle

這個文件是項目與其子項目或者module間的配置。里面通過include函數來告訴該項目所包換的子項目或者依賴的module。例如剛新建項目時只有一個app子項目。

include ":app"

所以settings.gradle是位于project的最外層,即與app同級。

build.gradle

現在我們已經知道一個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
}

buildscript閉包是申明編譯該項目所需的相關配置

告知gradle這些配置將從google()與jcenter()中獲取

申明相關的plugin,例如Android Plugin for Gradle。

在gradle中有一個extra property屬性,允許我們通過它來申明一些變量,例如plugin的版本號。有一個特性就是這些變量在gradle中都是全局的。所以對于多個module時,我們可以通過它來統一相關的版本號。最后在3中通過${name}來引用

因為可能有多個sub-project,對于一些相同的配置,可以通過allprojects來進行統一管理。

申明一個task,用來執行相關任務,這里是clean操作,目的是刪除build文件夾中的數據

下面是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"
}

通過調用apply函數,引入我們需要依賴的plugin,這個就是我們在根build.gradle中申明的classpath

android閉包是gradle最重要的配置申明,例如默認的配置信息defaultConfig,包含minSdkVersion最小支持的android版本,versionCode與versionName等。這些配置都與編譯息息相關,最好你應該熟悉它們。你實在記不住的話,我這里也有秘籍,AppExtension這里面包含所有的配置項與所代表的意義。

這里的dependencies用來申明項目所依賴的第三方庫,而這些庫的獲取來源無需再次申明,因為我們已經在之前的根目錄的build.gradle中的allprojects閉包中進行了申明。再者之前的ext全局變量也可以在這里使用。

gradle.properties

這個文件一般都是本地文件,主要用來對gradle構建的一些個人配置項。例如gradle運行是否并行,gradle的jvmargs大小、是否開啟daemon等等。它會在gradle運行時注入到相應的build.gradle中。

local.properties

這個文件也是本地文件,只不過它用來配置gradle之外的配置信息,例如ndk與sdk目錄,或者一些敏感的信息,例如插件開發打包上傳到遠程倉庫這時可能需要賬號、密碼、api_key等,防止打包時暴露。

Gradle Tasks

gradle tasks是用來執行特定的gradle任務的。我們可以直接點擊Android Studio右邊的Gradle按鈕,你會發現在Tasks下會列出該項目的所用可執行的gradle任務。

或者你也可以在命令行中執行如下命令,查看app下的所有tasks

./gradlew app:tasks

我們順便點擊一個,例如assembleDebug,我們將會在Run日志系統中看到如下執行結果

根據輸出的日志,也標明它是執行了task: assembleDebug

當然我們也可以在命令行執行指定的task,例如要達到上面相同的效果,我們可以輸入如下命令

./gradlew assembleDebug --console plain

./gradlew 代表的是使用Gradle Wrapper中的gradle,就是該項目本身的gradle版本,避免直接使用gradle命令

assembleDebug是task的名稱

--console plain輸出完整的日志

既然說到這里,再說一個初級者容易做的無意義的操作。有時會碰到一些問題而去點擊Clean Project,再點擊Rebuild Project。其實Clean Project是不必要的。我們可以直接先點擊Rebuild Project,查看日志

結果是它分別執行了task: clean,assembleDebug。所以Rebuild Project就已經包含了Clean Project,我們無需多此一舉執行Clean Project。

嗯,就這些。最后,希望這篇文章,能夠讓大家對gradle在項目中的結構與所處的地位有一個更清晰的理解。

想更多的了解我,亦或者對我的文章感興趣的可以關注我的公眾號,及時獲取最新動態~

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74437.html

相關文章

  • Android Gradle系列-原理

    摘要:上周我們在系列入門篇文章中已經將在項目中的結構過了一遍。但是不同的是它可以改變其自身的代理。這正常,因為我們還沒有聲明它。與將通過對象進行。至于是的中的一個抽象感念,它申明在中。的知識點還有很多,這只是對有關的一部分進行分析。 showImg(https://segmentfault.com/img/bVbsh3m?w=2560&h=1280); 上周我們在Android Gradle...

    jsliang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<