前言
Gradle是Android Studio采用的构建工具,给我们的开发提供了诸多便利,但是在使用Gradle的过程中,也有一些需要注意的地方,本文主要记录一下使用Gradle的一些常见问题和技巧。
- Gradle插件版本配置
配置在项目的build.gradle文件中
- Gradle版本配置
配置在项目根目录\gradle\wrapper下的gradle-wrapper.properties文件中
- 版本对应关系
我们在新建或打开一个项目时需要注意项目的Gradle版本,配置在项目根目录\gradle\wrapper下的gradle-wrapper.properties文件中,如果我们本地没有该版本的Gradle,就会从网络下载,由于网络的原因,有时下载得会很慢。我们可以提前将相应版本的Gradle下载到本地,这样就省去了项目在build过程中下载Gradle的时间。
我们的项目引入第三方库有时会遇到support包冲突的问题,原因就是第三库也引入了support包,但是和我们自己项目中的support包版本不一致。
首先我们要知道是哪个第三方库导致的冲突,在Android Studio的Terminal中运行gradle -q app:dependencies
命令,会打印出项目中所有的依赖库,包括第三方库自身的依赖。
这里我们可以看出我引入的PhotoVIew这个第三方库依赖的support包版本为23.0.0,但是我的项目依赖的support包版本为28.0.0,因此冲突就是这个库导致的。
解决support包版本冲突的方法主要有以下三种:
1)修改自己项目的support包版本,不推荐这样做
2)依赖第三方库时排除对support包的依赖
implementation('com.github.chrisbanes:PhotoView:1.2.6') {
exclude module: 'support-v4'
exclude group: 'com.android.support'
}
当有多个第三方库都引入了support包,需要每个依赖都去排除,这种方法就不太适合了。
3)指定统一的support包版本
在app下的build.gradle文件中添加以下代码:
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28.0.0'
}
}
}
}
4)将项目迁移到AndroidX,虽然这是官方的解决方案,但是目前还有一些坑,需要谨慎操作。
在开发过程中,特别是涉及到模块化开发的时候,为了保证全部模块都使用同一个依赖库的管理,一般有两种方法:
1)新建config.gradle文件,里面配置第三方库的依赖
- 在项目根目录下新建一个config.gradle文件(文件名随意),配置所有的第三方库依赖
- 在Project的build.gradle文件中添加依赖
- 在相应的子模块中使用
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
defaultConfig {
applicationId "com.zk.wanandroid"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
...
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
// Android support
implementation rootProject.ext.dependencies["appcompat-v7"]
implementation rootProject.ext.dependencies["design"]
implementation rootProject.ext.dependencies["cardview"]
implementation rootProject.ext.dependencies["constraint-layout"]
...
}
2)直接在Project的build.gradle文件下添加ext{}结点,配置依赖
其实就是相当于将config.gradle文件中的内容移到了build.gradle中,使用方法同上。