Test the Android embedding v2 (#42708)

* Test the Android embedding v2

* Update integration tests

* Split into shards
diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart
index 1a82922..4d26cb9 100644
--- a/packages/flutter_tools/lib/src/commands/create.dart
+++ b/packages/flutter_tools/lib/src/commands/create.dart
@@ -623,7 +623,7 @@
       'description': projectDescription,
       'dartSdk': '$flutterRoot/bin/cache/dart-sdk',
       'androidX': androidX,
-      'useNewAndroidEmbedding': featureFlags.isNewAndroidEmbeddingEnabled,
+      'useAndroidEmbeddingV2': featureFlags.isAndroidEmbeddingV2Enabled,
       'androidMinApiLevel': android.minApiLevel,
       'androidSdkVersion': android_sdk.minimumAndroidSdkVersion,
       'androidFlutterJar': '$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar',
diff --git a/packages/flutter_tools/lib/src/features.dart b/packages/flutter_tools/lib/src/features.dart
index 332506d..d3237d7 100644
--- a/packages/flutter_tools/lib/src/features.dart
+++ b/packages/flutter_tools/lib/src/features.dart
@@ -36,8 +36,8 @@
   /// Whether flutter desktop for Windows is enabled.
   bool get isWindowsEnabled => isEnabled(flutterWindowsDesktopFeature);
 
-  /// Whether the new Android embedding is enabled.
-  bool get isNewAndroidEmbeddingEnabled => isEnabled(flutterNewAndroidEmbeddingFeature);
+  /// Whether the Android embedding V2 is enabled.
+  bool get isAndroidEmbeddingV2Enabled => isEnabled(flutterAndroidEmbeddingV2Feature);
 
   /// Whether a particular feature is enabled for the current channel.
   ///
@@ -71,7 +71,7 @@
   flutterMacOSDesktopFeature,
   flutterWindowsDesktopFeature,
   flutterBuildPluginAsAarFeature,
-  flutterNewAndroidEmbeddingFeature,
+  flutterAndroidEmbeddingV2Feature,
 ];
 
 /// The [Feature] for flutter web.
@@ -133,9 +133,10 @@
 );
 
 /// The [Feature] for generating projects using the new Android embedding.
-const Feature flutterNewAndroidEmbeddingFeature = Feature(
-  name: 'flutter create generates projects using the new Android embedding',
-  configSetting: 'enable-new-android-embedding',
+const Feature flutterAndroidEmbeddingV2Feature = Feature(
+  name: 'flutter create generates projects using the Android embedding V2',
+  environmentOverride: 'ENABLE_ANDROID_EMBEDDING_V2',
+  configSetting: 'enable-android-embedding-v2',
   master: FeatureChannelSetting(
     available: true,
     enabledByDefault: false,
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart
index a582d8d..9568e58 100644
--- a/packages/flutter_tools/lib/src/project.dart
+++ b/packages/flutter_tools/lib/src/project.dart
@@ -617,7 +617,7 @@
     _overwriteFromTemplate(fs.path.join(
       'module',
       'android',
-      featureFlags.isNewAndroidEmbeddingEnabled ? 'library_new_embedding' : 'library',
+      featureFlags.isAndroidEmbeddingV2Enabled ? 'library_new_embedding' : 'library',
     ), ephemeralDirectory);
     _overwriteFromTemplate(fs.path.join('module', 'android', 'gradle'), ephemeralDirectory);
     gradle.injectGradleWrapperIfNeeded(ephemeralDirectory);
@@ -631,7 +631,7 @@
         'projectName': parent.manifest.appName,
         'androidIdentifier': parent.manifest.androidPackage,
         'androidX': usesAndroidX,
-        'useNewAndroidEmbedding': featureFlags.isNewAndroidEmbeddingEnabled,
+        'useAndroidEmbeddingV2': featureFlags.isAndroidEmbeddingV2Enabled,
       },
       printStatusWhenWriting: false,
       overwriteExisting: true,
diff --git a/packages/flutter_tools/templates/app/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl b/packages/flutter_tools/templates/app/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl
index 6506de1..9371a79 100644
--- a/packages/flutter_tools/templates/app/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl
+++ b/packages/flutter_tools/templates/app/android-java.tmpl/app/src/main/java/androidIdentifier/MainActivity.java.tmpl
@@ -1,6 +1,6 @@
 package {{androidIdentifier}};
 
-{{#useNewAndroidEmbedding}}
+{{#useAndroidEmbeddingV2}}
 {{#androidX}}
 import androidx.annotation.NonNull;
 {{/androidX}}
@@ -17,8 +17,8 @@
     GeneratedPluginRegistrant.registerWith(flutterEngine);
   }
 }
-{{/useNewAndroidEmbedding}}
-{{^useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
+{{^useAndroidEmbeddingV2}}
 import android.os.Bundle;
 import io.flutter.app.FlutterActivity;
 import io.flutter.plugins.GeneratedPluginRegistrant;
@@ -30,4 +30,4 @@
     GeneratedPluginRegistrant.registerWith(this);
   }
 }
-{{/useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
diff --git a/packages/flutter_tools/templates/app/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl b/packages/flutter_tools/templates/app/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl
index fe04735..de068cf 100644
--- a/packages/flutter_tools/templates/app/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl
+++ b/packages/flutter_tools/templates/app/android-kotlin.tmpl/app/src/main/kotlin/androidIdentifier/MainActivity.kt.tmpl
@@ -1,6 +1,6 @@
 package {{androidIdentifier}}
 
-{{#useNewAndroidEmbedding}}
+{{#useAndroidEmbeddingV2}}
 {{#androidX}}
 import androidx.annotation.NonNull;
 {{/androidX}}
@@ -16,8 +16,8 @@
     GeneratedPluginRegistrant.registerWith(flutterEngine);
   }
 }
-{{/useNewAndroidEmbedding}}
-{{^useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
+{{^useAndroidEmbeddingV2}}
 import android.os.Bundle
 import io.flutter.app.FlutterActivity
 import io.flutter.plugins.GeneratedPluginRegistrant
@@ -28,4 +28,4 @@
     GeneratedPluginRegistrant.registerWith(this)
   }
 }
-{{/useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
diff --git a/packages/flutter_tools/templates/app/android.tmpl/app/src/main/AndroidManifest.xml.tmpl b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/AndroidManifest.xml.tmpl
index 00cce24..c64711b 100644
--- a/packages/flutter_tools/templates/app/android.tmpl/app/src/main/AndroidManifest.xml.tmpl
+++ b/packages/flutter_tools/templates/app/android.tmpl/app/src/main/AndroidManifest.xml.tmpl
@@ -16,7 +16,7 @@
             android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
             android:hardwareAccelerated="true"
             android:windowSoftInputMode="adjustResize">
-            {{^useNewAndroidEmbedding}}
+            {{^useAndroidEmbeddingV2}}
             <!-- This keeps the window background of the activity showing
                  until Flutter renders its first frame. It can be removed if
                  there is no splash screen (such as the default splash screen
@@ -24,18 +24,18 @@
             <meta-data
                 android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                 android:value="true" />
-            {{/useNewAndroidEmbedding}}
+            {{/useAndroidEmbeddingV2}}
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
-        {{#useNewAndroidEmbedding}}
+        {{#useAndroidEmbeddingV2}}
         <!-- Don't delete the meta-data below.
              This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
         <meta-data
             android:name="flutterEmbedding"
             android:value="2" />
-        {{/useNewAndroidEmbedding}}
+        {{/useAndroidEmbeddingV2}}
     </application>
 </manifest>
diff --git a/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/AndroidManifest.xml.tmpl b/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/AndroidManifest.xml.tmpl
index 3ef4d25..ae956a4 100644
--- a/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/AndroidManifest.xml.tmpl
+++ b/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/AndroidManifest.xml.tmpl
@@ -36,12 +36,12 @@
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
-        {{#useNewAndroidEmbedding}}
+        {{#useAndroidEmbeddingV2}}
         <!-- Don't delete the meta-data below.
              This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
         <meta-data
             android:name="flutterEmbedding"
             android:value="2" />
-        {{/useNewAndroidEmbedding}}
+        {{/useAndroidEmbeddingV2}}
     </application>
 </manifest>
diff --git a/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/java/androidIdentifier/host/MainActivity.java.tmpl b/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/java/androidIdentifier/host/MainActivity.java.tmpl
index bc7daff..32963b3 100644
--- a/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/java/androidIdentifier/host/MainActivity.java.tmpl
+++ b/packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/java/androidIdentifier/host/MainActivity.java.tmpl
@@ -1,7 +1,7 @@
 package {{androidIdentifier}}.host;
 
 import android.os.Bundle;
-{{#useNewAndroidEmbedding}}
+{{#useAndroidEmbeddingV2}}
 {{#androidX}}
 import androidx.annotation.NonNull;
 {{/androidX}}
@@ -18,8 +18,8 @@
     GeneratedPluginRegistrant.registerWith(flutterEngine);
   }
 }
-{{/useNewAndroidEmbedding}}
-{{^useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
+{{^useAndroidEmbeddingV2}}
 import io.flutter.app.FlutterActivity;
 import io.flutter.plugins.GeneratedPluginRegistrant;
 
@@ -30,4 +30,4 @@
     GeneratedPluginRegistrant.registerWith(this);
   }
 }
-{{/useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
diff --git a/packages/flutter_tools/templates/plugin/android-java.tmpl/src/main/java/androidIdentifier/pluginClass.java.tmpl b/packages/flutter_tools/templates/plugin/android-java.tmpl/src/main/java/androidIdentifier/pluginClass.java.tmpl
index f6c9d52..b6a7297 100644
--- a/packages/flutter_tools/templates/plugin/android-java.tmpl/src/main/java/androidIdentifier/pluginClass.java.tmpl
+++ b/packages/flutter_tools/templates/plugin/android-java.tmpl/src/main/java/androidIdentifier/pluginClass.java.tmpl
@@ -1,6 +1,6 @@
 package {{androidIdentifier}};
 
-{{#useNewAndroidEmbedding}}
+{{#useAndroidEmbeddingV2}}
 {{#androidX}}
 import androidx.annotation.NonNull;
 {{/androidX}}
@@ -29,9 +29,13 @@
       result.notImplemented();
     }
   }
+
+  @Override
+  public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
+  }
 }
-{{/useNewAndroidEmbedding}}
-{{^useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
+{{^useAndroidEmbeddingV2}}
 import io.flutter.plugin.common.MethodCall;
 import io.flutter.plugin.common.MethodChannel;
 import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
@@ -55,4 +59,4 @@
     }
   }
 }
-{{/useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
diff --git a/packages/flutter_tools/templates/plugin/android-kotlin.tmpl/src/main/kotlin/androidIdentifier/pluginClass.kt.tmpl b/packages/flutter_tools/templates/plugin/android-kotlin.tmpl/src/main/kotlin/androidIdentifier/pluginClass.kt.tmpl
index af45d9c..1147f1c 100644
--- a/packages/flutter_tools/templates/plugin/android-kotlin.tmpl/src/main/kotlin/androidIdentifier/pluginClass.kt.tmpl
+++ b/packages/flutter_tools/templates/plugin/android-kotlin.tmpl/src/main/kotlin/androidIdentifier/pluginClass.kt.tmpl
@@ -1,6 +1,6 @@
 package {{androidIdentifier}}
 
-{{#useNewAndroidEmbedding}}
+{{#useAndroidEmbeddingV2}}
 {{#androidX}}
 import androidx.annotation.NonNull;
 {{/androidX}}
@@ -15,7 +15,7 @@
 
 /** {{pluginClass}} */
 public class {{pluginClass}}: FlutterPlugin, MethodCallHandler {
-  override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPluginBinding) {
+  override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
     val channel = MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "{{projectName}}")
     channel.setMethodCallHandler({{pluginClass}}());
   }
@@ -27,9 +27,12 @@
       result.notImplemented()
     }
   }
+
+  override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
+  }
 }
-{{/useNewAndroidEmbedding}}
-{{^useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
+{{^useAndroidEmbeddingV2}}
 import io.flutter.plugin.common.MethodCall
 import io.flutter.plugin.common.MethodChannel
 import io.flutter.plugin.common.MethodChannel.MethodCallHandler
@@ -53,4 +56,4 @@
     }
   }
 }
-{{/useNewAndroidEmbedding}}
+{{/useAndroidEmbeddingV2}}
diff --git a/packages/flutter_tools/test/src/testbed.dart b/packages/flutter_tools/test/src/testbed.dart
index 7f9ab08..c7298ab 100644
--- a/packages/flutter_tools/test/src/testbed.dart
+++ b/packages/flutter_tools/test/src/testbed.dart
@@ -699,7 +699,7 @@
     this.isMacOSEnabled = false,
     this.isWebEnabled = false,
     this.isWindowsEnabled = false,
-    this.isNewAndroidEmbeddingEnabled = false,
+    this.isAndroidEmbeddingV2Enabled = false,
 });
 
   @override
@@ -715,7 +715,7 @@
   final bool isWindowsEnabled;
 
   @override
-  final bool isNewAndroidEmbeddingEnabled;
+  final bool isAndroidEmbeddingV2Enabled;
 
   @override
   bool isEnabled(Feature feature) {
@@ -728,8 +728,8 @@
         return isMacOSEnabled;
       case flutterWindowsDesktopFeature:
         return isWindowsEnabled;
-      case flutterNewAndroidEmbeddingFeature:
-        return isNewAndroidEmbeddingEnabled;
+      case flutterAndroidEmbeddingV2Feature:
+        return isAndroidEmbeddingV2Enabled;
     }
     return false;
   }