偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

給Android開(kāi)發(fā)者的Gradle入門(mén)指南

移動(dòng)開(kāi)發(fā) Android
本文的目的是為您提供關(guān)于 Gradle 的高級(jí)概述,以及在開(kāi)發(fā) Android 應(yīng)用程序時(shí)如何適應(yīng)整個(gè)構(gòu)建系統(tǒng)。 我將通過(guò) Gradle 和 Gradle 的 Android 插件的基礎(chǔ)知識(shí),以及新的 Android 項(xiàng)目附帶的默認(rèn) build.gradle 腳本來(lái)進(jìn)行講述。

本文的目的是為您提供關(guān)于 Gradle 的高級(jí)概述,以及在開(kāi)發(fā) Android 應(yīng)用程序時(shí)如何適應(yīng)整個(gè)構(gòu)建系統(tǒng)。 我將通過(guò) Gradle 和 Gradle 的 Android 插件的基礎(chǔ)知識(shí),以及新的 Android 項(xiàng)目附帶的默認(rèn) build.gradle 腳本來(lái)進(jìn)行講述。

本文不會(huì)教你如何編寫(xiě)定制的 Gradle 腳本或任何類(lèi)型的東西。正如標(biāo)題所說(shuō),這是給真正意義上的初學(xué)者的文章。

背景故事

我先坦白一下:我主要是一名 iOS 開(kāi)發(fā)人員。在整個(gè)職業(yè)生涯中,只有四分之一的時(shí)間用于開(kāi)發(fā) Android 應(yīng)用程序。正因?yàn)槿绱?,我從?lái)沒(méi)有真正理解 Gradle 是什么。當(dāng)我點(diǎn)擊 Android Studio 中的綠色播放按鈕時(shí),我知道這是“工作”,但我不知道它實(shí)際上做了什么。

當(dāng)我看到“ Gradle Build Running ”這個(gè)詞超過(guò) 10 秒時(shí),這讓缺少相關(guān)知識(shí)的我非常不耐煩。 “有什么需要這么久?”我會(huì)問(wèn) Android Studio ,希望有某種跡象表明它不僅僅是卡住了。在工作中,每當(dāng)我看到一個(gè) Android 開(kāi)發(fā)者茫然地盯著屏幕,我經(jīng)常開(kāi)玩笑地問(wèn)他們:“你是在等 Gradle 構(gòu)建嗎?

最終我感到沮喪,并決定找出要如何減少構(gòu)建時(shí)間。我看了一個(gè)名為“ 加快 Android 的 Gradle 構(gòu)建 ”的 Google I/O ’17 的演講,相信會(huì)解開(kāi)所有我想要的提升 Gradle 速度的關(guān)鍵。

[[211322]]

 

40分鐘之后,我意識(shí)到我對(duì) Gradle 一無(wú)所知,所以我根本沒(méi)有機(jī)會(huì)做得更好。 我停下腳步,決定現(xiàn)在是去理解 Gradle 的時(shí)候了。

基礎(chǔ)知識(shí)

為了解決這個(gè)問(wèn)題,讓我們先弄清楚一些事情:

  1. Android Studio 不知道如何將 Java&Kotlin 代碼編譯成 APK 文件。
  2. Gradle 不知道如何將 Java&Kotlin 代碼編譯成 APK 文件。

是的,你沒(méi)看錯(cuò)。

Gradle 本身并不知道如何編譯 APK 文件,因?yàn)?Gradle 實(shí)際上是一個(gè) 通用的構(gòu)建工具 。它不限于構(gòu)建 Android 應(yīng)用程序。在 Gradle 的 GitHub 倉(cāng)庫(kù) 中,它被描述為:

...構(gòu)建工具,著重于構(gòu)建自動(dòng)化和支持多語(yǔ)言開(kāi)發(fā)。如果您在任何平臺(tái)上構(gòu)建、測(cè)試、發(fā)布和部署軟件,Gradle 提供了一個(gè)靈活的模型,可以支持從編譯和打包代碼到發(fā)布的整個(gè)開(kāi)發(fā)生命周期。 Gradle 本身實(shí)際上并不能做太多。所有有用的功能都來(lái)自豐富的插件生態(tài)系統(tǒng)。把你添加到 Android 應(yīng)用程序中的所有第三方庫(kù)視為插件。您可以使用這些插件來(lái)擴(kuò)展應(yīng)用程序的功能,就像 Gradle 使用插件來(lái)擴(kuò)展自己的功能一樣。

有很多與 Gradle 捆綁 在一起的插件,以及更多 可以下載的插件 。但是,如果你閱讀 Gradle 附帶的插件列表,則會(huì)發(fā)現(xiàn)在該頁(yè)面上找不到“Android”。

Android Plugin for Gradle

Android Plugin for Gradle 是一個(gè)使 Gradle 能夠?qū)⒛拇a編譯成用你的密鑰簽名 APK 文件的插件,甚至將 APK 安裝到你的模擬器或測(cè)試設(shè)備上。這個(gè)插件驅(qū)動(dòng)你的整個(gè)構(gòu)建系統(tǒng)。

沒(méi)有它,Gradle 就無(wú)法知道如何對(duì)代碼做任何事情。這也就是我前面說(shuō)的 Android Studio 和 Gradle 不知道如何構(gòu)建你的 Android 項(xiàng)目:這個(gè)插件是 Android Studio 和 Gradle 之間的魔法鏈。

深入腳本

現(xiàn)在我們已經(jīng)掌握了一些基礎(chǔ)知識(shí),接下來(lái)看看如何轉(zhuǎn)化為日常實(shí)現(xiàn)。當(dāng)你在 Android Studio 中啟動(dòng)一個(gè)全新的項(xiàng)目時(shí),會(huì)獲得以下文件:

給 Android 開(kāi)發(fā)者的 Gradle 入門(mén)指南

這些文件是什么?

所有帶有“ gradle ”文字的文件都用于為我們的 Android 項(xiàng)目配置 Gradle 。里面存在多個(gè)文件,因?yàn)樗鼈兌加胁煌挠猛尽?/p>

Gradle Wrapper

gradle-wrapper.properties 文件有一個(gè)簡(jiǎn)單的目的:決定在構(gòu)建項(xiàng)目時(shí)使用哪個(gè) Gradle 版本。它將隨后會(huì)自動(dòng)為你下載并保存該版本的 Gradle 。如果你在 Mac 上使用,運(yùn)行下面命令 ls ~/.gradle/wrapper/dists/ 你就可以看到 Gradle Wrapper 曾為你下載過(guò)的所有 Gradle 版本。

 

給 Android 開(kāi)發(fā)者的 Gradle 入門(mén)指南

(gradle-wrapper.properties)

注意你的 Gradle 版本是獨(dú)立于你的 Android 插件版本的。在本文撰稿時(shí),目前 最新的 Gradle 版本是 v4.3 。Android Studio 依然默認(rèn)使用 v4.1 ,所以如果你愿意,你可以很安全的將版本升級(jí)到 v4.3 。

settings.gradle

settings.gradle 文件是保存在你通知 Gradle 的地方,即你的工程所有的子工程 /module 目錄下。這是通過(guò) include 命令完成的。如果你將另一個(gè)模塊添加到你的工程中,Android Studio 將會(huì)自動(dòng)將其添加到這個(gè)文件中。

build.gradle

從 Gradle 的角度來(lái)看,我們的工程被認(rèn)為是一個(gè) 多工程構(gòu)建, 其中你擁有一個(gè)根項(xiàng)目以及一個(gè)到多個(gè)子工程。從 Android 開(kāi)發(fā)者的角度來(lái)看,這些子工程被稱(chēng)為 module (模塊)。

這就是為什么你會(huì)看到兩個(gè) build.gradle 文件的原因。一個(gè)是給根項(xiàng)目的,另一個(gè)是給伴隨著你的項(xiàng)目的 app 模塊的。讓我們先看看你的根項(xiàng)目的格式吧。

 

給 Android 開(kāi)發(fā)者的 Gradle 入門(mén)指南

(根項(xiàng)目的 build.gradle )

  1. 這個(gè)完整的 buildscript {} 塊用于告知 Gradle 腳本本身,關(guān)于編譯本項(xiàng)目需要的那些。
  2. 我們?cè)谶@個(gè) buildscript 中聲明了 Android Gradle 插件的依賴(lài)性。“3.0.0” 表示要使用的插件版本。
  3. 我們告知 Gradle 我們需要到 google() Maven 代碼庫(kù)和 jcenter() 代碼庫(kù)中檢索一些事項(xiàng)。
  4. 在Gradle 項(xiàng)目中添加 額外的屬性 ,以支持它可以在整個(gè) Gradle 項(xiàng)目中是可訪問(wèn)的。換言之,這是 Gradle 風(fēng)格的全局變量。我們可以通過(guò)使用決定所導(dǎo)入的 kotlin-gradle-plugin 的版本的方式來(lái)查看該變量的值。
  5. 正如名字所暗示的, allprojects{} 塊被用于通知 Gradle 關(guān)于所有需要編譯的子項(xiàng)目,并使用這個(gè)代碼庫(kù)集合來(lái)解決所有需要的依賴(lài)項(xiàng)。

 

給 Android 開(kāi)發(fā)者的 Gradle 入門(mén)指南

(app 模塊的 build.gradle)

  1. 首先,我們應(yīng)用真實(shí)的 Android 插件,然后我們使用 其擴(kuò)展插件 來(lái)應(yīng)用 Kotlin Android 插件。
  2. 此完整的 android{} 塊工作的唯一原因是因?yàn)槲覀円?Gradle 使用之前提到的 Android 插件。我深信你對(duì)修改該模塊內(nèi)部的值非常熟悉,但你是否對(duì)所有可能放入該塊的值有過(guò)好奇呢?好事情是它 在此都被文檔化了!
  3. 這里就是你添加 Gradle 所依賴(lài)的第三方庫(kù)的位置。注意在你的 app 的 build.gradle 中并沒(méi)有 repositories{} 塊。既然我們已經(jīng)在根項(xiàng)目的 allprojects{} 塊中聲明了,這里就沒(méi)有必要了。
  4. 還記得我們?cè)诟鶚?gòu)建文件中的全局變量嗎?是的,這里就是起作用的地方。最好采用類(lèi)似 管理你所支持庫(kù)的版本 一樣的策略可能是個(gè)不錯(cuò)的主義,這可以保證他們都是用同一個(gè)版本。

Gradle 任務(wù)

現(xiàn)在我們透過(guò)腳本,還有一件你必須知道的關(guān)于 Gradle 的事:任務(wù)。

任務(wù)是基本的東西,Gradle 可以每當(dāng)被觸發(fā)時(shí)生成,記得早前(上文)我說(shuō) Android Studio 其實(shí)不知道如何編譯你的代碼?因?yàn)樵? Android Studio 點(diǎn)擊大綠色的 play 按鈕會(huì)觸發(fā)一個(gè)具體的任務(wù)在 Gradle 執(zhí)行。

給 Android 開(kāi)發(fā)者的 Gradle 入門(mén)指南

在右下角,點(diǎn)擊 “Gradle Console” 按鈕去打開(kāi) Gradle Console ,然后點(diǎn)擊 play 按鈕運(yùn)行 app ,一大堆命令會(huì)出現(xiàn),但我們只關(guān)心頂部的:

  1. Executing tasks: [:app:assembleDebug] 

我們只討論 Gradle 執(zhí)行的 assembleDebug 任務(wù),我們可以通過(guò)命令行來(lái)做相同的事,點(diǎn)擊左邊的 Terminal 按鈕并運(yùn)行本段代碼:./gradlew assembleDebug --console plain

給 Android 開(kāi)發(fā)者的 Gradle 入門(mén)指南

瞧!你只是讓 Gradle 運(yùn)行與播放按鈕完全相同的命令。有幾件事要注意:

  1. ./gradlew 意味著使用 Gradle Wrapper 來(lái)代替 “vanilla” Gradle 。強(qiáng)烈建議您始終使用 Wrapper 版本。
  2. assembleDebug 是你剛剛要求它運(yùn)行的任務(wù)的名稱(chēng)。
  3. --console plain 告訴 Gradle 打印生成日志,就像你在 Android Studio 中看到的一樣。完全是可選的。

讓我們運(yùn)行最后一個(gè)命令:./gradlew tasks

這個(gè)命令將列出 Gradle 目前在這個(gè)項(xiàng)目中所知道的所有任務(wù),并提供每個(gè)任務(wù)的簡(jiǎn)短描述。很酷吧?

現(xiàn)在,點(diǎn)擊 Android Studio 右上角的 Gradle 標(biāo)簽。

給 Android 開(kāi)發(fā)者的 Gradle 入門(mén)指南

哈哈!這是一樣的東西。這一部分只是列出了 Gradle 可以為這個(gè)項(xiàng)目運(yùn)行的所有可能的任務(wù)。在這里雙擊 assembleDebug ,就可以做到與剛剛在命令行上做的一樣的事情,并且和播放按鈕做同樣的事情。

如果您在 Android Studio 中運(yùn)行“重建項(xiàng)目”命令,同時(shí)保持 Gradle 終端處于打開(kāi)狀態(tài),你將會(huì)意識(shí)到它所做的只是運(yùn)行 clean 任務(wù),然后運(yùn)行 assembleDebug 命令。這就是我發(fā)現(xiàn)在重建項(xiàng)目之前運(yùn)行清理項(xiàng)目是完全不必要的,因?yàn)橹亟?xiàng)目無(wú)論如何都會(huì)運(yùn)行相同的 clean 任務(wù)。

結(jié)束時(shí)的思考

我希望這篇文章能夠讓你更好地了解 Gradle 如何適應(yīng)你的開(kāi)發(fā)流程。為按照你們常規(guī)的思考方式來(lái)寫(xiě),這花費(fèi)了我更長(zhǎng)的時(shí)間,但是這對(duì)我來(lái)說(shuō)是非常值得的。我已經(jīng)重新看了“ 加速 Android Gradle 構(gòu)建 ”的視頻,我很自豪地說(shuō),在看完后我不會(huì)再完全迷失了。

責(zé)任編輯:未麗燕 來(lái)源: 開(kāi)源中國(guó)翻譯文章
相關(guān)推薦

2024-05-07 08:45:16

OpenAILlamaIndex大語(yǔ)言模型

2013-08-30 09:41:46

JavaApache CameApache

2011-07-19 09:51:32

性能優(yōu)化Designing FAndroid

2025-03-17 08:00:00

2024-02-01 09:37:42

Kubernetes服務(wù)網(wǎng)格? 命令

2018-06-03 08:00:24

AI開(kāi)發(fā)深度學(xué)習(xí)語(yǔ)言

2018-03-27 23:25:40

Paddle

2012-04-02 22:49:58

Android

2014-05-08 13:36:07

Android Wea開(kāi)發(fā)者預(yù)覽版

2011-12-05 22:44:53

Android

2024-03-21 08:18:00

Chrome前端瀏覽器

2014-07-01 11:31:35

NDKSO庫(kù)JNI調(diào)用

2019-08-16 10:55:37

開(kāi)發(fā)者技能AI

2023-05-19 10:04:18

Vue開(kāi)發(fā)者代碼

2013-05-15 10:02:08

軟件開(kāi)發(fā)開(kāi)發(fā)者

2015-05-12 14:05:49

谷歌開(kāi)發(fā)者

2019-02-21 13:40:35

Javascript面試前端

2022-01-02 23:26:08

開(kāi)發(fā)SDK Sentry

2012-04-01 15:03:39

大型項(xiàng)目開(kāi)發(fā)者

2022-01-11 20:42:54

開(kāi)發(fā)Sentry標(biāo)志
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)