我有一个 flutter 项目,过去一个月在 iOS 和 Android 上运行,没有出现任何问题。最近我完成了开发并构建了一个发布版本,我必须升级 kotlin,一切都很好。不过,我尝试进行一些最后的更改并再次运行调试以检查兼容性,并且应用程序在启动后立即关闭。
我有使用 iOS 的经验,但我完全不知道如何使用 Android Studio。
关于版本 63 和 61 还有其他与此非常相似的问题,但我无法根据这些问题的建议解决此问题。
$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.3, on macOS 14.4.1 23E224 darwin-arm64, locale en-AU)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.2)
[✓] VS Code (version 1.89.0)
[✓] Connected device (5 available)
[✓] Network resources
$ java --version
OpenJDK 64-Bit Server VM Homebrew (build 21.0.2, mixed mode, sharing)
$ ./gradlew clean -scan
Task :gradle:compileGroovy FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':gradle:compileGroovy'.
BUG! exception in phase 'semantic analysis' in source unit '/Users/myName/Applications/Flutter/flutter/packages/flutter_tools/gradle/src/main/groovy/app_plugin_loader.groovy'
Unsupported class file major version 65
所以看起来我正在使用Java 21,我的项目构建文件不支持它?
我为构建应用程序的发布版本所做的唯一更改是将 kotlin 版本从 1.7.10 >> 1.9.24.
从那时起,我从 7.3 >> 7.6.1 升级了 Gradle
这是我的 flutter android 配置文件:
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
设置.gradle
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}
settings.ext.flutterSdkPath = flutterSdkPath()
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version '7.4.2' apply false
// START: FlutterFire Configuration
id "com.google.gms.google-services" version "4.3.15" apply false
id "com.google.firebase.crashlytics" version "2.8.1" apply false
// END: FlutterFire Configuration
id "org.jetbrains.kotlin.android" version "1.9.24" apply false // was 1.7.10
}
build.gradle(应用程序级别)
...
android {
namespace "..."
compileSdk flutter.compileSdkVersion
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
applicationId "..."
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
// Load signing information
signingConfigs {
release { ... }
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
}
}
}
flutter { ... }
dependencies { ... }
有什么想法吗?谢谢你
我已经尝试过了
Gradle 7.6 永远不会与 Java 21 一起使用,因为正如您所观察到的,Java 21 不受支持 直到 Gradle 8.4。
您必须升级 Gradle,或降级 Java。
如果您的首要任务只是让它正常工作,那么降级 Java 可能是一种更简单的方法,因为其他一些工具可能还无法与 Java 21 完全兼容。