Add FlutterPlayStoreSplitApplication for simpler opt in to Split AOT (#22752)
diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter
index 45424e0..bc681ff 100755
--- a/ci/licenses_golden/licenses_flutter
+++ b/ci/licenses_golden/licenses_flutter
@@ -716,6 +716,7 @@
FILE: ../../../flutter/shell/platform/android/io/flutter/app/FlutterActivityEvents.java
FILE: ../../../flutter/shell/platform/android/io/flutter/app/FlutterApplication.java
FILE: ../../../flutter/shell/platform/android/io/flutter/app/FlutterFragmentActivity.java
+FILE: ../../../flutter/shell/platform/android/io/flutter/app/FlutterPlayStoreSplitApplication.java
FILE: ../../../flutter/shell/platform/android/io/flutter/app/FlutterPluginRegistry.java
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/android/AndroidKeyProcessor.java
FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java
diff --git a/shell/platform/android/BUILD.gn b/shell/platform/android/BUILD.gn
index 29f204f..df2f4a5 100644
--- a/shell/platform/android/BUILD.gn
+++ b/shell/platform/android/BUILD.gn
@@ -125,6 +125,7 @@
"io/flutter/app/FlutterActivityEvents.java",
"io/flutter/app/FlutterApplication.java",
"io/flutter/app/FlutterFragmentActivity.java",
+ "io/flutter/app/FlutterPlayStoreSplitApplication.java",
"io/flutter/app/FlutterPluginRegistry.java",
"io/flutter/embedding/android/AndroidKeyProcessor.java",
"io/flutter/embedding/android/AndroidTouchProcessor.java",
diff --git a/shell/platform/android/io/flutter/app/FlutterPlayStoreSplitApplication.java b/shell/platform/android/io/flutter/app/FlutterPlayStoreSplitApplication.java
new file mode 100644
index 0000000..91502c8
--- /dev/null
+++ b/shell/platform/android/io/flutter/app/FlutterPlayStoreSplitApplication.java
@@ -0,0 +1,51 @@
+// Copyright 2013 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.
+
+package io.flutter.app;
+
+import androidx.annotation.CallSuper;
+import com.google.android.play.core.splitcompat.SplitCompatApplication;
+import io.flutter.FlutterInjector;
+import io.flutter.embedding.engine.dynamicfeatures.PlayStoreDynamicFeatureManager;
+
+/**
+ * Flutter's extension of {@link SplitCompatApplication} that injects a {@link
+ * PlayStoreDynamicFeatureManager} with {@link FlutterInjector} to enable Split AOT Flutter apps.
+ *
+ * <p>To use this class, either have your custom application class extend
+ * FlutterPlayStoreSplitApplication or use it directly in the app's AndroidManifest.xml by adding
+ * the following line:
+ *
+ * <pre>{@code
+ * <manifest
+ * ...
+ * <application
+ * android:name="io.flutter.app.FlutterPlayStoreSplitApplication"
+ * ...>
+ * </application>
+ * </manifest>
+ * }</pre>
+ *
+ * This class is meant to be used with the Google Play store. Custom non-play store applications do
+ * not need to extend SplitCompatApplication and should inject a custom {@link
+ * io.flutter.embedding.engine.dynamicfeatures.DynamicFeatureManager} implementation like so:
+ *
+ * <pre>{@code
+ * FlutterInjector.setInstance(
+ * new FlutterInjector.Builder().setDynamicFeatureManager(yourCustomManager).build());
+ * }</pre>
+ */
+public class FlutterPlayStoreSplitApplication extends SplitCompatApplication {
+ @Override
+ @CallSuper
+ public void onCreate() {
+ super.onCreate();
+ // Create and inject a PlayStoreDynamicFeatureManager, which is the default manager for
+ // interacting with the Google Play Store.
+ PlayStoreDynamicFeatureManager dynamicFeatureManager =
+ new PlayStoreDynamicFeatureManager(this, null);
+ FlutterInjector.setInstance(
+ new FlutterInjector.Builder().setDynamicFeatureManager(dynamicFeatureManager).build());
+ }
+}