序言
最近将Gradle从4.0.1 升级到 8.4.2 遇到了很多坑,记录下来帮助有缘人
升级gradle
修改根目录的build.gradle
dependencies {
classpath 'com.android.tools.build:gradle:8.4.2'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.0'
}
修改gradle-wrapper.properties
#Thu Aug 13 10:10:41 CST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
使用升级助手
使用升级助手可以节约一些时间
解决遇到的坑
1.默认不支持明文传输
需要在所有使用了http协议的仓库中配置 allowInsecureProtocol
maven {
url "https://mvn.mob.com/android"
allowInsecureProtocol = true
}
2.默认不生产BuildConfig类
需要在要使用BuildConfig的module级别的build.gradle文件中配置
android.buildFeatures.buildConfig true
3.配置namespace
之前配置在清单文件的package需要配置到gradle中
4.配置java版本
需要支持java 17 ,所有build.gradle文件都需要修改
5.缺少 ‘javax.servlet.http.HttpServlet’
升级过程中遇到这个问题,之前的低版本都可以,现在找不到类了。
需要手动引入
implementation 'javax.servlet:javax.servlet-api:3.1.0'
6. 启动R文件合并
gralde 8.4.2 关闭了R文件合并功能需要开启
修改gradle.properties文件添加
android.nonTransitiveRClass=false
7.RenderScript 包名修改
需要把包名修改。
原来是
import androidx.renderscript.Allocation;
import androidx.renderscript.Element;
import androidx.renderscript.RenderScript;
import androidx.renderscript.ScriptIntrinsicBlur;
修改为
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.ScriptIntrinsicBlur;
也就是把androidx 改为 android