diff --git a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart
index b81afb1..7f76b5a 100644
--- a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart
+++ b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart
@@ -273,7 +273,7 @@
         ..writeAsStringSync('Existing release config');
 
       final FlutterProject project = FlutterProject.fromPath('project');
-      await injectPlugins(project);
+      await injectPlugins(project, checkProjects: true);
 
       final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync();
       expect(debugContents, contains(
diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart
index 270b316..96216ed 100644
--- a/packages/flutter_tools/test/general.shard/plugins_test.dart
+++ b/packages/flutter_tools/test/general.shard/plugins_test.dart
@@ -148,7 +148,13 @@
 
     testUsingContext('Registrant uses old embedding in app project', () async {
       when(flutterProject.isModule).thenReturn(false);
-      when(featureFlags.isNewAndroidEmbeddingEnabled).thenReturn(false);
+
+      final File androidManifest = flutterProject.directory
+        .childDirectory('android')
+        .childFile('AndroidManifest.xml')
+        ..createSync(recursive: true)
+        ..writeAsStringSync(kAndroidManifestUsingOldEmbedding);
+      when(androidProject.appManifestFile).thenReturn(androidManifest);
 
       await injectPlugins(flutterProject);
 
@@ -167,7 +173,6 @@
 
     testUsingContext('Registrant uses new embedding if app uses new embedding', () async {
       when(flutterProject.isModule).thenReturn(false);
-      when(featureFlags.isNewAndroidEmbeddingEnabled).thenReturn(true);
 
       final File androidManifest = flutterProject.directory
         .childDirectory('android')
@@ -193,7 +198,6 @@
 
     testUsingContext('Registrant uses shim for plugins using old embedding if app uses new embedding', () async {
       when(flutterProject.isModule).thenReturn(false);
-      when(featureFlags.isNewAndroidEmbeddingEnabled).thenReturn(true);
 
       final File androidManifest = flutterProject.directory
         .childDirectory('android')
@@ -291,7 +295,6 @@
 
     testUsingContext('Registrant doesn\'t use new embedding if app doesn\'t use new embedding', () async {
       when(flutterProject.isModule).thenReturn(false);
-      when(featureFlags.isNewAndroidEmbeddingEnabled).thenReturn(true);
 
       final File androidManifest = flutterProject.directory
         .childDirectory('android')
@@ -317,7 +320,13 @@
 
     testUsingContext('Registrant uses old embedding in module project', () async {
       when(flutterProject.isModule).thenReturn(true);
-      when(featureFlags.isNewAndroidEmbeddingEnabled).thenReturn(false);
+
+      final File androidManifest = flutterProject.directory
+        .childDirectory('android')
+        .childFile('AndroidManifest.xml')
+        ..createSync(recursive: true)
+        ..writeAsStringSync(kAndroidManifestUsingOldEmbedding);
+      when(androidProject.appManifestFile).thenReturn(androidManifest);
 
       await injectPlugins(flutterProject);
 
@@ -336,7 +345,6 @@
 
     testUsingContext('Registrant uses new embedding if module uses new embedding', () async {
       when(flutterProject.isModule).thenReturn(true);
-      when(featureFlags.isNewAndroidEmbeddingEnabled).thenReturn(true);
 
       final File androidManifest = flutterProject.directory
         .childDirectory('android')
@@ -362,7 +370,6 @@
 
     testUsingContext('Registrant doesn\'t use new embedding if module doesn\'t use new embedding', () async {
       when(flutterProject.isModule).thenReturn(true);
-      when(featureFlags.isNewAndroidEmbeddingEnabled).thenReturn(true);
 
       final File androidManifest = flutterProject.directory
         .childDirectory('android')
diff --git a/packages/flutter_tools/test/general.shard/project_test.dart b/packages/flutter_tools/test/general.shard/project_test.dart
index d629be9..4a250a7 100644
--- a/packages/flutter_tools/test/general.shard/project_test.dart
+++ b/packages/flutter_tools/test/general.shard/project_test.dart
@@ -531,7 +531,12 @@
   final Directory directory = fs.directory('some_project');
   directory.childFile('.packages').createSync(recursive: true);
   directory.childDirectory('ios').createSync(recursive: true);
-  directory.childDirectory('android').createSync(recursive: true);
+  final Directory androidDirectory = directory
+      .childDirectory('android')
+      ..createSync(recursive: true);
+  androidDirectory
+    .childFile('AndroidManifest.xml')
+    .writeAsStringSync('<manifest></manifest>');
   return FlutterProject.fromDirectory(directory);
 }
 
