AndroidStudio升级Gradle之坑

最近在做旧工程的升级,原来的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 = truecredentials {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 falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'frame {minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}

修改之后

buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}frame {minifyEnabled trueproguardFiles 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.minSdkVersiontargetSdkVersion rootProject.ext.targetSdkVersionversionCode 1versionName rootProject.ext.MAPCOM_VERSIONbuildConfigField "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')

7、Duplicate Strategy问题

报错如下

Entry assets/CircleDashTexture.png is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.6.1/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.

我是编译jar包的函数里边报错的,修改起来不难,加上第一句的冲突处理策略就行了,如下

task makeJar(type:Jar){duplicatesStrategy = DuplicatesStrategy.EXCLUDEarchiveName = SDK_BASENAME + "_" + SDK_VERSION + '.jar'// 复制资源文件from fileTree(dir: 'src/main', includes: ['assets/**'])***********
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/95039.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试题-React(一):React是什么?它的主要特点是什么?

探索React:前端开发中的重要角色与主要特点 引言: 在现代前端开发领域,React已经成为最受欢迎和广泛使用的JavaScript库之一。它由Facebook开发并于2013年首次发布。随着时间的推移,React在开发社区中获得了强大的支持和认可。本…

TCP的三次握手和四次挥手

文章目录 三次握手四次挥手TIME_WAITCLOSE_WAIT 使用wireshark观察 三次握手 握手的最终目的是主机之间建立连接 首先要有两个预备知识点 三次握手建立连接不一定会成功,其中最担心的就是最后一次握手失败,不过会有配套的解决方案建立好连接后是需要被…

Android系统-进程-AIDL

引言: Android系统的进程间通信,主要是Binder,AIDL就是一种Android接口定义语言,主要就是为了能更简单方便地实现跨进程通信。 概念与理解: AIDL:Android Interface Definition Language 序列化&#x…

SpringBoot 响应头添加版本号、打包项目后缀添加版本号和时间

文章目录 响应头添加版本号获取版本号添加响应处理器请求结果 打包项目后缀添加版本号和时间实现打包结果 响应头添加版本号 获取版本号 在 pom.xml 中,在 project.version 下定义版本号 在 application.yml 获取 pom.xml 中 project.version 中的信息 添加响应处…

AR/VR眼镜转接器方案,实现同时传输视频快充方案

简介 虚拟现实头戴显示器设备,简称VR头显VR眼镜,是利用仿真技术与计算机图形学人机接口技术多媒体技术传感技术网络技术等多种技术集合的产品,是借助计算机及最新传感器技术创造的一种崭新的人机交互手段。VR头显VR眼镜是一个跨时代的产品。…

Scala 如何调试隐式转换--隐式转换代码的显示展示

方法1 在需要隐式转换的地方,把需要的参数显示的写出。 略方法2,查看编译代码 在terminal中 利用 scalac -Xprint:typer xxx.scala方法打印添加了隐式值的代码示例。 对于复杂的工程来说,直接跑到terminal执行 scalac -Xprint:typer xxx.…

解决Adobe Flash Player已被屏蔽

问题:该插件不支持 原因:现在浏览器默认禁用flash 博主当前使用的是谷歌浏览器Chrome 2个主要方法都已经失效 搜索一圈后,之前博客给出的2个主要方法都已经失效。 1、flash.cn 下载本地播放器 2、在chrome中打开flash的禁用开关 2023年解…

lama-cleaner:基于SOTA AI 模型Stable Diffusion驱动的图像修复工具

介绍 由 SOTA AI 模型提供支持的图像修复工具。从照片中删除任何不需要的物体、缺陷、人物,或擦除并替换(由Stable Diffusion驱动)照片上的任何东西。 特征 1.多种SOTA AI模型 擦除模型:LaMa/LDM/ZITS/MAT/FcF/Manga 擦除和替…

BT利器之wazuh

目录 一、什么是wazuh 二、wazuh的安装 1.仓库安装 2.虚拟机OVA安装 3.其他安装方式 三、浅析wazuh的规则、解码器等告警原理以及主动响应 1.主动响应(active-response) 2.告警信息(alerts) 3.规则以及解码器(rules and decoders) 3.1.规则 3.2.解码器 4.linux后门r…

向日葵如何截图

场景 向日葵远程时,有时需要截图,但是客户电脑上没有qq、微信等软件提供快捷截图。 怎么办呢? 解决方案 其实向日葵肯定支持这些功能的。 设置 | 热键设置 | 勾选 远控其他设备时,可输入热键进行以下操作。 如果: altq 切换…

jenkins 安装nodejs 14

参考: jenkins容器安装nodejs-前端问答-PHP中文网

shell脚本基础

目录 前言 一、概述 (一)、shell脚本基础概念 (二)、shell的类型 二、Shell变量 (一)、组成 1.变量名 2.变量值 (二)、类型 1.系统内置变量(环境变量) 2.自定…

设计师必备的5个PNG免抠素材网站,简直不要太好用~

广大设计师们是不是经常要用免抠素材的时候网上找的质量差,还要各种付费才能使用,最后只能打开PS慢慢的扣,真的很费时间。本期我就给大家推荐5个高质量、免费的免抠素材网站,有需要的朋友们赶紧收藏。 菜鸟图库 https://www.suc…

ZooKeeper的应用场景(集群管理、Master选举)

5 集群管理 随着分布式系统规模的日益扩大,集群中的机器规模也随之变大,因此,如何更好地进行集群管理也显得越来越重要了。 所谓集群管理,包括集群监控与集群控制两大块,前者侧重对集群运行时状态的收集,后…

工作流自动化:提升效率、节约成本的重要工具

在现代社会中,软件和技术的运用使得我们的日常活动变得更加简单和高效。然而,这些技术也有自身的特点和独特之处。尽管我们使用这些工具来简化工作,但有时仍需要一些人工干预,比如手动数据录入。在工作场所中,手动数据…

C++超基础语法

💓博主个人主页:不是笨小孩👀 ⏩专栏分类:数据结构与算法👀 C👀 刷题专栏👀 C语言👀 🚚代码仓库:笨小孩的代码库👀 ⏩社区:不是笨小孩👀 🌹欢迎大…

【K8S源码之Pod漂移】整体概况分析 controller-manager 中的 nodelifecycle controller(Pod的驱逐)

参考 k8s 污点驱逐详解-源码分析 - 掘金 k8s驱逐篇(5)-kube-controller-manager驱逐 - 良凯尔 - 博客园 k8s驱逐篇(6)-kube-controller-manager驱逐-NodeLifecycleController源码分析 - 良凯尔 - 博客园 k8s驱逐篇(7)-kube-controller-manager驱逐-taintManager源码分析 - 良…

mybatis-plus的count方法突然失效的一个场景案例

在添加数据之前,做了名称重复的校验 明明在数据库里面查看了下刚加的名称是没有的,结果count的数据量不是0,而是一个意外的数据,明明之前是好的。 此时我以为是mybatis-plus查询出问题了,我马上用一样的参数条件。lis…

Synchronized与Java线程的关系

前言 ​ Java多线程处理任务时,为了线程安全,通常会对共享资源进行加锁,拿到锁的线程才能进行访问共享资源。而加锁方式通过都是Synchronized锁或者Lock锁。 ​ 那么多线程在协同工作的时候,线程状态的变化都与锁对象有关系。 …

CMake教程6:调用lib、dll

之前我们学到了如何编写一个可执行程序和Library,在继续学习之前,需要解释下target,在cmake中我们可以给executable和library设置一个target名字,这样可以方便我们在后续对target进行更加详细的属性设置。 本节我们将学习如何在项…