gradle构建问题总结

1 篇文章 0 订阅
1 篇文章 0 订阅

一 : 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新版插件中,更新了一个新特性,

      叫做注解处理器依赖项配置。具体可以参考官方文档说明:

      https://developer.android.google.cn/studio/build/gradle-plugin-3-0-0-migration#annotationProcessor_config

      貌似是为了解决他所说的性能问题。才添加了一个这样的配置项,如果你不进行配置,则无法编译通过。

        

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上下载一个完整的源码后。可能就会遇到各种各样的构建编译问题。目前没有

一份完美的配置解决办法。所以有些坑还是必须要经历的。

         

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值