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

一、背景

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

二、利用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則聲明了我們這個項目需要依賴的庫,這里是需要下載Android Gradle Plugin(com.android.tools.build:gradle:3.1.0),如果是要下載一個庫和其依賴的庫,只要修改上面的Maven坐標(biāo)就可以。

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

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

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

image.png

三、修改build.Gradle依賴關(guān)系

首先將target\dependency下所有文件復(fù)制到項目根目錄下的任意一個文件夾,這里我命名為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所在文件夾下執(zhí)行mvn install,這時候mvn就會將com.android.tools.build:gradle所依賴的jar下載到D:/maven-jar中,jar以及pom文件都會下載下來,這時候就可以在gradle里面設(shè)置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里面增加以下配置以解決包依賴重復(fù)的問題

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

  1. 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • 以下內(nèi)容均為個人理解,如果有描述不正確的地方,歡迎指正轉(zhuǎn)載請注明原文鏈接 Gradle簡介 開始填坑之前,先簡單聊...
    大魚魚小仙人閱讀 67,994評論 10 60
  • 說明 本文主要介紹和Gradle關(guān)系密切、相對不容易理解的配置,偏重概念介紹。部分內(nèi)容是Android特有的(例如...
    搬磚的小明閱讀 16,140評論 1 62
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 周記,每周都記。
    明月桑閱讀 339評論 0 0

友情鏈接更多精彩內(nèi)容