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对增量编译更严格,要求所有的插件都具备增量编译的功能。所有的属性,都必须添加注解的。
适配方法:

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增大

  <application
        android:extractNativeLibs="true">

2.4.3 dex没压缩

<application
        android:useEmbeddedDex ="false">

在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 <activity>

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容