为什么我要升级
要不是生活所迫,谁又愿意开坦克呢。稳稳定定的也挺香的。 最近接入了极光推送,极光推送里面的多渠道包。迫使我升级Gradle才能成功。
升级完之后发现黄油刀(Butter Knife)不能用了
网上有一种方案是在app module 中的 defaultConfig加入:
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath true
}
}
但是这种方案不起作用,我先说一下我的项目结构,黄油刀是在library里,app引入library,升级完Gradle之后能跑起来工程,但是进去就挂了,空指针异常。检查了之后是黄油刀没有生效。
最后我的解决方案是:
在app module 里面加入这一行
annotationProcessor 'com.jakewharton:butterknife-compiler:8.7.0'
注意:只需要这一行~ 而且不是
api 'com.jakewharton:butterknife:8.7.0'
我是从2.3的Gradle版本 升级到了3.4.0
//展示主要修改的部分
buildscript {
ext.kotlin_version = '1.3.71'
repositories {
// maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'}
maven { url'https://maven.aliyun.com/repository/public/' }
maven { url'https://maven.aliyun.com/repository/google/' }
maven { url'https://maven.aliyun.com/repository/jcenter/' }
maven { url'https://maven.aliyun.com/repository/central/' }
mavenCentral()
mavenLocal()
google()
jcenter()
maven { url 'https://dl.bintray.com/umsdk/release' }
maven { url "https://maven.google.com" }
maven { url "https://jitpack.io" }
maven {url 'http://developer.huawei.com/repo/'}
// maven { url "http://lib.gcssloop.com:8081/repository/gcssloop-central/" }
// google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
........
}
中间有碰到kotlin版本报错的,请自觉升级kotlin版本,貌似kotlin版本和Gradle 版本也有一些关联,版本号需要注意一下哈~
然后就是一些提示我support-v4没有的错误
于是我添加了
api('com.android.support:support-v4:28.0.0') {
transitive = false
exclude group: 'android.arch.core:runtime:1.1.0'
}
上面代码里的exclude group是因为我引入了很多第三方的东西,然后这些第三方的库他们也用了不同版本的v4、v7 ,然后我百度:Gradle 引入重复冲突。 一个一个去解决。 不过最后我用的方法是:报错哪个库,我就直接把库单独引入一份。
api fileTree(include: ['*.jar'], dir: 'libs')
api 'com.android.support:design:28.0.0'
api('com.android.support:appcompat-v7:28.0.0') {
transitive = false
exclude group: 'com.android.support:support-v4:26.0.2'
exclude group: 'com.caimuhao:rxpicker:1.1.4'
exclude group: 'com.android.support:coordinatorlayout:28.0.0'
exclude group: 'com.android.support:design:25.3.1'
}
例如这个com.android.support:design:25.3.1就很多份重复,也可以看到我v7包里面有写剔除,但是没用(肯定是是我不会用,大佬们求指正)。因为Gradle 会用最高版本的那一份(老大优先?) 所以我干脆直接引入一份新的design。
升级碰到最多的就是这个问题冲突
其次就是一些第三方库也要一起更新
Gradle命令打包的命名方式也修改了
以前:
applicationVariants.all {
variant ->
variant.outputs.each {
output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = "xxx_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
现在:
applicationVariants.all {
variant ->
variant.outputs.all {
output ->
outputFileName = "xxx_v${defaultConfig.versionName}_${defaultConfig.versionCode}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
}
}