Android Studio升级3.0及以上版本后,升级gradle版本引发的问题,最全解决方案

Android Studio升级3.0及以上版本后,升级gradle版本引发的问题,最全解决方案

  1. 我的电脑升级到的版本是Android Studio 3.6;
    项目升级gradle从3.5到4.4(这里指的是gradle/wrapper/gradle-wrapper.properties中的版本)
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

同时,将根目录中的build.gradle中的gradle更新到了3.1.4,原来是2.2.3
classpath’com.android.tools.build:gradle:3.1.4’
2. 之后就是漫长的等待,然后就报错了

Error:Cannotchoose between the following configurations of project :alarmscene:
- debugApiElements
- debugRuntimeElements
- releaseApiElements
- releaseRuntimeElements
  1. 上网搜索了一下解决方案,在stackoverflow 上看到一个解决方案
    地址:https://stackoverflow.com/questions/45679847/android-studio-3-0-compile-issue-cannot-choose-between-configurations
    就是 compile project(path: ‘:alarmscene’, configuration: ‘default’)
    但是:这个解决方案慎用,我用了之后导致出现了其他的意想不到的bug(依赖库中的jar包中的API不能使用了,这个问题研究了好久,最后把configuration: 'default’删除掉才好了,还是自己对gradle不够了解)

  2. 再次编译之后竟然好了,小项目上的问题果然少,在我的另一个大项目上还出现了一个问题:

Failed to transform file 'xxx.aar' to match attributes {artifactType=android-exploded-aar} using transform ExtractAarTransform

网上我看到有个同行是这么说的:

这个问题也折腾了挺长时间的,实际上就是你的项目中有bug,导致你的那个想要的aar没有生成,你可能想我之前没bug呀,这也没办法,切换的时候会生成一些莫名其妙的bug。但是有bug你就提示bug吧,提示上面的问题就是google的不对了。好在在网上找到了2种解决方案,一种是把gradle版本降下去,这个虽然可以解决问题,但我不提倡,不能回避问题嘛。第二种方案是清除缓存文件,将C:\Users\\.gradle\caches\transforms-1删除,重新编译项目,你的bug就暴露出来了,但是只是一次,你再编译又出现上面的错误提示了。所以,要先将暴露出来的bug解决掉了,(我开始就是以为不是bug呢,结果再次编译就不报哪个bug了,然后就陷入了死循环)。解决掉bug后再次编译还可能会出现上面错误提示,那就是还有bug呗,再清缓存,再编译,再解决bug,直到编译通过。
  1. 我试了上面这种做法,发现还是无法解决不了上面的编译错误。经过一番百度,终于找到了解决此问题的方法:https://www.jianshu.com/p/2c50305d7e21
    总结来说就是一句话:看看你的app的buildTypes节点是否和module中的buildTypes节点一致
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
        }
        product {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
            versionNameSuffix "${VERSION_NAME_SUFFIX}"
        }
        prerelease {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
            versionNameSuffix "${VERSION_NAME_SUFFIX}"
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.HetConfig
            versionNameSuffix "${VERSION_NAME_SUFFIX}"
        }
    }

以上是我app的build.gradle文件中buildTypes的四个节点。但是我的module只有release这一个节点,加上后,在编译就OK了。

    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        product {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        prerelease {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
  1. 从开始升级gradle,到彻底解决。整整花了2天时间,希望总结出来的对大家有用!

你可能感兴趣的:(Android笔记(难点))