一、背景
近期由于部分需求开发需要将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不熟悉可以参考这个【教程】 。上面
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多。
三、修改build.Gradle依赖关系
首先将target\dependency下所有文件复制到项目根目录下的任意一个文件夹,这里我命名为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的目录
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”}了。
五、升级Android Gradle Plugin 3.0遇到的问题
- 升级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'
}
- 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