gradle构建问题总结
一 : gradle插件仓库源的修改1:问题原因分析由于需要使用 Gradle 仓库中心的项目,下载速度又比较慢,jcenter 不稳定,可能导致有些jar包无法正常下载下来,导致项目无法编译通过,这个时候我们把 gradle maven仓库源地址给换成国内镜像仓库。就能解决该问题,避免编译时会导致下载库超时的一些问题,同时gradle支持添加多个代码仓库镜像,所以...
一 : gradle插件仓库源的修改
1:问题原因分析
由于需要使用 Gradle 仓库中心的项目,下载速度又比较慢,jcenter 不稳定,可能导致有些jar包无法正常下载下来
,导致项目无法编译通过,这个时候我们把 gradle maven仓库源地址给换成国内镜像仓库。就能解决该问题,避免编译时会导致下载库超时的一些问题,同时gradle支持添加多个代码仓库镜像,所以只需要添加新的
镜像仓库就可以解决编译时无法下载一些第三方库的问题
2:修改方式
针对以上问题修改android项目中的build.gradle中
repositories{
jcenter() //jcenter镜像仓库地址
google() //google仓库地址
maven{ url'http://maven.aliyun.com/nexus/content/groups/public/‘} // 阿里云新增的maven地址
}
当然除了以上方式,你还可以直接去仓库搜索你需要的jar或arr包,下载到本地通过本地引用方式导入进来。
二:NDK不同版本编译报错
1:问题原因分析
大家都知道build.gredle中,可以指定gradle插件版本 com.android.tools.build:gradle:3.0
然而我们从github上拉一些开源的项目代码,你的studio 版本与作者的studio版本不一致。
比如studio 3.3你用gradle:2.2的版本进行编译项目的话
会直接提示你升级gradle版本,否则就报错ERROR: No toolchains found in the NDK toolchains folder for ABI。
大概意思是:找不到mips64el-linux-android的工具链,与gradle当前版本不兼容。
具体原因请看NDK历史版本更新记录:
https://developer.android.google.cn/ndk/downloads/revision_history
貌似在NDK 16之后的版本就删除了对mips64el的支持.而studio新版本则默认下载的就是18的NDK
2:解决方法
解决的办法有3个
1:降低NDK版本 降低到16
2:升级gradle版本 (升级gradle之后可能会导致(问题3))
3:如果您的项目中不需要引用到NDK,可以直接删除NDK
三:gradle插件升级后JAR包冲突问题
1:问题原因分析
有时候大家从github上下载了源代码,然后因为种种原因升级了gradle版本,导致引发了新的问题
大家不知道的是gradle插件版本与buildToolsVersion版本有着很深的关系,升级某些gradle版本,
也同时需要升级buildToolsVersion版本。
问题就来了buildToolsVersion在高版本中有自带v4包(具体是从哪个版本开始我也不知道)。
这个时候如果你项目中有引用v4,或者你依赖的第三方库中使用到v4包,v4包版本又不一致或使用的动态版本
,这个时候会出现编译失败:finished with non-zero exit value 1,或者提示找不到v4中的某个类。
那是因为2个jar包冲突了。
2:解决方法
解决办法有3个
1:gradle支持新的jar引入方式compileOnly(意思是只在编译时用到)。并不会真真打包到apk里去。
所以在自己引入v4包的时候使用compileOnly方式引用。
使用compileOnly不能解决当你引用的第三方库使用了v4包与你的buildToolsVersion带的V4包
冲突的问题。(更新第三方库的版本或使用以下暴力方法)
2: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 '25.3.0'
}
}
}
}
3:build.gradle排除依赖中的指定包
compile ('com.mcxiaoke.viewpagerindicator:library:2.4.1') {
exclude group: 'com.android.support'
}
四:gradle插件升级后注解兼容性问题
1:问题原因分析
1:像一些项目中有使用到注解比如:butterknife, 在gradle新版插件中,更新了一个新特性,
叫做注解处理器依赖项配置。具体可以参考官方文档说明:
貌似是为了解决他所说的性能问题。才添加了一个这样的配置项,如果你不进行配置,则无法编译通过。
2:解决办法有2个
1:使用新版gradle插件时,必须显式声明支持注解
annotationProcessor 依赖项配置将注解处理器添加到处理器类路径中,如下所示:
dependencies {
annotationProcessor 'com.google.dagger:dagger-compiler:<version-number>'
}
2:直接停用检查
android { ...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath false
}
}
}
}
了解到gradle配置后,会发现升级gradle或升级开发工具,会带来各种各样的编译问题。
1:gradle 插件版本问题
2:studio 开发工具版本问题
3:第三方依赖包的问题
当你从github上下载一个完整的源码后。可能就会遇到各种各样的构建编译问题。目前没有
一份完美的配置解决办法。所以有些坑还是必须要经历的。
更多推荐
所有评论(0)