1、背景:最近升级了AS,发现了几个致命的坑,为什么说是致命,因为解决时间很长影响了正常的开发时间。
2、问题一描述:
升级后第一次肯定是遇到这个问题,引入的第三方工程中依赖的包报红。上网查了查,这个倒是一个很简单问题。
升级gradle版本和gradle插件。
1、旧版本gradle插件比如大家是这样的:
你需要替换成比如这个版本或者这个版本以上的:
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
}
2、旧版本的gradle比如大家是这样的:
你需要替换成这样的版本或以上的:
#Tue Feb 12 15:41:56 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
3、OK替换完之后 还报红???
那是大家将引入的第三方工程的依赖包全都设置成了implementation,为什么不能设置成implementation?
新版本需要我们将compile替换成implementation,当然我们不能完全都替换成implementation,我们先来看一下implementation和compile的故事:api或compile关键字引用的包对于其他module来说是可见的,而implementation关键字引用的包对于其他module来说是不可见的。
意思就是:在主工程中大家部分调用的方法,主工程并没有相应依赖lib,这些lib是依赖于引用的第三方项目中的, 在旧版本的Gradle时,使用的compile关键字引用的包对于其他module来说是可见的即主module是可以直接调用使用的。替换为implementation后这些部分使用到其他module中依赖包的方法就会报红。
OK,知道原因后,我们该怎么做?将报红的一些第三方工程依赖包的关键字从implementation改为api 比如这样:
报红问题解决后,我们试着运行一下,哎呀,运行失败。
3、问题二描述:
运行失败,我们将迎来另一个网上众说纷纭的问题。
大家看到这个是不是崩溃了,有人试过翻墙网络代理设置的方法,有人试过重启AS clean项目的方法,有人试过改gradle版本的方法等等等等,我都试过,没有一点用好吧。来看我如何解决,希望对大家有所帮助:
这个问题很简单,就是像文中所说的module没有找到相应的配置。
大家的除主工程外的module的buildTypes应该是这样配置的:
升级gradle版本之前这些配置是没有一点问题的,升级之后我们需要改为这样的配置:
buildTypes {
debug {
}
web6 {
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}