一、背景
近期由于部分需求開(kāi)發(fā)需要將Gradle和Android Gradle Plugin進(jìn)行升級(jí)到3.0.0以上,由于項(xiàng)目是運(yùn)行在專門(mén)的編譯機(jī)器進(jìn)行編譯,升級(jí)的話就要讓運(yùn)維將Gradle文件和Android Gradle Plugin依賴的所有文件放置到一個(gè)特定的文件夾里面,這樣其實(shí)很麻煩,于是萌生了將Gradle和Android Gradle Plugin放置到項(xiàng)目目錄下并進(jìn)行依賴。
二、利用Maven下載Android Gradle Plugin所有依賴的文件
首先創(chuàng)建一個(gè)文件命名為pom.xml,文件內(nèi)容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dep.download</groupId>
<artifactId>dep-download</artifactId>
<version>1.0-SNAPSHOT</version>
<repositories>
<repository>
<id>google</id>
<url>https://dl.google.com/dl/android/maven2/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<layout>default</layout>
</repository>
<repository>
<id>jcenter</id>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<layout>default</layout>
<url>https://jcenter.bintray.com/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.android.tools.build</groupId>
<artifactId>gradle</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
對(duì)于Maven不熟悉可以參考這個(gè)【教程】 。上面<repositories>標(biāo)簽聲明了我們?cè)赽uild.gradle中g(shù)oogle()和jcenter()的Maven庫(kù)地址。dependencies則聲明了我們這個(gè)項(xiàng)目需要依賴的庫(kù),這里是需要下載Android Gradle Plugin(com.android.tools.build:gradle:3.1.0),如果是要下載一個(gè)庫(kù)和其依賴的庫(kù),只要修改上面的Maven坐標(biāo)就可以。
pom.xml創(chuàng)建完畢則可以運(yùn)行以下Maven命令, 進(jìn)行這一步驟前需要先下載安裝maven并配置環(huán)境變量。這一條命令是利用了maven的dependency插件實(shí)現(xiàn)copy-dependencies目標(biāo)操作,-U 是強(qiáng)制更新snapshot類型的插件或依賴庫(kù),因此需要加上。
mvn -f pom.xml dependency:copy-dependencies -U
運(yùn)行完畢會(huì)將依賴庫(kù)下載在target\dependency目錄下,Android Gradle Plugin 3.1.0版本互相依賴的庫(kù)總共有72個(gè),大約71M多。

三、修改build.Gradle依賴關(guān)系
首先將target\dependency下所有文件復(fù)制到項(xiàng)目根目錄下的任意一個(gè)文件夾,這里我命名為build-tools\gradle-plugin,并將gradle-4.4.all.zip下載放到build-tools目錄下。

接著修改根目錄的build.gradle文件,將 classpath 'com.android.tools.build:gradle:3.1.0' 注釋并增加 classpath fileTree(dir: 'build-tools/gradle-plugin', include: ['*.jar'])配置語(yǔ)句。
buildscript {
repositories {
google()
jcenter()
}
dependencies {
//classpath 'com.android.tools.build:gradle:3.1.0'
//依賴于本地庫(kù)
classpath fileTree(dir: 'build-tools/gradle-plugin', include: ['*.jar'])
}
}
allprojects {
repositories {
google()
jcenter()
}
}
gradle-wrapper.properties文件下的gradle文件也修改成相對(duì)路徑,distributionUrl=../../build-tools/gradle-4.4-all.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=../../build-tools/gradle-4.4-all.zip
這樣就能將Gradle和Android Gradle Plugin修改成依賴自己下載的文件。
四、利用Maven下載Android Gradle Plugin依賴的文件(Maven本地庫(kù))
上面的做法雖然可以依賴,但是卻不能使用原來(lái)classpath 'com.android.tools.build:gradle:3.1.0'的依賴方式,因此接下來(lái)是將gradle依賴的庫(kù)文件按maven庫(kù)形式下載下來(lái)。
首先將maven安裝目錄E:\apache-maven-3.5.3\E:\apache-maven-3.5.3\conf\settings.xml中將localRepository修改自定義目錄,這里修改為D:/maven-jar,這就是maven下載后jar的目錄
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:/maven-jar</localRepository>
接著在上面提及到的pom.xml所在文件夾下執(zhí)行mvn install,這時(shí)候mvn就會(huì)將com.android.tools.build:gradle所依賴的jar下載到D:/maven-jar中,jar以及pom文件都會(huì)下載下來(lái),這時(shí)候就可以在gradle里面設(shè)置maven本地庫(kù)了 maven {url “file:\D:\maven-jar”}了。

五、升級(jí)Android Gradle Plugin 3.0遇到的問(wèn)題
- 升級(jí)multidex到1.0.2
multidex需要升級(jí)到1.0.2并需要在module的buold.gradle里面增加以下配置以解決包依賴重復(fù)的問(wèn)題
configurations {
all*.exclude group:'com.android.support', module:'multidex'
all*.exclude group:'com.android.support', module:'multidex-instrumentation'
}
- windowEnterAnimation和windowExitAnimation not found 問(wèn)題
編譯出現(xiàn)以下問(wèn)題
Error:(22, 5) style attribute '@android:attr/windowEnterAnimation' not found
Error:(22, 5) style attribute '@android:attr/windowExitAnimation' not found
這是aapt2導(dǎo)致的,3.0默認(rèn)啟用了aapt2。解決辦法就是在project的根目錄下的gradle.properties最后添加關(guān)閉aapt2的代碼:
android.enableAapt2=false