From e1ae4dfcae7dfbfbd87a6498976ae9269567ac4e Mon Sep 17 00:00:00 2001 From: xster Date: Wed, 19 Aug 2020 22:32:08 -0700 Subject: [PATCH] Move v1 embedding migration warning from plugin consumers to all apps (#64181) --- packages/flutter_tools/lib/src/plugins.dart | 6 ----- packages/flutter_tools/lib/src/project.dart | 17 +++++++++++++ .../commands.shard/permeable/create_test.dart | 25 +++++++++++++++++++ .../test/general.shard/plugins_test.dart | 3 +-- .../test/general.shard/project_test.dart | 14 +++++++++++ 5 files changed, 57 insertions(+), 8 deletions(-) diff --git a/packages/flutter_tools/lib/src/plugins.dart b/packages/flutter_tools/lib/src/plugins.dart index d3701c86e65..1bcbfecc678 100644 --- a/packages/flutter_tools/lib/src/plugins.dart +++ b/packages/flutter_tools/lib/src/plugins.dart @@ -661,12 +661,6 @@ Future _writeAndroidPluginRegistrant(FlutterProject project, List break; case AndroidEmbeddingVersion.v1: default: - globals.printStatus( - 'Your Flutter application is created using an older version of the ' - "Android embedding. It's being deprecated in favor of Android embedding " - 'v2. Follow the steps on https://flutter.dev/go/android-project-migration ' - 'to migrate your project.' - ); for (final Map plugin in androidPlugins) { if (!(plugin['supportsEmbeddingV1'] as bool) && plugin['supportsEmbeddingV2'] as bool) { throwToolExit( diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index 8408df21297..fad3e5cff89 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -756,6 +756,23 @@ class AndroidProject extends FlutterProjectPlatform { } Future ensureReadyForPlatformSpecificTooling() async { + if (getEmbeddingVersion() == AndroidEmbeddingVersion.v1) { + globals.printStatus( +""" +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +Warning +────────────────────────────────────────────────────────────────────────────── +Your Flutter application is created using an older version of the Android +embedding. It's being deprecated in favor of Android embedding v2. Follow the +steps at + +https://flutter.dev/go/android-project-migration + +to migrate your project. +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +""" + ); + } if (isModule && _shouldRegenerateFromTemplate()) { await _regenerateLibrary(); // Add ephemeral host app, if an editable host app does not already exist. diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart index bd7f4c13b8c..b591015eb96 100755 --- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart @@ -654,6 +654,31 @@ void main() { expect(actualContents.contains('useAndroidX'), true); }); + testUsingContext('creating a new project should create v2 embedding and never show an Android v1 deprecation warning', () async { + Cache.flutterRoot = '../..'; + when(mockFlutterVersion.frameworkRevision).thenReturn(frameworkRevision); + when(mockFlutterVersion.channel).thenReturn(frameworkChannel); + + final CreateCommand command = CreateCommand(); + final CommandRunner runner = createTestCommandRunner(command); + + await runner.run(['create', '--no-pub', '--platforms', 'android', projectDir.path]); + + final String androidManifest = await globals.fs.file( + projectDir.path + '/android/app/src/main/AndroidManifest.xml' + ).readAsString(); + expect(androidManifest.contains('android:name="flutterEmbedding"'), true); + expect(androidManifest.contains('android:value="2"'), true); + + final String mainActivity = await globals.fs.file( + projectDir.path + '/android/app/src/main/kotlin/com/example/flutter_project/MainActivity.kt' + ).readAsString(); + // Import for the new embedding class. + expect(mainActivity.contains('import io.flutter.embedding.android.FlutterActivity'), true); + + expect(testLogger.statusText, isNot(contains('https://flutter.dev/go/android-project-migration'))); + }); + testUsingContext('app supports Linux if requested', () async { Cache.flutterRoot = '../..'; when(mockFlutterVersion.frameworkRevision).thenReturn(frameworkRevision); diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index 2a72fab23b3..e8f470d832c 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -638,7 +638,7 @@ dependencies: XcodeProjectInterpreter: () => xcodeProjectInterpreter, }); - testUsingContext('old embedding app uses a plugin that supports v1 and v2 embedding works but shows a deprecation warning', () async { + testUsingContext('old embedding app uses a plugin that supports v1 and v2 embedding works', () async { when(flutterProject.isModule).thenReturn(false); when(androidProject.getEmbeddingVersion()).thenReturn(AndroidEmbeddingVersion.v1); @@ -655,7 +655,6 @@ dependencies: expect(registrant.readAsStringSync(), contains('class GeneratedPluginRegistrant')); expect(registrant.readAsStringSync(), contains('UseBothEmbedding.registerWith(registry.registrarFor("plugin4.UseBothEmbedding"));')); - expect(testLogger.statusText, contains('Follow the steps on https://flutter.dev/go/android-project-migration')); }, overrides: { FileSystem: () => fs, ProcessManager: () => FakeProcessManager.any(), diff --git a/packages/flutter_tools/test/general.shard/project_test.dart b/packages/flutter_tools/test/general.shard/project_test.dart index 04fe859d6bd..81615ade967 100644 --- a/packages/flutter_tools/test/general.shard/project_test.dart +++ b/packages/flutter_tools/test/general.shard/project_test.dart @@ -148,6 +148,20 @@ void main() { await project.ensureReadyForPlatformSpecificTooling(); expectExists(project.android.hostAppGradleRoot.childFile('local.properties')); }); + _testInMemory('Android project not on v2 embedding shows a warning', () async { + final FlutterProject project = await someProject(); + // The default someProject with an empty already indicates + // v1 embedding, as opposed to having . + + await project.ensureReadyForPlatformSpecificTooling(); + expect(testLogger.statusText, contains('https://flutter.dev/go/android-project-migration')); + }); + _testInMemory('updates local properties for Android', () async { + final FlutterProject project = await someProject(); + await project.ensureReadyForPlatformSpecificTooling(); + expectExists(project.android.hostAppGradleRoot.childFile('local.properties')); + }); testUsingContext('injects plugins for macOS', () async { final FlutterProject project = await someProject(); project.macos.managedDirectory.createSync(recursive: true);