[英]Flutter error in Android Studio (Windows): Unrecognized option: --add-opens
我一直在开发一个 Flutter 应用程序,在过去的几周里我已经成功地在 Android 模拟器和物理设备上运行。 不知何故,突然间,我无法在调试模式下运行它。 我尝试了在 SO 中找到的几个答案,但它们似乎都是无法真正解决问题的技巧。
当我尝试运行该应用程序时,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版本...
颤振医生输出...
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
}
应用程序/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 上工作了,所以我的问题可能很明显。 我可能在这里遗漏了一些东西,但如果我遗漏了,请告诉我,我会更新答案。
--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
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 选项。
一些库进行深度反射,意思是 setAccessible(true),因此它们可以访问所有成员,包括私有成员。 您可以使用 java 命令行上的 --add-opens 选项授予此访问权限。 使用此选项不会生成任何警告消息。
如果 --illegal-access=deny,并且您在运行时看到 IllegalAccessException 或 InaccessibleObjectException 消息,您可以使用 --add-opens 运行时选项,将参数基于异常消息中显示的信息。
由于 Java 9 中的一个错误已在 Java 10 中修复,因此 Gradle 在使用 Java 9 进行编译时无法利用发布标志。
示例 6. 设置 Java 发布标志 GroovyKotlin build.gradle compileJava { options.release = 7 } Java 编译器的历史选项仍然可用:
了解更多信息https://docs.gradle.org/current/userguide/gradle_daemon.html
请检查 gradel/properties 文件
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
android.useAndroidX=true
android.enableJetifier=true
将此更改为:-
删除 jvmargs 之后的行
让我知道这是否可行。 干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.