Gradle7适配指南

一、必要性

android build-tools升级到31.0.0(S)后,会强制要求升级到gradle7,否则无法编译。gradle7废弃了大量的api,增加了更严格的安全限制,导致适配难度较大。

使用gradle7:
在gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip

然后修改gradle-build版本7.0.0+

prop_gradleVersion=7.0.3

二、适配

2.1 maven适配

gradle7不推荐使用http协议,内部的maven不支持https,添加以下配置即可

maven {
    // 允许使用http协议
    allowInsecureProtocol = true
    url mavenUrlRelease
}

2.1.1 PC maven适配

PC maven如果是原来的方式,还是会查找http的仓库,需要修改如下:

在settings.gradle中:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven {
            allowInsecureProtocol = true
            url mavenUrlRelease
        }
    }
}

之后删除根build.gradle的allprojects配置

2.2 gradle插件适配

说明:如果是其他插件编译报错,尝试更新到最新版本

gradle7对增量编译更严格,要求所有的插件都具备增量编译的功能。所有的属性,都必须添加注解的。
适配方法:

  • 添加static,变成静态常量
  • 添加 @Internal注解,跳过检测,但是会导致增量编译效果不佳。
  • 添加 @Input注解,表示是输入文件夹
  • 详情:https://cloud.tencent.com/developer/article/1787558

2.3 JDK适配

gradle7强制要求使用java11,本地需要修改用JDK为Java11;

2.4 其他问题记录

2.4.1 res没压缩,导致apk增大,或者res文件被混淆了

在gradle.properties

# Ensure that resources in `res` are not optimization
android.enableResourceOptimizations=false

2.4.2 so没压缩,导致apk增大

  

2.4.3 dex没压缩


在android标签内

//需要android标签内
packagingOptions {
    dex {
        useLegacyPackaging = true
    }
}

2.4.4新版android studio,没有gradle任务了

新版默认不创建任务,提高构建性能,可以通过以下方式开启。开启后会导致sync变慢 Settings->Experimental-Gradle-Do not build Gradle tasks list during Grade snc

2.4.5“manifest merger failed with multiple errors see logs”

升级版本:

androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

2.4.6 android:exported needs to be explicitly specified for

使用Action的activity、service、Broadcast等必须声明exported

你可能感兴趣的:(Gradle7适配指南)