当项目已评估时,Flutter 无法运行 Project.afterEvaluate(Closure)

Aks*_*hlc 22 android gradle dart onesignal flutter

解决方法: 看起来 onesignal 插件对 flutter_tools 有依赖性。解决方案是在“android/app/build.gradle”中按顺序将 onesignal 插件放在它后面:

\n
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"\napply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'\n
Run Code Online (Sandbox Code Playgroud)\n

将 Flutter 版本从 2.8.1 升级到 2.10 后,我开始收到以下错误。我重新安装了Flutter,但结果没有改变。当我将 Flutter 降级到 2.8.1 时,它可以正常工作,但是当我升级到 2.10 时,它就不行了。

\n
\nRunning Gradle task 'assembleDebug'...\n\nFAILURE: Build failed with an exception.\n\n* Where:\nScript '/Users/aksoyhlc/flutter/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 421\n\n What went wrong:\nA problem occurred evaluating root project 'android'.\n> A problem occurred configuring project ':app'.\n   > **Cannot run Project.afterEvaluate(Closure) when the project is already evaluated.**\n\n* Try:\nRun with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.\n\n* Get more help at https://help.gradle.org\n\nBU\xc4\xb0LD FAILED in 798ms\nException: Gradle task assembleDebug failed with exit code 1\n
Run Code Online (Sandbox Code Playgroud)\n

android/app/build.gradle 文件的一部分

\n
buildscript {\n    repositories {\n       \n        google()  // Google's Maven repository\n        maven { url 'https://plugins.gradle.org/m2/' } \n    }\n    dependencies {\n       \n        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.6, 0.99.99]'\n        classpath 'com.google.gms:google-services:4.3.8'\n    }\n}\nallprojects {\n\n    repositories {\n        // Check that you have the following line (if not, add it):\n        google()  // Google's Maven repository\n\n    }\n}\napply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'\n
Run Code Online (Sandbox Code Playgroud)\n

android/build.gradle 文件

\n
buildscript {\n    ext.kotlin_version = '1.6.10'\n    repositories {\n        google()\n        mavenCentral()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:4.1.0'\n        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"\n        classpath 'com.google.gms:google-services:4.3.8'\n\n    }\n\n\n}\n\nallprojects {\n    repositories {\n        google()\n        mavenCentral()\n       /* maven {\n            url "${project(':background_fetch').projectDir}/libs"\n        }*/\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = "${rootProject.buildDir}/${project.name}"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n\n\n\n
Run Code Online (Sandbox Code Playgroud)\n
[\xe2\x9c\x93] Flutter (Channel stable, 2.10.0, on macOS 12.0.1 21A559 darwin-x64, locale\n    tr-TR)\n    \xe2\x80\xa2 Flutter version 2.10.0 at /Users/aksoyhlc/flutter/flutter\n    \xe2\x80\xa2 Upstream repository https://github.com/flutter/flutter.git\n    \xe2\x80\xa2 Framework revision 5f105a6ca7 (4 days ago), 2022-02-01 14:15:42 -0800\n    \xe2\x80\xa2 Engine revision 776efd2034\n    \xe2\x80\xa2 Dart version 2.16.0\n    \xe2\x80\xa2 DevTools version 2.9.2\n\n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version\n    32.1.0-rc1)\n    \xe2\x80\xa2 Android SDK at /Users/aksoyhlc/Library/Android/sdk\n    \xe2\x80\xa2 Platform android-32, build-tools 32.1.0-rc1\n    \xe2\x80\xa2 Java binary at: /Applications/Android\n      Studio.app/Contents/jre/Contents/Home/bin/java\n    \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)\n    \xe2\x80\xa2 All Android licenses accepted.\n\n[\xe2\x9c\x93] Xcode - develop for iOS and macOS (Xcode 13.2.1)\n    \xe2\x80\xa2 Xcode at /Applications/Xcode.app/Contents/Developer\n    \xe2\x80\xa2 CocoaPods version 1.11.2\n\n[\xe2\x9c\x93] Chrome - develop for the web\n    \xe2\x80\xa2 Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome\n\n[\xe2\x9c\x93] Android Studio (version 2021.1)\n    \xe2\x80\xa2 Android Studio at /Applications/Android Studio.app/Contents\n    \xe2\x80\xa2 Flutter plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/9212-flutter\n    \xe2\x80\xa2 Dart plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/6351-dart\n    \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)\n\n[\xe2\x9c\x93] VS Code (version 1.64.0)\n    \xe2\x80\xa2 VS Code at /Applications/Visual Studio Code.app/Contents\n    \xe2\x80\xa2 Flutter extension version 3.34.0\n\n[\xe2\x9c\x93] Connected device (2 available)\n    \xe2\x80\xa2 Redmi Note 8 Pro (mobile) \xe2\x80\xa2 ------- \xe2\x80\xa2 android-arm64  \xe2\x80\xa2 Android 11\n      (API 30)\n    \xe2\x80\xa2 Chrome (web)              \xe2\x80\xa2 chrome           \xe2\x80\xa2 web-javascript \xe2\x80\xa2 Google\n      Chrome 98.0.4758.80\n\n[\xe2\x9c\x93] HTTP Host Availability\n    \xe2\x80\xa2 All required HTTP hosts are available\n
Run Code Online (Sandbox Code Playgroud)\n

shp*_*itc 12

看起来 onesignal 插件对 flutter_tools 有依赖。解决方案是在“android/app/build.gradle”中按顺序将 onesignal 插件放在它后面:

apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
Run Code Online (Sandbox Code Playgroud)


小智 7

对于那些仍然遇到此错误的人。这个解决方案对我有用。

问题是 OneSignal 插件与 Gradle 7.x 版本不兼容。所以你可以修改 Gradle 版本,如下所示:

android/gradle/wrapper/gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-all.zip
Run Code Online (Sandbox Code Playgroud)

android/build.gradle

    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.0'
        // OTHERS
    }
Run Code Online (Sandbox Code Playgroud)

然后你可以在中初始化OneSignal插件android/app/build.gradle

buildscript {
    repositories {
        // ...
        maven { url 'https://plugins.gradle.org/m2/' } // Gradle Plugin Portal
    }
    dependencies {
        // ...
        // OneSignal-Gradle-Plugin
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.10, 0.99.99]'
    }
}

apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
Run Code Online (Sandbox Code Playgroud)

需要注意的是,OneSignal 插件必须放在上面apply plugin: 'com.android.application',所以放在下面apply plugin: 'com.android.application'可能会导致插件无法按预期工作。


shp*_*itc 5

有同样的问题。仍然没有解决它,但看起来 onesignal 插件有问题。如果你将其删除,一切都会正常。至少对于我来说。

在 OneSignal-Gradle-Plugin 存储库中打开的问题: https://github.com/OneSignal/OneSignal-Gradle-Plugin/issues/184