一辅搬、背景
近期由于部分需求開發(fā)需要將Gradle和Android Gradle Plugin進(jìn)行升級到3.0.0以上,由于項(xiàng)目是運(yùn)行在專門的編譯機(jī)器進(jìn)行編譯夺姑,升級的話就要讓運(yùn)維將Gradle文件和Android Gradle Plugin依賴的所有文件放置到一個特定的文件夾里面扑馁,這樣其實(shí)很麻煩,于是萌生了將Gradle和Android Gradle Plugin放置到項(xiàng)目目錄下并進(jìn)行依賴狼讨。
二、利用Maven下載Android Gradle Plugin所有依賴的文件
首先創(chuàng)建一個文件命名為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>
對于Maven不熟悉可以參考這個【教程】 政供。上面<repositories>標(biāo)簽聲明了我們在build.gradle中g(shù)oogle()和jcenter()的Maven庫地址。dependencies則聲明了我們這個項(xiàng)目需要依賴的庫,這里是需要下載Android Gradle Plugin(com.android.tools.build:gradle:3.1.0)布隔,如果是要下載一個庫和其依賴的庫离陶,只要修改上面的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類型的插件或依賴庫哀军,因此需要加上沉眶。
mvn -f pom.xml dependency:copy-dependencies -U
運(yùn)行完畢會將依賴庫下載在target\dependency目錄下,Android Gradle Plugin 3.1.0版本互相依賴的庫總共有72個杉适,大約71M多谎倔。
三、修改build.Gradle依賴關(guān)系
首先將target\dependency下所有文件復(fù)制到項(xiàng)目根目錄下的任意一個文件夾猿推,這里我命名為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'])配置語句。
buildscript {
repositories {
google()
jcenter()
}
dependencies {
//classpath 'com.android.tools.build:gradle:3.1.0'
//依賴于本地庫
classpath fileTree(dir: 'build-tools/gradle-plugin', include: ['*.jar'])
}
}
allprojects {
repositories {
google()
jcenter()
}
}
gradle-wrapper.properties文件下的gradle文件也修改成相對路徑哭靖,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本地庫)
上面的做法雖然可以依賴试幽,但是卻不能使用原來classpath 'com.android.tools.build:gradle:3.1.0'的依賴方式筝蚕,因此接下來是將gradle依賴的庫文件按maven庫形式下載下來。
首先將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,這時候mvn就會將com.android.tools.build:gradle所依賴的jar下載到D:/maven-jar中济榨,jar以及pom文件都會下載下來坯沪,這時候就可以在gradle里面設(shè)置maven本地庫了 maven {url “file:\D:\maven-jar”}了。
五擒滑、升級Android Gradle Plugin 3.0遇到的問題
- 升級multidex到1.0.2
multidex需要升級到1.0.2并需要在module的buold.gradle里面增加以下配置以解決包依賴重復(fù)的問題
configurations {
all*.exclude group:'com.android.support', module:'multidex'
all*.exclude group:'com.android.support', module:'multidex-instrumentation'
}
- windowEnterAnimation和windowExitAnimation not found 問題
編譯出現(xià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