利用Maven下載Android Gradle Plugin依賴的庫以及升級Android Gradle Plugin 3.0遇到的問題

一、背景

近期由于部分需求開發需要將Gradle和Android Gradle Plugin進行升級到3.0.0以上,由于項目是運行在專門的編譯機器進行編譯,升級的話就要讓運維將Gradle文件和Android Gradle Plugin依賴的所有文件放置到一個特定的文件夾里面,這樣其實很麻煩,于是萌生了將Gradle和Android Gradle Plugin放置到項目目錄下并進行依賴。

二、利用Maven下載Android Gradle Plugin所有依賴的文件

首先創建一個文件命名為pom.xml,文件內容如下

<?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>標簽聲明了我們在build.gradle中google()和jcenter()的Maven庫地址。dependencies則聲明了我們這個項目需要依賴的庫,這里是需要下載Android Gradle Plugin(com.android.tools.build:gradle:3.1.0),如果是要下載一個庫和其依賴的庫,只要修改上面的Maven坐標就可以。

pom.xml創建完畢則可以運行以下Maven命令, 進行這一步驟前需要先下載安裝maven并配置環境變量。這一條命令是利用了maven的dependency插件實現copy-dependencies目標操作,-U 是強制更新snapshot類型的插件或依賴庫,因此需要加上。

mvn -f pom.xml dependency:copy-dependencies -U

運行完畢會將依賴庫下載在target\dependency目錄下,Android Gradle Plugin 3.1.0版本互相依賴的庫總共有72個,大約71M多。

image.png

三、修改build.Gradle依賴關系

首先將target\dependency下所有文件復制到項目根目錄下的任意一個文件夾,這里我命名為build-tools\gradle-plugin,并將gradle-4.4.all.zip下載放到build-tools目錄下。

image.png

接著修改根目錄的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所在文件夾下執行mvn install,這時候mvn就會將com.android.tools.build:gradle所依賴的jar下載到D:/maven-jar中,jar以及pom文件都會下載下來,這時候就可以在gradle里面設置maven本地庫了 maven {url “file:\D:\maven-jar”}了。


image.png

五、升級Android Gradle Plugin 3.0遇到的問題

  1. 升級multidex到1.0.2

multidex需要升級到1.0.2并需要在module的buold.gradle里面增加以下配置以解決包依賴重復的問題

configurations {
    all*.exclude group:'com.android.support', module:'multidex'
    all*.exclude group:'com.android.support', module:'multidex-instrumentation'
}

  1. windowEnterAnimation和windowExitAnimation not found 問題
    編譯出現以下問題
Error:(22, 5) style attribute '@android:attr/windowEnterAnimation' not found
Error:(22, 5) style attribute '@android:attr/windowExitAnimation' not found

這是aapt2導致的,3.0默認啟用了aapt2。解決辦法就是在project的根目錄下的gradle.properties最后添加關閉aapt2的代碼:

android.enableAapt2=false
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容