利用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,文件内容如下



    4.0.0
    com.dep.download
    dep-download
    1.0-SNAPSHOT

     
          
            google  
            https://dl.google.com/dl/android/maven2/  

            
                true
                daily
            
            
                false
                warn
            
            default
          

          
            jcenter  
            
                true
                daily
            
            
                false
                warn
            
            default
            https://jcenter.bintray.com/  
          
      

    
        
            com.android.tools.build
            gradle
            3.1.0
            compile
        

    


对于Maven不熟悉可以参考这个【教程】 。上面标签声明了我们在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的目录

  
  
  D:/maven-jar

接着在上面提及到的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

你可能感兴趣的:(利用Maven下载Android Gradle Plugin依赖的库以及升级Android Gradle Plugin 3.0遇到的问题)