diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 4dcdfaf9f91d2..815b092a7b089 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/FlutterActivityDele 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 29f204fd82dcc..df2f4a593572f 100644 --- a/shell/platform/android/BUILD.gn +++ b/shell/platform/android/BUILD.gn @@ -125,6 +125,7 @@ android_java_sources = [ "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 0000000000000..91502c8568f0d --- /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. + * + *
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: + * + *
{@code + *+ * + * 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: + * + *+ * + * + * }
{@code + * FlutterInjector.setInstance( + * new FlutterInjector.Builder().setDynamicFeatureManager(yourCustomManager).build()); + * }+ */ +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()); + } +}