AndroidStudio升级Gradle之坑

news/2024/5/20 5:26:14 标签: android-studio, gradle, android

最近在做旧工程的升级,原来的Gradle版本是4.6的,需要升级到7.6,JDK从8升级到17,一路淌了很多坑,逐个记录下吧

1、Maven仓库需要升级到https

你会遇到这个报错

Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 'maven(http://mapmo.baidu.com/artifactory/libs-release)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.6.1/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details

如果不能升级到https,也是有办法兼容的,改成下边的方式

maven {
            url "http://xxxxxx.com/artifactory/libs-release"
            allowInsecureProtocol = true
            credentials {
                username ""
                password ""
            }
        }

2、gradle语法上的升级,会遇到如下报错

Could not find method provided() for arguments [com.android.support:appcompat-v7:26.+] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler

Could not find method compile() for arguments [directory 'libs'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler

改起来也简单

provided--->compileOnly

compile--->implementation

3、找不到proguard

Could not get unknown property 'proguard' for project ':XXXXX' of type org.gradle.api.Project.

这个应该是高版本的gradle默认配置了R8,需要自己引入proguard,GPT也回答的似是而非的,这个问题让我蛋疼了很久才解决,方法如下:

在你工程的build.gradle文件中引入proguard

dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        classpath 'com.guardsquare:proguard-gradle:7.1.0'
    }

4、BuildConfig文件找不到

老版本的gradle文件你在buildTypes里边之配置一个release选项即可,也会生成debug的BuildConfig文件,工程中能引用到。升级了之后如果buildTypes里边没有配置debug的选项,会导致不生成debug的BuildConfig文件,导致工程引用不到报错

修改之前文件

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
        frame {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

修改之后

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        frame {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

加个debug就好了

5、BuildConfig文件中有属性找不到

这个也很蛋疼,我的BuildConfig文件中,有一个VERSION_NAME属性死活找不到,生成的BuildConfig文件中没有,我在build.gradle文件中也没有明确找到类似于

buildConfigField "String", "VERSION_NAME", "11.2"

这种的语句,所以非常好奇之前的代码是怎么编译过的

最终发现,老版本的gradle会把defaultConfig中的versionCode和versionName属性自动变成VERSION_CODE和VERSION_NAME属性加在BuildConfig文件中,而新版本的gradle文件不会管这个

 所以自己加一下就好了

defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode 1
        versionName rootProject.ext.MAPCOM_VERSION
        buildConfigField "String", "VERSION_NAME", "\"${rootProject.ext.MAPCOM_VERSION}\""
        buildConfigField "String", "MECP_VERSION", "\"${rootProject.ext.MECP_VERSION}\""
        buildConfigField "String", "MAPCOM_VERSION", "\"${rootProject.ext.MAPCOM_VERSION}\""
        buildConfigField "String", "ENGINE_VERSION", "\"${rootProject.ext.ENGINE_VERSION}\""
        buildConfigField "String", "MANUFACTURER", "\"${rootProject.ext.MANUFACTURER}\""

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

6、class.jar找不到

我在工程中需要把有些工程编译成jar,自己写了gradle函数实现,遇到这么个报错

Cannot expand ZIP '/home/GitDownload/mappreset/mapcom/android/ComBase/build/intermediates/packaged-classes/release/classes.jar' as it does not exist

原来的代码是这么写的

def zipFile = file('build/intermediates/packaged-classes/release/classes.jar')

还是新版本的gradle生成的class.jar的路径变了,改成下边的即可

def zipFile = file('build/intermediates/aar_main_jar/release/classes.jar')

以上就是淌坑之旅,希望对大家有帮助!

 


http://www.niftyadmin.cn/n/4948002.html

相关文章

Azure如何启用网络观察应用程序

文章目录 基础概念介绍实操 基础概念介绍 Azure中的网络观察应用程序是一种用于监视和诊断Azure网络的工具。它提供了一种集中管理和监控网络流量、连接性和性能的方式。网络观察应用程序能够提供网络流量分析、连接监视、性能监视和故障诊断等功能,用于帮助管理员…

机器学习赋能乳腺癌预测:如何使用贝叶斯分级进行精确诊断?

一、引言 乳腺癌是女性最常见的恶性肿瘤之一,也会发生在男性身上。每年全球有数百万人被诊断出乳腺癌,对患者的生活和健康造成了巨大的影响。早期的乳腺癌检测和准确的诊断对于提高治疗的成功率至关重要。然而,乳腺癌的早期诊断面临着许多挑战…

render和h函数的使用

// 如果没有配置项,则可以省略不写 {}h("div", [h(h-tooltip, // 在tooltip中进行改造// ----- h-tooltip 的配置项 -----Start{props: {placement: "top-start",// content: 提示内容,transfer: true},style: {overflow: hidden,text-overflow…

【数据结构OJ题】相交链表

原题链接:https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题,很容易想到的方法就是暴力求解,就是将一个链表的每个结点的地址…

Oracle 中 ROWNUM 使用问题记录

ROWNUM 使用问题记录(2023-08-17) Oracle 版本: 19.0.0.0.0 Enterprise现象:今天在项目遇到一个问题,测试人员反馈前一天能看到的数据今天看不到了 用表格举例,这是前一天看到的数据,有9、7、1 这几个数量信息 日期…

C++模板元编程(6)模板参数替换(Template argument substitution)

文章目录 1、什么是模板参数替换2、实例3、模板参数替换规则 1、什么是模板参数替换 模板参数替换(Template argument substitution):在函数模板实例化的过程中,模板参数会被替换为实际的参数类型或值。这个替换过程称为模板参数…

华为云cce发布若依前后分离版:1.docker离线安装

第一步,需要使用虚拟机来进行运行包打包,所以需要先在vmware上做个虚拟机。虚拟做好之后,需要先安装docker。 网上很多办法都是使用在线安装什么的,但是在线安装常常受到网络原因影响,或者在企业内网环境,根本没办法在线安装,所以本教程主要使用离线方式来安装各种东西…

Android内存泄漏总结和性能优化技巧

我们在开发安卓应用时,性能优化是非常重要的方面。一方面,优化可以提高应用的响应速度、降低卡顿率和提升应用流畅度,从而提升用户体验;另一方面,优化也可以减少应用的资源占用,提高应用的稳定性和安全性&a…