Android Studio (Windows) 中的 Flutter 错误:无法识别的选项:--add-opens
Posted
技术标签:
【中文标题】Android Studio (Windows) 中的 Flutter 错误:无法识别的选项:--add-opens【英文标题】:Flutter error in Android Studio (Windows): Unrecognized option: --add-opens 【发布时间】:2021-10-16 16:53:24 【问题描述】:在过去的几周里,我一直在开发一个在 android 模拟器和物理设备上成功运行的 Flutter 应用程序。不知何故,突然之间,我无法在调试模式下运行它。 我尝试了在 SO 中找到的几个答案,但它们似乎都是不能真正解决问题的 hack。
错误
当我尝试运行应用程序时,Gradle 守护程序抛出错误,因为它无法创建 JVM,如下面的屏幕截图所示...
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Unrecognized option: --add-opens
可能的原因???
我记得我将 Gradle 插件升级到了我不知道是什么版本,我并没有真正注意它(我的错),但我继续工作,没有任何问题。然后,我将 Flutter 升级到 2.2.2 版本,这就是问题开始蔓延的时候(也许)。
支持信息
操作系统:Windows Server 2016 标准版 (x64) IDE:Android Studio Artic Fox 2020.3.1 颤振版本:2.2.2 JAVA_HOME:指向 JDK 1.8
项目结构 -> 项目设置 -> 项目
Java 版本...
颤振医生输出...
Gradle 文件
android/build.gradle
buildscript
ext.kotlin_version = '1.3.50'
repositories
google()
jcenter()
dependencies
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
allprojects
repositories
google()
jcenter()
rootProject.buildDir = '../build'
subprojects
project.buildDir = "$rootProject.buildDir/$project.name"
project.evaluationDependsOn(':app')
task clean(type: Delete)
delete rootProject.buildDir
app/build.gradle
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists())
localPropertiesFile.withReader('UTF-8') reader ->
localProperties.load(reader)
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null)
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null)
flutterVersionCode = '1'
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null)
flutterVersionName = '1.0'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android
compileSdkVersion 30
sourceSets
main.java.srcDirs += 'src/main/kotlin'
defaultConfig
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.domain.app_name"
minSdkVersion 16
targetSdkVersion 30
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
buildTypes
release
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
flutter
source '../..'
dependencies
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
问题
是否有明显的错误修复方法? 自从我开始这个项目以来,我已经有 2 年没有在 Android 上工作了,所以我的问题可能很明显。 我可能在这里遗漏了一些东西,但如果我遗漏了,请告诉我,我会更新答案。
【问题讨论】:
Java_Home 指向 1.8 但您的项目似乎指向其他有 SDK,运行颤振医生并检查它使用哪个 可以添加flutter医生结果吗 【参考方案1】:--add-opens 选项本身是合法的,我认为不是根本原因,请看https://docs.oracle.com/en/java/javase/16/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-12F945EB-71D6-46AF-8C3D-D354FD0B1781
我认为这可能是 java 版本的问题,请尝试检查您的机器上有哪些 SDK 可用
【讨论】:
【参考方案2】:4 个选项
使用最新的 Gradle
将JDK版本设置为嵌入式JDK
为什么?
最新的 OpenJDK 副本与 Android Studio 2.2+ 捆绑在一起。这是GOOGLE推荐的JDK版本。
要使用捆绑的 JDK,请执行以下操作:
怎么做?
Android Studio > Preferences... > Build, Execution, Deployment > Build Tools > Gradle 在 Gradle JDK 下,选择 Embedded JDK 选项。点击确定。
对于窗户
选择 File > Settings... > Build, Execution, Deployment > Build Tools > Gradle 在 Gradle JDK 下,选择 Embedded JDK 选项。
-
--添加打开
如果您必须允许类路径上的代码进行深度反射以访问非公共成员,请使用 --add-opens 运行时选项。
有些库会进行深度反射,即 setAccessible(true),因此它们可以访问所有成员,包括私有成员。您可以使用 java 命令行上的 --add-opens 选项授予此访问权限。使用此选项不会生成任何警告消息。
如果 --illegal-access=deny,并且您在运行时看到 IllegalAccessException 或 InaccessibleObjectException 消息,您可以使用 --add-opens 运行时选项,将参数基于异常消息中显示的信息。
-
配置 jvm 选项
从版本 9 开始,Java 编译器可以配置为为较旧的 Java 版本生成字节码,同时确保代码不使用更新版本的任何 API。 Gradle 现在支持 CompileOptions 上的此发布标志直接用于 Java 编译。此选项优先于下述属性。
由于 Java 9 中的错误已在 Java 10 中修复,Gradle 在使用 Java 9 编译时无法利用发布标志。
示例 6. 设置 Java 发布标志 GroovyKotlin 构建.gradle 编译Java 选项.release = 7 Java 编译器的历史选项仍然可用:
了解更多信息 https://docs.gradle.org/current/userguide/gradle_daemon.html
【讨论】:
感谢您的回答。要么我的设置存在根本性错误,要么您的某些观点针对不同版本的 Android Studio。 (1) 我使用的是 gradle wrapper 6.7 版(不一定是最新的),但为了解决这个问题,我降级到了 4.10。 (2) 我使用的是嵌入式 JDK,但在 Gradle 下没有设置嵌入式 JDK 的选项 (4) 我可能会尝试在本地环境中升级 java 版本 是的。 Android Studio Artic Fox 2020.3.1 @Leo 请按照@UmAnusorn 所说的进行操作。Project Structure -> Project Settings -> Modules
。单击'+'
符号并选择'Android'
按应用。这也应该解决可能出现的一些问题。我也在使用 Android Studio Artic Fox 2020 并遇到了类似的问题。以上是关于Android Studio (Windows) 中的 Flutter 错误:无法识别的选项:--add-opens的主要内容,如果未能解决你的问题,请参考以下文章
[Android] Windows 7下 Android studio 安装 Genymotion 来调试 Android 遇到的问题总结
为啥我的Android studio里面没有Preview。在View-Tool Windows
windows7平台android studio新建Android项目,报错