流量卡网站,网站注册信息查询,抄袭别人网站的前端代码合法吗,用dede做的网站文章目录 前言开发环境问题描述问题分析解决方案补充内容最后 前言
最近一个Flutter项目有新需求#xff0c;开发时一直是在iOS设备上运行#xff0c;花了几天做完后运行到Android设备测试#xff0c;结果项目构建失败了。
开发环境
Flutter: 3.7.11Android Studio: 2022… 文章目录 前言开发环境问题描述问题分析解决方案补充内容最后 前言
最近一个Flutter项目有新需求开发时一直是在iOS设备上运行花了几天做完后运行到Android设备测试结果项目构建失败了。
开发环境
Flutter: 3.7.11Android Studio: 2022.2.1Java: 17.0.6Gradle: 7.4Android 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的运行版本 果然变了我记得之前还是Java 11版本现在变成了Java 17版本。难道是Android Studio版本升级导致的找到Android Studio 2022.1.1的运行版本 看来真是Android Studio版本升级导致的接下来就是验证是不是兼容性有问题。找到Android项目内的gradle/wrapper/gradle-wrapper.properties文件可以看到用的是Gradle 7.4版本。
distributionUrlhttps\://services.gradle.org/distributions/gradle-7.4-all.zip打开Gradle官方的兼容性文档 可以看到从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-exportsjava.base/sun.nio.chALL-UNNAMED --add-opensjava.base/java.langALL-UNNAMED --add-opensjava.base/java.lang.reflectALL-UNNAMED --add-opensjava.base/java.ioALL-UNNAMED --add-exportsjdk.unsupported/sun.miscALL-UNNAMED例如原来是org.gradle.jvmargs-Xmx1536M修改后变为
org.gradle.jvmargs-Xmx1536M --add-exportsjava.base/sun.nio.chALL-UNNAMED --add-opensjava.base/java.langALL-UNNAMED --add-opensjava.base/java.lang.reflectALL-UNNAMED --add-opensjava.base/java.ioALL-UNNAMED --add-exportsjdk.unsupported/sun.miscALL-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 versionMinimum required Gradle versionMinimum required Java version8.18.0178.08.0177.47.5117.37.4117.27.3.3117.17.2117.07.0.2114.26.7.1/4.1.06.5/4.0.06.1.1/
官方文档中没找到4.x.x版本明确的Java版本要求所以用/表示不过根据个人经验应该是Java 8未验证。
参考文档
Android Gradle plugin release notesPast 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的版本
distributionUrlhttps\://services.gradle.org/distributions/gradle-7.4-all.zip7.4即Gradle的版本。根据Android Gradle插件版本要求选择兼容的插件版本
最后更新日期2023/10/15
Android Gradle Plugin versionMinimum required Gradle versionMinimum required Java version8.38.3178.28.2178.18.0178.08.0177.47.5117.37.4117.27.3.3117.17.2117.07.0.2114.26.7.1/4.1.06.5/4.0.06.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 versionPatch versions8.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以下版本有点老了所以不再列出。如果有所遗漏欢迎评论补充。
补充内容
其他不兼容情况
根据问题分析可以知道当前报错是由于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.zip7.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 61Java 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插件版本。
Android Gradle插件8.0版本
暂时不推荐使用该版本。8.0版本本月2023/04才发布现在使用可能会遇到一些问题比如一些过时API被移除可以参考Android Gradle plugin API updates文档。 除此之外对Android Studio也有版本要求
最后更新日期2023/10/15
Android Studio versionRequired plugin versionIguana | 2023.2.13.2-8.3Hedgehog | 2023.1.13.2-8.2Giraffe | 2022.3.13.2-8.1Flamingo | 2022.2.13.2-8.0Electric Eel | 2022.1.13.2-7.4Dolphin | 2021.3.13.2-7.3
最后
如果这篇文章对你有所帮助点赞收藏支持一下吧谢谢 本篇文章由crasowas发布于CSDN。