From 2cee248f3f1dfe098c669c1cb66345e7ae072ff2 Mon Sep 17 00:00:00 2001 From: Gray Mackall <34871572+gmackall@users.noreply.github.com> Date: Tue, 11 Mar 2025 13:50:28 -0700 Subject: [PATCH] [CP-stable] Add empty io.flutter.app.FlutterApplication to give deprecation notice, and un-break projects that have not migrated (#164730) This is just the engine portion of https://github.com/flutter/flutter/pull/164343. I.e., it does not contain the test change. Copied from the original cherry pick pr: This pull request is created by [automatic cherry pick workflow](https://github.com/flutter/flutter/blob/main/docs/releases/Flutter-Cherrypick-Process.md#automatically-creates-a-cherry-pick-request) Please fill in the form below, and a flutter domain expert will evaluate this cherry pick request. ### Issue Link: What is the link to the issue this cherry-pick is addressing? https://github.com/flutter/flutter/issues/164024 ### Changelog Description: Explain this cherry pick in one line that is accessible to most Flutter developers. See [best practices](https://github.com/flutter/flutter/blob/main/docs/releases/Hotfix-Documentation-Best-Practices.md) for examples https://github.com/flutter/flutter/issues/164024: Add back an empty `io.flutter.app.FlutterApplication` for Android apps that reference that class post v2 embedder migration ### Impact Description: What is the impact (ex. visual jank on Samsung phones, app crash, cannot ship an iOS app)? Does it impact development (ex. flutter doctor crashes when Android Studio is installed), or the shipping production app (the app crashes on launch) The class does not provide any additional funcitonality, but it class was removed without sufficient notice in the breaking changes section of the Flutter documentation. As such, consumers of this class were broken without sufficient time to migrate. ### Workaround: Is there a workaround for this issue? Flutter projects which need a custom `Application` can instead simply extend an `android.app.Application`. There is no reason to extend a `FlutterApplication`. ### Risk: What is the risk level of this cherry-pick? ### Test Coverage: Are you confident that your fix is well-tested by automated tests? ### Validation Steps: What are the steps to validate that this fix works? Either make a flutter app which depends on this class, or run the spell check integration tests: ``` # from the .../flutter/dev/devicelab directory ../../bin/cache/dart-sdk/bin/dart bin/test_runner.dart test -t spell_check_test ``` --- CHANGELOG.md | 2 ++ .../ci/licenses_golden/licenses_flutter | 2 ++ .../flutter/shell/platform/android/BUILD.gn | 1 + .../io/flutter/app/FlutterApplication.java | 18 ++++++++++++++++++ .../src/flutter/tools/javadoc/gen_javadoc.py | 1 + 5 files changed, 24 insertions(+) create mode 100644 engine/src/flutter/shell/platform/android/io/flutter/app/FlutterApplication.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 9631bac21bc..38f08049d67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ INTERNAL NOTE - [flutter/164628](https://github.com/flutter/flutter/issues/164628) - iOS Fixes crash when allocation of surface for toImage/toImageSync fails. - [flutter/164201](https://github.com/flutter/flutter/pull/164201) - Always use Android hardware buffers for platform views when supported. +- [flutter/162198](https://github.com/flutter/flutter/issues/162198) Fixes double-download of canvaskit.wasm +- [flutter/164024](https://github.com/flutter/flutter/issues/164024): - Add back an empty io.flutter.app.FlutterApplication for Android apps post v2 embedder migration. - [flutter/162198](https://github.com/flutter/flutter/issues/162198) - Fixes double-download of canvaskit.wasm - [flutter/164392](https://github.com/flutter/flutter/pull/164392) - All platforms, Fixes a crash that can occur when animating and interacting with a scrollable simultaneously. diff --git a/engine/src/flutter/ci/licenses_golden/licenses_flutter b/engine/src/flutter/ci/licenses_golden/licenses_flutter index b6f11b039bd..7c126a997e6 100644 --- a/engine/src/flutter/ci/licenses_golden/licenses_flutter +++ b/engine/src/flutter/ci/licenses_golden/licenses_flutter @@ -43607,6 +43607,7 @@ ORIGIN: ../../../flutter/shell/platform/android/io/flutter/Build.java + ../../.. ORIGIN: ../../../flutter/shell/platform/android/io/flutter/BuildConfig.java + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/android/io/flutter/FlutterInjector.java + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/android/io/flutter/Log.java + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/shell/platform/android/io/flutter/app/FlutterApplication.java + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/android/io/flutter/embedding/android/ExclusiveAppComponent.java + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java + ../../../flutter/LICENSE ORIGIN: ../../../flutter/shell/platform/android/io/flutter/embedding/android/FlutterActivityAndFragmentDelegate.java + ../../../flutter/LICENSE @@ -46557,6 +46558,7 @@ FILE: ../../../flutter/shell/platform/android/io/flutter/Build.java FILE: ../../../flutter/shell/platform/android/io/flutter/BuildConfig.java FILE: ../../../flutter/shell/platform/android/io/flutter/FlutterInjector.java FILE: ../../../flutter/shell/platform/android/io/flutter/Log.java +FILE: ../../../flutter/shell/platform/android/io/flutter/app/FlutterApplication.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/android/AndroidTouchProcessor.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/android/ExclusiveAppComponent.java FILE: ../../../flutter/shell/platform/android/io/flutter/embedding/android/FlutterActivity.java diff --git a/engine/src/flutter/shell/platform/android/BUILD.gn b/engine/src/flutter/shell/platform/android/BUILD.gn index 4b6ea453c09..043826f5a0b 100644 --- a/engine/src/flutter/shell/platform/android/BUILD.gn +++ b/engine/src/flutter/shell/platform/android/BUILD.gn @@ -207,6 +207,7 @@ android_java_sources = [ "io/flutter/Build.java", "io/flutter/FlutterInjector.java", "io/flutter/Log.java", + "io/flutter/app/FlutterApplication.java", "io/flutter/embedding/android/AndroidTouchProcessor.java", "io/flutter/embedding/android/ExclusiveAppComponent.java", "io/flutter/embedding/android/FlutterActivity.java", diff --git a/engine/src/flutter/shell/platform/android/io/flutter/app/FlutterApplication.java b/engine/src/flutter/shell/platform/android/io/flutter/app/FlutterApplication.java new file mode 100644 index 00000000000..ed56ec2e7bc --- /dev/null +++ b/engine/src/flutter/shell/platform/android/io/flutter/app/FlutterApplication.java @@ -0,0 +1,18 @@ +// 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 android.app.Application; + +/** + * Empty implementation of the {@link Application} class, provided to avoid breaking older Flutter + * projects. Flutter projects which need to extend an Application should migrate to extending {@link + * android.app.Application} instead. + * + *

For more information on the removal of Flutter's v1 Android embedding, see: + * https://docs.flutter.dev/release/breaking-changes/v1-android-embedding. + */ +@Deprecated +public class FlutterApplication extends Application {} diff --git a/engine/src/flutter/tools/javadoc/gen_javadoc.py b/engine/src/flutter/tools/javadoc/gen_javadoc.py index 270af576b25..88d58ef44d9 100755 --- a/engine/src/flutter/tools/javadoc/gen_javadoc.py +++ b/engine/src/flutter/tools/javadoc/gen_javadoc.py @@ -66,6 +66,7 @@ def main(): classpath.append(args.build_config_path) packages = [ + 'io.flutter.app', 'io.flutter.embedding.android', 'io.flutter.embedding.engine', 'io.flutter.embedding.engine.dart',