diff --git a/dev/benchmarks/complex_layout/android/build.gradle b/dev/benchmarks/complex_layout/android/build.gradle index 6b39839df6..013824eda7 100644 --- a/dev/benchmarks/complex_layout/android/build.gradle +++ b/dev/benchmarks/complex_layout/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/benchmarks/macrobenchmarks/android/build.gradle b/dev/benchmarks/macrobenchmarks/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/benchmarks/macrobenchmarks/android/build.gradle +++ b/dev/benchmarks/macrobenchmarks/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/benchmarks/microbenchmarks/android/build.gradle b/dev/benchmarks/microbenchmarks/android/build.gradle index 734b31571e..27fcdd5b7b 100644 --- a/dev/benchmarks/microbenchmarks/android/build.gradle +++ b/dev/benchmarks/microbenchmarks/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/benchmarks/platform_views_layout/android/build.gradle b/dev/benchmarks/platform_views_layout/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/benchmarks/platform_views_layout/android/build.gradle +++ b/dev/benchmarks/platform_views_layout/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/benchmarks/platform_views_layout_hybrid_composition/android/build.gradle b/dev/benchmarks/platform_views_layout_hybrid_composition/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/benchmarks/platform_views_layout_hybrid_composition/android/build.gradle +++ b/dev/benchmarks/platform_views_layout_hybrid_composition/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/benchmarks/test_apps/stocks/android/build.gradle b/dev/benchmarks/test_apps/stocks/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/benchmarks/test_apps/stocks/android/build.gradle +++ b/dev/benchmarks/test_apps/stocks/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/abstract_method_smoke_test/android/build.gradle b/dev/integration_tests/abstract_method_smoke_test/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/abstract_method_smoke_test/android/build.gradle +++ b/dev/integration_tests/abstract_method_smoke_test/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/android_embedding_v2_smoke_test/android/build.gradle b/dev/integration_tests/android_embedding_v2_smoke_test/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/android_embedding_v2_smoke_test/android/build.gradle +++ b/dev/integration_tests/android_embedding_v2_smoke_test/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/android_semantics_testing/android/build.gradle b/dev/integration_tests/android_semantics_testing/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/android_semantics_testing/android/build.gradle +++ b/dev/integration_tests/android_semantics_testing/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/android_views/android/build.gradle b/dev/integration_tests/android_views/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/android_views/android/build.gradle +++ b/dev/integration_tests/android_views/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/channels/android/build.gradle b/dev/integration_tests/channels/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/channels/android/build.gradle +++ b/dev/integration_tests/channels/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/external_ui/android/build.gradle b/dev/integration_tests/external_ui/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/external_ui/android/build.gradle +++ b/dev/integration_tests/external_ui/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/flavors/android/build.gradle b/dev/integration_tests/flavors/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/flavors/android/build.gradle +++ b/dev/integration_tests/flavors/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/flutter_gallery/android/build.gradle b/dev/integration_tests/flutter_gallery/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/flutter_gallery/android/build.gradle +++ b/dev/integration_tests/flutter_gallery/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/gradle_deprecated_settings/android/build.gradle b/dev/integration_tests/gradle_deprecated_settings/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/gradle_deprecated_settings/android/build.gradle +++ b/dev/integration_tests/gradle_deprecated_settings/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/hybrid_android_views/android/build.gradle b/dev/integration_tests/hybrid_android_views/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/hybrid_android_views/android/build.gradle +++ b/dev/integration_tests/hybrid_android_views/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/non_nullable/android/build.gradle b/dev/integration_tests/non_nullable/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/non_nullable/android/build.gradle +++ b/dev/integration_tests/non_nullable/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/platform_interaction/android/build.gradle b/dev/integration_tests/platform_interaction/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/platform_interaction/android/build.gradle +++ b/dev/integration_tests/platform_interaction/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/release_smoke_test/android/build.gradle b/dev/integration_tests/release_smoke_test/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/release_smoke_test/android/build.gradle +++ b/dev/integration_tests/release_smoke_test/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/integration_tests/ui/android/build.gradle b/dev/integration_tests/ui/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/integration_tests/ui/android/build.gradle +++ b/dev/integration_tests/ui/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/dev/manual_tests/android/build.gradle b/dev/manual_tests/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/dev/manual_tests/android/build.gradle +++ b/dev/manual_tests/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/examples/flutter_view/android/build.gradle b/examples/flutter_view/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/examples/flutter_view/android/build.gradle +++ b/examples/flutter_view/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/examples/hello_world/android/build.gradle b/examples/hello_world/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/examples/hello_world/android/build.gradle +++ b/examples/hello_world/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/examples/image_list/android/build.gradle b/examples/image_list/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/examples/image_list/android/build.gradle +++ b/examples/image_list/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/examples/layers/android/build.gradle b/examples/layers/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/examples/layers/android/build.gradle +++ b/examples/layers/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/examples/platform_channel/android/build.gradle b/examples/platform_channel/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/examples/platform_channel/android/build.gradle +++ b/examples/platform_channel/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/examples/platform_view/android/build.gradle b/examples/platform_view/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/examples/platform_view/android/build.gradle +++ b/examples/platform_view/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking { diff --git a/packages/flutter_tools/templates/app_shared/android-java.tmpl/build.gradle b/packages/flutter_tools/templates/app_shared/android-java.tmpl/build.gradle index 622ddc5c15..0b4cf534e0 100644 --- a/packages/flutter_tools/templates/app_shared/android-java.tmpl/build.gradle +++ b/packages/flutter_tools/templates/app_shared/android-java.tmpl/build.gradle @@ -19,6 +19,8 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } diff --git a/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/build.gradle b/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/build.gradle index ed45c65885..24047dce5d 100644 --- a/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/build.gradle +++ b/packages/flutter_tools/templates/app_shared/android-kotlin.tmpl/build.gradle @@ -21,6 +21,8 @@ allprojects { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') } diff --git a/packages/flutter_tools/test/integration.shard/flutter_build_android_app_project_builddir_test.dart b/packages/flutter_tools/test/integration.shard/flutter_build_android_app_project_builddir_test.dart new file mode 100644 index 0000000000..4053072eea --- /dev/null +++ b/packages/flutter_tools/test/integration.shard/flutter_build_android_app_project_builddir_test.dart @@ -0,0 +1,85 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// @dart = 2.8 + +import 'package:file_testing/file_testing.dart'; +import 'package:flutter_tools/src/base/file_system.dart'; + +import '../src/common.dart'; +import 'test_utils.dart'; + +// Test the android/app/build directory not be created unexpectedly after +// `flutter build` commands, see https://github.com/flutter/flutter/issues/91018. +// +// The easiest way to reproduce this issue is to create a plugin project, then run +// `flutter build` command inside the `example` directory, so we create a plugin +// project in the test. +void main() { + Directory tempDir; + String flutterBin; + Directory exampleAppDir; + + setUp(() async { + tempDir = createResolvedTempDirectorySync('flutter_plugin_test.'); + flutterBin = fileSystem.path.join( + getFlutterRoot(), + 'bin', + 'flutter', + ); + exampleAppDir = tempDir.childDirectory('aaa').childDirectory('example'); + + processManager.runSync([ + flutterBin, + ...getLocalEngineArguments(), + 'create', + '--template=plugin', + '--platforms=android', + 'aaa', + ], workingDirectory: tempDir.path); + }); + + tearDown(() async { + tryToDelete(tempDir); + }); + + void _checkBuildDir() { + // The android/app/build directory should not exists + final Directory appBuildDir = fileSystem.directory(fileSystem.path.join( + exampleAppDir.path, + 'android', + 'app', + 'build', + )); + expect(appBuildDir, isNot(exists)); + } + + test( + 'android/app/build should not exists after flutter build apk', + () async { + processManager.runSync([ + flutterBin, + ...getLocalEngineArguments(), + 'build', + 'apk', + '--target-platform=android-arm', + ], workingDirectory: exampleAppDir.path); + _checkBuildDir(); + }, + ); + + test( + 'android/app/build should not exists after flutter build appbundle', + () async { + processManager.runSync([ + flutterBin, + ...getLocalEngineArguments(), + 'build', + 'appbundle', + '--target-platform=android-arm', + ], workingDirectory: exampleAppDir.path); + _checkBuildDir(); + }, + ); +} diff --git a/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart b/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart index 8cda4ca489..563f38c824 100644 --- a/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart +++ b/packages/flutter_tools/test/integration.shard/test_data/deferred_components_project.dart @@ -131,6 +131,8 @@ class BasicDeferredComponentsConfig extends DeferredComponentsConfig { rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" + } + subprojects { project.evaluationDependsOn(':app') } diff --git a/packages/integration_test/example/android/build.gradle b/packages/integration_test/example/android/build.gradle index f7ec09745f..c9049d0408 100644 --- a/packages/integration_test/example/android/build.gradle +++ b/packages/integration_test/example/android/build.gradle @@ -34,6 +34,8 @@ rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { project.evaluationDependsOn(':app') dependencyLocking {