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

22

解决方法:看起来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'

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


Running Gradle task 'assembleDebug'...

FAILURE: Build failed with an exception.

* Where:
Script '/Users/aksoyhlc/flutter/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 421

 What went wrong:
A problem occurred evaluating root project 'android'.
> A problem occurred configuring project ':app'.
   > **Cannot run Project.afterEvaluate(Closure) when the project is already evaluated.**

* Try:
Run 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.

* Get more help at https://help.gradle.org

BUİLD FAILED in 798ms
Exception: Gradle task assembleDebug failed with exit code 1

android/app/build.gradle文件的部分内容

buildscript {
    repositories {
       
        google()  // Google's Maven repository
        maven { url 'https://plugins.gradle.org/m2/' } 
    }
    dependencies {
       
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.6, 0.99.99]'
        classpath 'com.google.gms:google-services:4.3.8'
    }
}
allprojects {

    repositories {
        // Check that you have the following line (if not, add it):
        google()  // Google's Maven repository

    }
}
apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

android/build.gradle文件

buildscript {
    ext.kotlin_version = '1.6.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.8'

    }


}

allprojects {
    repositories {
        google()
        mavenCentral()
       /* maven {
            url "${project(':background_fetch').projectDir}/libs"
        }*/
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}




[✓] Flutter (Channel stable, 2.10.0, on macOS 12.0.1 21A559 darwin-x64, locale
    tr-TR)
    • Flutter version 2.10.0 at /Users/aksoyhlc/flutter/flutter
    • Upstream repository https://github.com/flutter/flutter.gitFramework revision 5f105a6ca7 (4 days ago), 2022-02-01 14:15:42 -0800Engine revision 776efd2034
    • Dart version 2.16.0DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version
    32.1.0-rc1)
    • Android SDK at /Users/aksoyhlc/Library/Android/sdk
    • Platform android-32, build-tools 32.1.0-rc1
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/DeveloperCocoaPods version 1.11.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/Android Studio.app/ContentsFlutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutterDart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dartJava version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)

[✓] VS Code (version 1.64.0)
    • VS Code at /Applications/Visual Studio Code.app/ContentsFlutter extension version 3.34.0

[✓] Connected device (2 available)
    • Redmi Note 8 Pro (mobile) • ------- • android-arm64  • Android 11
      (API 30)
    • Chrome (web)              • chrome           • web-javascript • Google
      Chrome 98.0.4758.80

[✓] HTTP Host AvailabilityAll required HTTP hosts are available
4个回答

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'

这样“修复”了构建,但破坏了通知。请参见 https://github.com/OneSignal/OneSignal-Gradle-Plugin/issues/184 上的详细信息。 - Westy92
@shpitc 这里的 flutterRoot 是什么意思? - nagendra nag
@nagendra,Flutter SDK文件夹。例如,我将其放在C:\ Flutter中。 - shpitc
@shpitc,明白了。 - nagendra nag

7

对于仍然遇到此错误的人,此解决方案对我有效。

问题在于 OneSignal 插件与 Gradle 7.x 版本不兼容。您可以像下面这样修改 Gradle 版本:

android/gradle/wrapper/gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.2-all.zip

android/build.gradle

    dependencies {
        classpath 'com.android.tools.build:gradle:4.2.0'
        // OTHERS
    }

接着,您可以在android/app/build.gradle中初始化OneSignal插件。

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'

请注意,OneSignal插件必须放置在apply plugin: 'com.android.application'之上,如果将其放置在apply plugin: 'com.android.application'之下,则可能导致插件无法按预期工作。

5

这个问题对我来说还没有解决。我已经在另一个答案中描述了我的解决方案。 - shpitc

0

所有这些答案对我都没有用,将我的Gradle版本从7.1.2降级到android/build.gradle中的4.1.0对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接