日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

读书笔记--Android Gradle权威指南(上)

發(fā)布時(shí)間:2023/12/10 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记--Android Gradle权威指南(上) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本篇文章已授權(quán)微信公眾號(hào) dasu_Android(大蘇)獨(dú)家發(fā)布

最近看了一本書《Android Gradle 權(quán)威指南》,對(duì)于 Gradle 理解又更深了,但不想過段時(shí)間就又忘光了,所以打算寫一篇讀書筆記,將書中一些我個(gè)人覺得蠻有用的點(diǎn)記錄、總結(jié)一下。

前言

首先,先來過一下整書的目錄章節(jié),先大概清楚整本書都介紹了哪些知識(shí)點(diǎn):

第 1 章 Gradle 入門

第 2 章 Groovy 基礎(chǔ)

第 3 章 Gradle 構(gòu)建腳本基礎(chǔ)

第 4 章 Gradle 任務(wù)

第 5 章 Gradle 插件

第 6 章 Java Gradle 插件

第 7 章 Android Gradle 插件

第 8 章 自定義 Android Gradle 工程

第 9 章 Android Gradle 高級(jí)自定義

第 10 章 Android Gradle 多項(xiàng)目構(gòu)建

第 11 章 Android Gradle 多渠道構(gòu)建

第 12 章 Android Gradle 測(cè)試

第 13 章 Android Gradle NDK 支持

第 14 章 Android Gradle 持續(xù)集成

整本書介紹的內(nèi)容很全,從 Gradle 的環(huán)境配置 --> Groovy 介紹 --> 講解項(xiàng)目中常見 gradle 文件作用 (setting.gradle, build.gradle) --> 詳細(xì)講解 build.gradle 文件內(nèi)每行代碼的含義 --> 各種高級(jí)自定義使用。

看完這本書,對(duì)于掌握項(xiàng)目中的 build.gradle 文件應(yīng)該就不成問題了,雖然將整本書過了一遍,但其實(shí)我也只是著重挑了一些自己感興趣的章節(jié)深入閱讀,所以就來記錄一下,方便后續(xù)查閱吧。

筆記

1. Groovy 基礎(chǔ)

首先清楚一點(diǎn),Gradle 是基于 Groovy 語言的,他們之間的關(guān)系就像《Android 群英傳:神兵利器》中說的:

Groovy 對(duì)于 Gradle,就好比 Java 對(duì)于 Android

所以,了解一些 Groovy,對(duì)于學(xué)習(xí) Gradle 來說,肯定是有所幫助的。

關(guān)于這方面內(nèi)容,我之前寫過一篇博客:學(xué)點(diǎn)Groovy來理解build.gradle代碼

所以,這里不會(huì)再去介紹,但有幾個(gè)點(diǎn)可以提一下,如果你都還不怎么熟悉,那么可以點(diǎn)開鏈接去看看:

  • Groovy 中支持用 'xxx',"xxx",'''xxx''',/xxx/ 等多種方式來定義字符串,所以如果在 build.gradle 里看到既有單引號(hào)又有雙引號(hào)定義的字符串時(shí),不用去疑惑他們到底是不是字符串。
  • Groovy 中的方法支持省略括號(hào),也就是說,在 build.gradle 中一行行的代碼,大部分都是在調(diào)用某個(gè)方法。
  • Groovy 中有一種特性叫閉包,說白點(diǎn)也就是代碼塊,支持作為方法參數(shù),結(jié)合方法括號(hào)省略的特點(diǎn),在 build.gradle 里 defauleConfig {} 代碼塊之類的其實(shí)也都是在調(diào)用一個(gè)個(gè)方法。

2. Android 項(xiàng)目中的 Gradle

新建一個(gè)項(xiàng)目時(shí),Android Studio 會(huì)自動(dòng)生成項(xiàng)目的初步結(jié)構(gòu),這通常會(huì)攜帶一些 gradle 相關(guān)的文件,這一節(jié)就來學(xué)學(xué),各個(gè) gradle 文件都有什么作用

2.1 gradle/wrapper 目錄

就像我們要開發(fā) Java 程序,本地需要配置 JDK 環(huán)境,要開發(fā) Android 程序,需要配置 SDK 一樣,想要借助 Gradle 來構(gòu)建項(xiàng)目,那么按理說本地也需要配置相關(guān)的 Gradle 環(huán)境才對(duì)。

而我們之所以可以省掉這一步,就是 gradle/wrapper 這個(gè)目錄下的文件的作用了,可以先看看 gradle-wrapper.properties 這個(gè)文件的內(nèi)容:

#Thu May 24 10:30:42 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

內(nèi)容無非就是一些配置項(xiàng),而最重要的就是最后一句,指明了當(dāng)前這個(gè)項(xiàng)目要使用哪個(gè)版本的 Gradle 來構(gòu)建,我們?cè)?Android Studio 的 File -> Project Structure -> Project 里配置的 Gradle Version,最終改變的其實(shí)就是上述文件里最后一行的 Gradle 版本屬性值

官方說了,提供了 gradle/wrapper 這種方式,可以讓你特別靈活的進(jìn)行配置,想換個(gè) Gradle 版本來構(gòu)建項(xiàng)目,只需要修改這個(gè)配置文件的 Gradle 版本屬性值即可,當(dāng)然也可以直接通過 AS 提供的 UI 界面操作,結(jié)果都一樣。

由于 Gradle 更新?lián)Q代特別快,而且新的大版本經(jīng)常都會(huì)提供很多新特性,這就導(dǎo)致了在 clone Github 上一些開源項(xiàng)目到本地構(gòu)建時(shí)經(jīng)常有報(bào)錯(cuò)的問題,本質(zhì)原因就是因?yàn)樗褂玫?Gradle 版本跟你本地不一樣,而由于有堵巨墻的原因,導(dǎo)致一直沒法成功下載它配置的 Gradle 版本,進(jìn)而就無法構(gòu)建項(xiàng)目,而報(bào)錯(cuò)了。

網(wǎng)上說的一些解決方案是讓你手動(dòng)去修改 gradle-wrapper.properties 文件里的 Gradle 版本,改成你本地的版本,但我覺得這種方法不一定適用,這取決于那個(gè)項(xiàng)目中是否有用到一些新特性,以及你本地的 Gradle 版本是否兼容項(xiàng)目中用到的 Gradle 新特性。

通常來說,如果你本地的 Gradle 比克隆的項(xiàng)目的 Gradle 版本高的話,那么這種直接修改項(xiàng)目的 Gradle 版本方式應(yīng)該是可行的,那么怎么知道你本地都有哪些 Gradle 版本呢:

默認(rèn)在 C 盤, C:\Users\suxq?.gradle 目錄下有 Android Studio 自動(dòng)幫你下載的 Gradle 的各個(gè)版本,只要你在 gradle-wrapper.properties 修改了 Gradle 的版本號(hào),那么當(dāng)你在構(gòu)建項(xiàng)目時(shí),就會(huì)先到你電腦的這個(gè)路徑下查找相對(duì)應(yīng)版本的 Gradle,如果可用,則直接進(jìn)行構(gòu)建項(xiàng)目任務(wù),如果不存在,那么就會(huì)自動(dòng)去下載對(duì)應(yīng)版本的 Gradle。

最后,還有個(gè)問題,怎么確定都有哪些 Gradle 版本可用呢?如果想要自己去下載,不借助 Android Studio 可行么?

當(dāng)然可以,去官網(wǎng)找到對(duì)應(yīng)版本點(diǎn)擊下載即可:http://services.gradle.org/distributions/

下載完成之后,將文件放到上面介紹的 C 盤下的 .gradle 文件里相對(duì)應(yīng)版本的目錄下即可。

如果你有自己去嘗試下載,你就會(huì)體驗(yàn)到,下載速度是有多么的龜速,90M 左右的文件硬是要下載個(gè)把小時(shí)。同樣的道理,你自己下載這么慢,那通過 Android Studio 下載的速度也同樣這么慢,兩者唯一的區(qū)別就只是在于你自己下載時(shí)你可以看到速度和進(jìn)度。

這樣一來的話,明白為什么有時(shí)候打開新項(xiàng)目或者打開 Github 上的項(xiàng)目時(shí),Android Studio 會(huì)一直卡在構(gòu)建中的原因了吧?

因?yàn)檫@個(gè)項(xiàng)目用到了你本地沒有的 Gradle 版本,所以 Android Studio 自動(dòng)去下載了,但由于都懂的原因,下載速度賊慢,因此網(wǎng)上才有一些博客教你說讓你要去FQ,明白為什么了吧。

另外,網(wǎng)上還有一些博客會(huì)讓你不管它,讓你等隔天再去打開這個(gè)項(xiàng)目,然后有時(shí)候你會(huì)發(fā)現(xiàn),隔天打開竟然能正常構(gòu)建項(xiàng)目了,莫名其妙的就好了,就不一直卡在構(gòu)建中了。這是由于 Android Studio 會(huì)有一個(gè)后臺(tái)構(gòu)建的功能,也就是說它可以在背后默默的幫你自動(dòng)去下載 Gradle,雖然速度賊慢,但總有下載完成的時(shí)候,當(dāng)你隔天再去打開這個(gè)新項(xiàng)目時(shí),如果已經(jīng)下載好了,那自然就可以正常構(gòu)建使用了。

2.2 gradlew.bat 文件

gradlew 文件和 gradlew.bat 文件,兩份沒有什么差別,它們都是腳本文件,區(qū)別只是一個(gè)是 shell 腳本,一個(gè)是批處理腳本,那么自然一個(gè)是用來在 Linux 上運(yùn)行,一個(gè)在 Windows 上運(yùn)行。

感興趣的可以去看看這份腳本代碼,其中比較關(guān)鍵的代碼:

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar@rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

大概翻譯一下,它借助了 gradle/wrapper 目錄下的 gradle-wrapper.jar 文件,并借助了 java 命令,提供了可讓我們直接以命令行形式運(yùn)行一些相應(yīng)的 gradle 指令,而這些指令在 gradle-wrapper.jar 文件中都提供了相應(yīng)的實(shí)現(xiàn)。

比如: gradlew -version

直接在 Android Studio 的 Terminal 面板運(yùn)行 gradlew -version 命令,或者在 Dos 窗口,進(jìn)到項(xiàng)目的根目錄下執(zhí)行該命令,都可以,前者只是打開時(shí)就默認(rèn)將項(xiàng)目根目錄作為當(dāng)前路徑了。

這也是為什么一些資料說,如果沒有配置 Gradle 環(huán)境,那么在每個(gè)項(xiàng)目根目錄下也可以運(yùn)行 gradle 命令的原因,因?yàn)槊總€(gè)項(xiàng)目都提供了 gradlew.bat 腳本以及 gradle/wrapper 目錄下的 gradle-wrapper.jar 文件支持。你可以試一下,刪掉兩者中任意一個(gè),就沒法正常運(yùn)行 gradle 命令了。

那么,提供了腳本文件來支持直接運(yùn)行 gradle 命令有什么用呢?

用處可多了,我們?cè)跇?gòu)建項(xiàng)目時(shí),基本都是直接借助 Android Studio 的圖形界面來操作,點(diǎn)一點(diǎn)就可以了。但有時(shí)候,經(jīng)常會(huì)遇見一些構(gòu)建失敗的情況,然后日志中經(jīng)常會(huì)給我們這么一段提示:

如果想查看更多的日志信息,需要在執(zhí)行命令的時(shí)候加上一些參數(shù),而這種時(shí)候就需要通過命令行的形式來了,那么這時(shí)腳本文件也就派上用場(chǎng)了:

這樣一來就可以看到更多的日志信息了,當(dāng)然我舉的這個(gè)例子不好,因?yàn)榭梢灾苯涌闯鰡栴}出在哪了,不需要再去獲取更多的輔助信息來定位了。

但有些時(shí)候,Gradle 構(gòu)建時(shí)確實(shí)就是失敗了,然后給的信息又少,讓人莫名其妙,不知道為啥失敗了,這種時(shí)候就可以借助命令行形式來執(zhí)行這個(gè) task,然后添加一些參數(shù)來獲取更多的輔助日志。至于要添加哪些參數(shù),執(zhí)行什么命令,通常情況下,Gradle 構(gòu)建失敗時(shí)都會(huì)給出建議,跟著來就可以了。

2.3 setting.gradle 文件

setting.gradle 文件通常是當(dāng)項(xiàng)目涉及到多 Module 的場(chǎng)景。

只有在 setting.gradle 中 include 的 Module,才會(huì)被加入構(gòu)建中,也就是說,如果一個(gè)項(xiàng)目文件夾內(nèi),包含了很多子工程,但如果沒在 setting.gradle 中將這些子工程 include 進(jìn)來的話, 這些 Module 是不會(huì)參與進(jìn)構(gòu)建的。

另外,如果子工程的這些 Module 都直接放在了項(xiàng)目根目錄中,那么 setting.gradle 中只需要寫 include 就可以了,那如果這些子工程是放在別的地方,那么也可以通過修改 project().projectDir 來指定子工程的具體路徑,也就是說,所有的 Module 并不一定需要全部集中放在同一個(gè)項(xiàng)目?jī)?nèi)。

2.4 build.gradle 文件

一個(gè)項(xiàng)目中可能存在多個(gè)子工程,每個(gè)子工程構(gòu)建都應(yīng)該是相互獨(dú)立的,也就是說,每個(gè)子工程都可以根據(jù)自己的需要,配置各種依賴,插件等。那么,Gradle 是如何分開來管理每個(gè)子工程的構(gòu)建任務(wù)的呢?

這就是 build.gradle 文件的作用了,所以你會(huì)發(fā)現(xiàn),每個(gè)子工程,也就是每個(gè) Module 都會(huì)有一個(gè) build.gradle 文件,Gradle 就是以這個(gè)文件為根據(jù)來構(gòu)建這個(gè) Module。

那么,如果有些配置項(xiàng),在所有的子工程中都是一致的話,如果在每個(gè)子工程里都去重復(fù)粘貼的話,當(dāng)這個(gè)共同的配置項(xiàng)需要發(fā)生變化時(shí),維護(hù)起來會(huì)非常麻煩,這也就是為什么根目錄下面還會(huì)有一個(gè) build.gradle 文件。

根目錄下的這個(gè) build.gradle 是統(tǒng)籌全局的,在這里,你可以配置一些所有工程共同的配置項(xiàng),比如 Android Gradle 的版本,依賴庫的倉庫地址這些所有工程的共同配置項(xiàng)。

也就是說,其實(shí)將根目錄下的 build.gradle 文件里的內(nèi)容移到每一個(gè)工程下的 build.gradle 里,也是可行的。但沒必要這樣做,吃飽了撐著。

3. Gradle 基礎(chǔ)

3.1 task 概念

task 是 Gradle 中的一種概念,引用書中的解釋:

一個(gè) task 其實(shí)就是一個(gè)操作,一個(gè)原子性的操作,比如打個(gè) jar 包,復(fù)制一份文件,編譯一次 Java 代碼,上傳一個(gè) jar 到 Maven 中心庫等,這就是一個(gè) Task,和 Ant 里的 Target, Maven 中的 goal 是一樣的。

有點(diǎn)類似于 Java 里面的類,但又有很多不同之處。我們要通過 Java 命令來執(zhí)行某個(gè) java 文件,那么至少需要一個(gè)類,類里面需要有 main 方法,這個(gè) java 文件才能運(yùn)行起來。

同樣,要通過 gradle 命令來執(zhí)行某個(gè)構(gòu)建任務(wù),那么至少需要一個(gè) task,這個(gè)構(gòu)建任務(wù)才能跑起來。

但更多的是不同的概念,多個(gè)類之間可以有相互依賴的關(guān)系,類中持有另一個(gè)類的引用等等。

但在 task 方面,多個(gè) task 之間只能有前后依賴關(guān)系,即某個(gè) task 的運(yùn)行是否需要哪個(gè) task 先運(yùn)行的基礎(chǔ)上才允許,也就是說,在 Gradle 的構(gòu)建工作過程中,多個(gè) task 是構(gòu)成一條直線的,一個(gè)個(gè) task 按順序的去工作,而不存在某個(gè) task 工作到一半時(shí)去調(diào)用另一個(gè) task。

不過,通常情況下,我們并不需要去接觸到 task 層面,build.gradle 文件里的代碼大多都只是在調(diào)用各種方法進(jìn)行各種配置,而最后,會(huì)根據(jù)這份文件生成很多 task,比如:

在 Android Studio 右側(cè)的 Gradle 的面板這邊,就是一個(gè)個(gè)的 task,assemble 是一個(gè) task,build 也是一個(gè) task,很多 task 是 Gradle 已經(jīng)提供的,而有些 task 則是根據(jù) build.gradle 里面的配置項(xiàng)自動(dòng)生成的,比如 assembleDebug 這一類。

要執(zhí)行 task 的方式,可以通過 AS 的圖形界面點(diǎn)一點(diǎn)即可,也可以通過命令行方式,由于根目錄提供了 gradlew 腳本文件,因此可以在根目錄下執(zhí)行 gradlew task名 即可。

3.2 gradle 插件概念

Gradle 是用來構(gòu)建項(xiàng)目的,但并不是說只能用于構(gòu)建 Android 的項(xiàng)目,Java 的也行,C++ 的也行,很多很多。

那如果我只是做 Android 開發(fā),我也就只需要 Gradle 構(gòu)建 Android 項(xiàng)目的功能即可,其他的又不需要,鑒于此,Gradle 封裝好了基本的構(gòu)建工作,然后提供了插件的接口,支持根據(jù)各自需要去擴(kuò)展相應(yīng)的構(gòu)建任務(wù)。

以上就是我對(duì)于 Gradle 插件概念的理解,我認(rèn)為它是用于給大伙可以根據(jù)需要自行去擴(kuò)展。

就拿 Android 項(xiàng)目來說,來看一份 build.gradle 文件結(jié)構(gòu):

apply plugin: 'com.android.application'android {...defaultConfig {....} }dependencies {... }

如果有點(diǎn)擊方法進(jìn)去看過源碼的話,你會(huì)發(fā)現(xiàn):

發(fā)現(xiàn)沒有,dependencies 是 Gradle 提供的方法,但 android,defaultConfig 卻都是 Android Gradle 插件提供的方法了。

也就是說,其實(shí) Gradle 只提供了構(gòu)建項(xiàng)目的一些基本功能,如配置依賴庫,不管什么項(xiàng)目都需要。但像 android {} 代碼塊里的配置項(xiàng),很明顯,就只有 Android 項(xiàng)目才需要用到了,所以這些配置并不是由 Gradle 來提供的,而是由 Android Gradle 插件提供的,這也就是為什么在根目錄的 build.gradle 文件里會(huì)有這么一行代碼:

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

com.android.tools.build:gradle:2.3.3 這行代碼其實(shí)就是聲明了我們的項(xiàng)目還需要使用 Android Gradle 插件,版本號(hào)為 2.3.3,而插件的下載地址在 jecnter() 倉庫。

所以,得搞清楚,Gradle 和 Android Gradle 是兩種概念,也是兩個(gè)不同的東西,如果有人問說你項(xiàng)目構(gòu)建的 Gradle 的版本是多少,得搞清楚,他想問的是 Gradle,還是 Android Gradle 插件。

但是我們?cè)诟夸浀?build.gradle 里是可以配置多個(gè)插件的,比如如果有使用 GreenDao,或者使用了 Jcenter 的上傳功能:

buildscript {repositories {jcenter()}dependencies {//Google提供的構(gòu)建Android項(xiàng)目的插件classpath 'com.android.tools.build:gradle:2.3.3'//GreenDao 提供的插件classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'//Jcenter提供的插件classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'//Maven提供的插件classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'} }

那么,Gradle 在根據(jù) build.gradle 構(gòu)建 Module 時(shí),怎么知道要使用哪個(gè)插件呢,聲明了這么多。

這就是為什么在每個(gè) Module 的 build.gradle 文件的開頭有行 apply plugin 的代碼了。

apply 是 Gradle 的方法,它可以接收一個(gè) map 類型的參數(shù),而在 Groovy 中,map 的定義可以直接 'key': value,也就是說:

apply plugin: 'com.android.application' //等效于 // def map = ['plugin':'com.android.application'] // apply(map)

每個(gè) build.gradle 開頭這行代碼,其實(shí)是調(diào)用了 Gradle 的 apply() 方法,然后傳入了一個(gè) map 值,key 為 plugin, value 為 ‘com.android.application',那么 Gradle 就知道了你這個(gè)項(xiàng)目需要使用到一個(gè) id 為 'com.android.application' 的插件來輔助構(gòu)建了,那么它就會(huì)去你在根目錄下配置的插件列表里尋找。

也就是說,apply plugin 是 Gradle 規(guī)定并提供的,但 'com.android.application' 則是由 Android Gradle 來提供的。

那么,小結(jié)一下,要使用一個(gè) Gradle 插件的話,先得在根目錄下聲明你要用的插件以及版本,當(dāng)然也得指定插件的下載地址,然后在你具體的 Module 的 build.gradle 的開頭通過 apply plugin 方式來應(yīng)用插件,這個(gè)插件得有一個(gè)唯一區(qū)分開的 id 值。

4. 區(qū)分 Gradle 和 Android Gradle

先來看張圖,這個(gè)在 File -> Project Structure -> Project 打開,在這里可以配置 Gradle 和 Android Gradle 插件的版本。

最開始接觸的時(shí)候,我看到這里是有些迷茫的,怎么有一個(gè) Gradle 版本,又有一個(gè) Android Gradle 版本。當(dāng)別人問我你 Android Studio 使用的 Gradle 版本是多少時(shí),我也傻乎乎的打開根目錄下的 build.gradle 文件里,看到 com.android.tools.build:gradle:2.3.3,然后跟他說 2.3.3 版本,當(dāng)初根本沒搞清楚這兩個(gè)有什么區(qū)別,一直以為是同一個(gè)東西。

所以,要搞清楚 Android Gradle 其實(shí)只是 Gradle 的一個(gè)插件,是 Google 基于 Gradle 提供的插件接口所做的一些擴(kuò)展。

所以,要查找 Android Gradle 的相關(guān)資料,自然就不是去 Gradle 官網(wǎng)了,而是要去 Android 官網(wǎng)找:

https://developer.android.google.cn/studio/releases/gradle-plugin

由于 Gradle 更新?lián)Q代很快,又經(jīng)常提供一些新特性,所以 Android Gradle 插件也就跟隨著發(fā)布了很多版本,所以,Android Gradle 的版本并不是可以任意更改的,因?yàn)樗腔诿恳粋€(gè) Gradle 版本開發(fā)的,因此需要在對(duì)應(yīng)的 Gradle 版本中才能使用。

這也是為什么,我們有時(shí)候直接修改根目錄下的 build.gradle 中的 Android Gradle 版本時(shí),會(huì)報(bào)一些錯(cuò)誤說需要 Gradle 版本在多少在可以使用的原因,至于這些對(duì)應(yīng)關(guān)系,官網(wǎng)當(dāng)然有給出來了:

舉個(gè)例子,如果你 Gradle 版本使用的是 3.3,然后你在 Github 上 clone 了某個(gè)人的項(xiàng)目,他的項(xiàng)目中使用的 4.4 的 Gradle 版本 和 3.1.0 的 Android Gradle 插件,但是你發(fā)現(xiàn)在打開這個(gè)項(xiàng)目的時(shí)一直處于構(gòu)建中,一直打不開。

你查了下原因,網(wǎng)上有教程說,讓你將項(xiàng)目中的 gradle/wrapper 文件里的 Gradle 版本換成你本地項(xiàng)目中的 Gradle 版本,還跟你說因?yàn)樗褂玫陌姹灸惚镜貨]有,而且被墻了,你下載需要很長(zhǎng)時(shí)間,讓你直接改成使用你本地的版本即可。

你改了后,發(fā)現(xiàn),是可以打開項(xiàng)目了,但構(gòu)建的時(shí)候又報(bào)錯(cuò)了,說你使用了 3.1.0 的 Android Gradle 插件,需要讓你將 Gradle 版本改成 4.4 才可以正常構(gòu)建,這 MMP 不是又繞回去了。

所以說,別聽他放屁,搞清楚了 Gradle 和 Android Gradle 插件的關(guān)系之后。那為什么會(huì)一直在構(gòu)建中,為什么會(huì)報(bào)錯(cuò)我們心里就有數(shù)了,要解決,沒有其他辦法,就是要將對(duì)應(yīng)的版本下載下來。

所以,你應(yīng)該去搜的是如何下載,Android Gradle 插件并沒有被墻,如果想自行下載,可以參考我之前的博客: 如何用Android Studio查看build.gradle源碼,而至于 Gradle 要如何下載,如果官網(wǎng)下載不了,那就去搜搜有沒有相關(guān)的鏡像吧。


本篇就先到這里了,還會(huì)有一篇下篇,下篇的內(nèi)容就是側(cè)重于介紹 build.gradle 里各種配置項(xiàng)的作用和意義了,還有就是如何自己寫 Gradle 腳本來運(yùn)行,敬請(qǐng)期待~



最近(2018-03)剛開通了公眾號(hào),想激勵(lì)自己堅(jiān)持寫作下去,初期主要分享原創(chuàng)的Android或Android-Tv方面的小知識(shí),準(zhǔn)備可能還有點(diǎn)不足,感興趣的可以先點(diǎn)一波關(guān)注,謝謝支持~~

轉(zhuǎn)載于:https://www.cnblogs.com/dasusu/p/9085174.html

總結(jié)

以上是生活随笔為你收集整理的读书笔记--Android Gradle权威指南(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。