Android Studio升级Gradle Plugin升级导致项目运行失败问题

2023-10-27

背景&错误

升级Android Studio
旧项目无法运行,奇奇怪怪什么错误都有
例如:

java.lang.IllegalAccessError: class org.gradle.api.internal.tasks.compile.processing.AggregatingProcessingStrategy (in unnamed module @0x390ea9fb) cannot access class com.sun.tools.javac.code.Symbol$ClassSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x390ea9fb

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':BaziPaipan_lib:compileDebugJavaWithJavac'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:200)
	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:198)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:179)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.RuntimeException: java.lang.IllegalAccessError: class org.gradle.api.internal.tasks.compile.processing.AggregatingProcessingStrategy (in unnamed module @0x390ea9fb) cannot access class com.sun.tools.javac.code.Symbol$ClassSymbol (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.code to unnamed module @0x390ea9fb
	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(Unknown Source)
	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(Unknown Source)

又例如:
在这里插入图片描述

排查解决

初步排查判断是旧项目Gradle版本问题导致。因为最近创建的项目,升级AS之后无影响,只有旧项目跑不起来。

查阅资料发现,随着AS gradle插件版本的升级,项目中gradle plugin版本、gradle版本、jdk版本等均需要配合一起升级,否则编译不过。比如类似这种报错提示:

build.gradle 中配置的gradle版本太低:

Unsupported Java. 
Your build is currently configured to use Java 17.0.6 and Gradle 6.7.1.

gradle.properties中配置的gradle版本很高,builde.gradle中配置没有匹配:

Could not resolve all dependencies for configuration ':classpath'.
   > Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository 'maven5(http://mvn.mob.com/android)' to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.5.1/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details. 

gradle.properties中配置的版本太低,匹配不上AS版本或者gradle版本

Unsupported Gradle. 
The project uses Gradle 2.14.1 which is incompatible with Android Studio 2022.2.

其实以上错误,基本上都是版本不匹配导致,那么,匹配上基本就能解决了。

从官网整理了一份各版本对应表:

AGP版本(build.gradle中) Gradle最低版本(gradle.properties中) 最低JDK版本(项目配置) SDK Build Tools
8.1 8.0 17 30.0.3
8.0 8.0 17 30.0.3
7.4 7.5 11 30.0.3
7.3 7.4 11 30.0.3
7.2 7.3.3 11 30.0.3
7.1 7.2 11 30.0.3
7.0 7.0.2 11 30.0.2
4.2.0+ 6.7.1 1.7 30.0.2
4.1.0+ 6.5+ 1.7 29.0.2
4.0.0+ 6.1.1+ 1.7 29.0.2
3.6.0 - 3.6.4 5.6.4+ 1.7 28.0.3
3.5.0 - 3.5.4 5.4.1+ 1.7 28.0.3
3.4.0 - 3.4.3 5.1.1+ 1.7 28.0.3
Android Studio 版本 所需 AGP 版本
Giraffe | 2022.3.1 3.2-8.1
Flamingo | 2022.2.1 3.2-8.0
Electric Eel | 2022.1.1 3.2-7.4
Dolphin | 2021.3.1 3.2-7.3
Chipmunk | 2021.2.1 3.2-7.2
Bumblebee | 2021.1.1 3.2-7.1
Arctic Fox | 2020.3.1 3.1-7.0

方案

修改项目配置,对应上版本,很多老项目还在4.x版本,所以不兼容报错,一般升级7.0+就能解决,这也是谷歌倒推着我们开发者们往上升级,旧版的一些api慢慢都会废弃掉。

从4.x升级至7.0+的话,配置改动会大一点,主要是依赖仓库的配置、上传发布maven等日常配置,教程网上一堆,自行搜索即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio升级Gradle Plugin升级导致项目运行失败问题 的相关文章

随机推荐

  • 如何备份/恢复 MySQL 存储过程和触发器

    存储过程 and Triggers首先是在 MySQL 5 0 中引入的 因此 如果您仍在使用 MySQL 旧版本 请将其升级到 MySQL 5 0 或更高版本以使用这些功能 本文将帮助您了解如何使用以下命令转储存储过程和触发器 mysql
  • 兆字节 (MiB):了解基础知识和优点

    在当今的数字世界中 文件大小和存储容量已成为我们日常生活中不可或缺的一部分 无论我们是下载文件 上传数据 还是只是管理我们的设备 了解用于测量数字存储的单位都至关重要 Mebibyte MiB 就是这样的单位之一 由于它与更广为人知的兆字节
  • 在 CentOS 7 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费开放的证书颁发机构 如今 Let s Encrypt 颁发的证书几乎受到所有浏览器的信任 在本教程中 我们将提供有关如何在 CentOS 7 上使用 certbot 工
  • 如何在 Debian 9 上安装 Ruby

    本教程将引导您完成在 Debian 9 系统上安装 Ruby 的步骤 Ruby 是当今最流行的语言之一 它具有优雅的语法 并且是强大的 Ruby on Rails 框架背后的语言 在 Debian 上安装 Ruby 有多种不同的方法 在以下
  • 如何在 Ubuntu 20.04 上安装 Mono

    Mono 是一个用于开发和运行基于 ECMA ISO 标准的跨平台应用程序的平台 它是 Microsoft NET 框架的免费开源实现 本教程介绍了在 Ubuntu 20 04 上安装 Mono 所需的步骤 先决条件 这些说明假定您以 ro
  • 如何在 CentOS 7 上安装 Django

    Django 是一个免费开源的高级 Python Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 有不同的方法来安装 Django 具体取决于您的需要 它可以在系统范围内安装 也可以使用 pip 安装在 Pyth
  • 如何在 Ubuntu 20.04 上安装 Anaconda

    Anaconda 是一个流行的 Python R 数据科学和机器学习平台 用于大规模数据处理 预测分析和科学计算 Anaconda 发行版附带 250 个开源数据包 并且可以从 Anaconda 存储库安装超过 7 500 个附加包 它还包
  • 如何在 Python 中将整数转换为字符串

    Python 有多种内置数据类型 有时 在编写 Python 代码时 您可能需要将一种数据类型转换为另一种数据类型 例如 连接一个字符串和整数 首先 您需要将整数转换为字符串 本文介绍如何将 Python 整数转换为字符串 Python s
  • 如何重置 MySQL 根密码

    您是否忘记了 MySQL root 密码 别担心 这发生在我们所有人身上 在本文中 我们将向您展示如何从命令行重置 MySQL root 密码 识别服务器版本 根据您系统上运行的 MySQL 或 MariaDB 服务器版本 您将需要使用不同
  • Bash printf 命令

    通常 在编写 bash 脚本时 我们使用echo打印到标准输出 echo是一个简单的命令 但其功能有限 要更好地控制输出的格式 请使用printf命令 The printf命令格式并打印其参数 类似于 Cprintf 功能 printf命令
  • 如何在 CentOS 7 上安装 Jenkins

    Jenkins是一个基于 Java 的开源自动化服务器 提供了一种设置持续集成和持续交付 CI CD 管道的简单方法 持续集成 CI 是一种 DevOps 实践 团队成员定期将代码更改提交到版本控制存储库 然后运行自动化构建和测试 持续交付
  • Linux 中的 Usermod 命令

    usermod是一个命令行实用程序 允许您修改用户的登录信息 本文介绍了如何使用usermod命令将用户添加到组 更改用户 shell 登录名 主目录等 usermod命令 的语法usermod命令采用以下形式 usermod option
  • 如何在 Ubuntu 18.04 上使用 UFW 设置防火墙

    正确配置的防火墙是整个系统安全最重要的方面之一 默认情况下 Ubuntu附带了一个名为UFW Uncomplicated Firewall 的防火墙配置工具 UFW 是一个用户友好的前端 用于管理 iptables 防火墙规则 其主要目标是
  • Python 模运算符

    模运算是一种算术运算 可求出一个数字除以另一个数字的余数 余数称为运算的模 例如 5除以3等于1 余数为2 8除4等于2 余数为0 Python 模运算符 在 Python 中 模运算符由百分号 语法如下 num1 num2 这是一个例子
  • Linux服务器上重置Mysql8密码

    前言 此流程适用于mysql 8版本 1 关闭数据库 1 关闭数据库 service mysqld stop 2 编辑配置文件 1 编辑文件 vim etc my cnf 输入 i 进入编辑模式 2 添加配置 skip grant tabl
  • ECSHOP文件结构系统简介

    原来做电子商务系统一直用zencart 后来虽然接触过一段时间magento 但是magento觉得还是挺高深的 前面两个比较多的用在外贸电子商务 特别是magento 可以说是开源电子商务系统中的豪华版 以后有时间的话再一起学习探讨一下
  • 通过App的演示深入理解区块链运行原理

    下载安装 如果没有安装nodejs 需要先安装 nodejs Clone this repository git clone https github com seanseany blockchain cli Go into the rep
  • 源码进阶之线程池

    写在前面 上次学习了多线程 了解了线程的概念和作用 学习了线程的创建方式 工作模式和一些重要的方法 当我们使用线程中 创建 销毁线程伴随着系统开销 过于频繁的创建 销毁线程 就会很大程度上影响处理效率 那么此时我们就引入了线程池的概念 即为
  • C语言【猜数字游戏】详解

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 猜数字游戏是什么 二 使用步骤 1 首先应该打印菜单 2 打印我们的game 函数来实现我们的游戏具体逻辑 总结 前言 本文详细介绍了猜数字游戏的具体实现
  • Android Studio升级Gradle Plugin升级导致项目运行失败问题

    背景 错误 升级Android Studio 旧项目无法运行 奇奇怪怪什么错误都有 例如 java lang IllegalAccessError class org gradle api internal tasks compile pr