Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错

这篇具有很好参考价值的文章主要介绍了Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

最近一个Flutter项目有新需求,开发时一直是在iOS设备上运行,花了几天做完后运行到Android设备测试,结果项目构建失败了。

开发环境

  • Flutter: 3.7.11
  • Android Studio: 2022.2.1
  • Java: 17.0.6
  • Gradle: 7.4
  • Android Gradle Plugin (AGP): 4.1.3

问题描述

项目构建报错日志:

Execution failed for task ':app:processDailyDebugMainManifest'.
> Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not "opens java.io" to unnamed module @2374ab37

问题分析

报错有点眼熟,根据以往开发经验,应该是Gradle版本和Java版本不兼容导致的问题。分析的切入点有了,接下来就是逐步去验证。

项目中的Gradle版本长时间没有变过,首先怀疑是不是Java版本变了。由于一直使用的是Android Studio内置的Java环境,所以直接看Android Studio的运行版本:

Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错

果然变了,我记得之前还是Java 11版本,现在变成了Java 17版本。难道是Android Studio版本升级导致的?找到Android Studio 2022.1.1的运行版本:

Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错

看来真是Android Studio版本升级导致的,接下来就是验证是不是兼容性有问题。找到Android项目内的gradle/wrapper/gradle-wrapper.properties文件,可以看到用的是Gradle 7.4版本。

distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip

打开Gradle官方的兼容性文档:

Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错

可以看到从Gradle 7.3版本开始就已经支持了Java 17版本,那没道理Gradle 7.4版本会出现报错呀。将Gradle版本改为7.6版本,重新运行还是构建报错,这下没有了头绪。

找了台还没升级Android Studio版本的电脑,同样的项目构建是正常的,同样做升级处理后,竟然还是构建正常!难道我前面的猜测错了,不是Android Studio升级的问题?将这台电脑上的Flutter版本也升到当前最新的3.7.11版本,测试项目构建还是正常!这下更没头绪了。(补充:后续电脑重启后问题得以重现。

带着报错信息去搜索,发现好多人建议降Java版本,降是不能降的,怎么能开倒车。除了降版本,还发现了一个解决方法,打开Android项目下的gradle.properties文件,在org.gradle.jvmargs配置后面加上:

--add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED

例如原来是org.gradle.jvmargs=-Xmx1536M,修改后变为:

org.gradle.jvmargs=-Xmx1536M --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED

实测可行,不过这更像是临时解决方法。当然,有方法总比没方法好,至少有了保底解决方法

新建一个Flutter项目,运行到Android设备,一切正常。对比Gradle版本,新建项目用的是7.5版本,这好像也没什么区别呀。仔细对比其他配置,我发现我遗漏了Android Gradle插件的版本。打开Android项目下的build.gradle文件,报错项目用的是4.1.3版本:

classpath 'com.android.tools.build:gradle:4.1.3'

新建项目用的是7.2.0版本:

classpath 'com.android.tools.build:gradle:7.2.0'

将新项目的Android Gradle插件版本改为4.1.3,出现同样的报错。将报错项目的版本改为7.2.0,重新运行项目一切正常🎉!

所以根本原因还是版本不兼容,只不过是Android Gradle插件版本和Java版本不兼容

稍微查了下,Android Gradle插件4.1.0版本于2020年8月发布,Java 17版本于2021年9月发布,这么一看,不兼容很正常,毕竟Android Gradle插件4.1.3版本发布时,Java 17版本都还没发布。

分析还没结束,前面通过将Android Gradle插件版本改为7.2.0解决了报错,可是这个插件版本一定要是7.2.0吗?这是我整理的Android Gradle插件版本要求:

Android Gradle Plugin version Minimum required Gradle version Minimum required Java version
8.1 8.0 17
8.0 8.0 17
7.4 7.5 11
7.3 7.4 11
7.2 7.3.3 11
7.1 7.2 11
7.0 7.0.2 11
4.2 6.7.1 /
4.1.0 6.5 /
4.0.0 6.1.1 /

官方文档中没找到4.x.x版本明确的Java版本要求,所以用/表示,不过,根据个人经验应该是Java 8(未验证)。

参考文档:

  • Android Gradle plugin release notes
  • Past Android Gradle Plugin releases

从表中可以看到,4.1.0版本的Android Gradle插件最低只要求6.5版本的Gradle,这就是为什么在升级Android Studio 2022.2.1版本之前项目还能运行正常的原因。

Android Gradle插件从7.0版本开始要求Java 11,那会不会这个版本就是解决当前问题的最低版本呢?经过实测可以确定是的,只要插件版本大等于7.0,当前问题就不会出现。

解决方案

打开Android项目下的gradle/wrapper/gradle-wrapper.properties文件找到Gradle的版本:

distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip

7.4即Gradle的版本。根据Android Gradle插件版本要求选择兼容的插件版本:

最后更新日期:2023/10/15

Android Gradle Plugin version Minimum required Gradle version Minimum required Java version
8.3 8.3 17
8.2 8.2 17
8.1 8.0 17
8.0 8.0 17
7.4 7.5 11
7.3 7.4 11
7.2 7.3.3 11
7.1 7.2 11
7.0 7.0.2 11
4.2 6.7.1 /
4.1.0 6.5 /
4.0.0 6.1.1 /

从表中可以看到,7.4版本的Gradle只能选择7.3及以下版本的插件,同时根据前面的问题分析,最终满足兼容要求的Android Gradle插件版本范围是7.0~7.3

打开Android项目下的build.gradle文件,将插件版本设置为满足兼容要求的版本:

// 修改前
classpath 'com.android.tools.build:gradle:4.1.3'
// 修改后
classpath 'com.android.tools.build:gradle:7.2.0'

注意,7.2.0版本不是固定的,请按项目实际情况选择。

重新运行项目检查问题是否已经解决,如果还未解决,请参考问题分析中的保底解决方法

如果遇到类似这样的报错:

Could not find com.android.tools.build:gradle:7.2.

解决办法很简单,补全版本名称即可。例如7.2补全为7.2.0,这种版本名称末尾补0的小版本肯定是能够找到的。如果需要补丁版本,请看以下整理的一些Android Gradle插件补丁版本:

最后更新日期:2023/10/15

Android Gradle Plugin version Patch versions
8.3 /
8.2 /
8.1 /
8.0 [8.0.1] [8.0.2]
7.4 [7.4.1]
7.3 /
7.2 [7.2.1] [7.2.2]
7.1 [7.1.1] [7.1.2] [7.1.3]
7.0 [7.0.1]

7.0以下版本有点老了,所以不再列出。如果有所遗漏,欢迎评论补充👏。

补充内容

  1. 其他不兼容情况

根据问题分析可以知道当前报错是由于Android Gradle插件版本和Java版本不兼容导致的,那其他不兼容情况的报错是什么样的呢?

  • Android Gradle插件版本和Gradle版本不兼容报错:
A problem occurred evaluating project ':app'.
> Failed to apply plugin 'com.android.internal.version-check'.
   > Minimum supported Gradle version is 7.3.3. Current version is 7.2. If using the gradle wrapper, try editing the distributionUrl in /xxx/gradle/wrapper/gradle-wrapper.properties to gradle-7.3.3-all.zip

7.2版本的Android Gradle插件最低要求7.3.3版本的Gradle,但当前Gradle版本是7.2

  • Gradle版本和Java版本不兼容:
Could not open settings generic class cache for settings file '/xxx/settings.gradle' (/Users/xxx/.gradle/caches/7.1/scripts/33mryj9ed7jrwo0cnqayrtkt7).
> BUG! exception in phase 'semantic analysis' in source unit '_BuildScript_' Unsupported class file major version 61

Java 17版本最低要求7.3版本的Gradle,但当前Gradle版本是7.1。不过让人意外的是,7.2版本的Gradle实测没报错。

2023/07/16更新:

维护老Android项目时遇到一个关于Gradle版本和Java版本不兼容的新报错:

Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to unnamed module @7a187f14

解决办法:打开Android项目下的gradle/wrapper/gradle-wrapper.properties文件修改Gradle版本,Java 17版本实测最低需要7.2版本的Gradle。只修改Gradle版本大概率还会继续报错,请参考前面的解决方案继续修改Android Gradle插件版本。

  1. Android Gradle插件8.0版本

暂时不推荐使用该版本。8.0版本本月(2023/04)才发布,现在使用可能会遇到一些问题,比如一些过时API被移除,可以参考Android Gradle plugin API updates文档。 除此之外,对Android Studio也有版本要求:

最后更新日期:2023/10/15

Android Studio version Required plugin version
Iguana | 2023.2.1 3.2-8.3
Hedgehog | 2023.1.1 3.2-8.2
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

最后

如果这篇文章对你有所帮助,点赞👍收藏🌟支持一下吧,谢谢~


本篇文章由@crasowas发布于CSDN。文章来源地址https://www.toymoban.com/news/detail-423374.html

到了这里,关于Flutter & Android问题记录 - 升级Android Studio 2022.2.1版本后运行项目报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    升级Android Studio 旧项目无法运行,奇奇怪怪什么错误都有 例如: 又例如: 初步排查判断是旧项目Gradle版本问题导致。因为最近创建的项目,升级AS之后无影响,只有旧项目跑不起来。 查阅资料发现,随着AS gradle插件版本的升级,项目中gradle plugin版本、gradle版本、jdk版本等均

    2024年02月01日
    浏览(60)
  • 记录Android Studio 升级Gradle7.5-8.5遇到的问题

    首先说明我升级到的是: Gradle 8.5 ,Android(AGP 8.2.2)、kotlin(1.9.22)相关插件升级这里就不做说明了 问题1:Gradle8.0+后需要使用JDK17,JavaVersion.VERSION_17 我的AS修改后需要重新打开项目,否则不起效果。 问题2 :namespace,所有模块必须要有namespace 所有模块添加namespace,同时会导致模块

    2024年04月12日
    浏览(56)
  • 【Flutter问题记录】Android Studio不显示(右上角main.dart左边)设备栏

    记录一下今天遇到的情况: 用android studio打开项目,我检查了,已经配置了flutter sdk和android sdk,但是右上角main.dart左边的设备栏就是不显示。 解决方法: 恢复如初:

    2024年02月16日
    浏览(51)
  • Android Studio版本升级后的问题 gradle降级、jdk升级 Compose 与 Kotlin 的兼容性对应关系

    AGPBI: {“kind”:“error”,“text”:“Can’t determine type for tag ‘macro name=“m3_comp_switch_disabled_selected_handle_color”?attr/colorSurface’”,“sources”:[{“file”:“/Users/fausto/.gradle/caches/transforms-3/4948d05d0ff6027d2e3c9f4a6010103b/transformed/material-1.7.0-alpha02/res/values/values.xml”}],“tool”:“Resource and

    2024年02月04日
    浏览(78)
  • 【Flutter 问题系列第 78 篇】Android Studio 升级后提示 org.gradle.java.home Gradle property is invalid 的解决方案

    这是【Flutter 问题系列第 78 篇】,如果觉得有用的话,欢迎关注专栏。 Flutter SDK:3.3.5,Dart SDK:2.18.2, 操作系统:macOS Ventura 13.0.1 Intel Core i9,Android Studio 版本:Flamingo 2022.2.1 Patch 2 一:问题描述 在公司的 M2 电脑上,直接使用 Android Studio 的检查更新,升级到 Flamingo 2022.2.1 版

    2024年02月05日
    浏览(51)
  • flutter android studio升级java java17

    oricle 网站下载jdk 17 sudo dpkg -i 安装包。 到android-studio 目录, 更新.bashrc里面 然后运行flutter doctor

    2024年04月28日
    浏览(47)
  • Android Studio 更新至2022.2.1,运行项目失败

    Cause: superclass access check failed: class butterknife.compiler.ButterKnifeProcessor$RScanner (in unnamed module @0x69d73d) cannot access class com.sun.tools.javac.tree.TreeScanner (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.tree to unnamed module @0x69d73d  3.1 路径:file - settings 3.2 下载JDK:下载版本

    2024年02月11日
    浏览(39)
  • Android Studio导入flutter项目,运行和调试按钮灰色

    解决方法:检查是否设置如下内容: 1.是否配置了Android SDK ,打开 file = project Structure =project 2.是否配置了Flutter SDK,打开 setting = LanguagesFrameworks =Flutter 3.是否配置了main.dart,点击Add Configuration = Flutter 选中当前需运行项目的main.dart路径并命名,配置成功后选中刚刚命名的dart即

    2024年02月11日
    浏览(71)
  • 【window10】Dart+Android Studio+Flutter安装及运行

    安装前,请配置好你的jdk环境,准备好你的梯子~ 浅浅了解一下Dart: Dart 诞生于2011年,是由谷歌开发的一种强类型、跨平台的客户端开发语言。Dart是一种简洁、清晰、基于类的面向对象的语言,具有专门为客户端优化、高生产力、快速高效、可移植(兼容ARM/x86)、易学的

    2024年02月06日
    浏览(52)
  • Android Studio Flamingo (火烈鸟) 升级踩坑记录

    由于想要验证Compose最新的debug特性,而我目前使用的版本(Dolphin 小海豚)不支持,查看官网说明需要最新版本,所以不得已进行了一下Android Studio版本升级,过程中遇到一些问题,本文仅做记录。(真是不想升级,一升级就是连锁反应,需要处理的东西太多了,折腾很久。。

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包