diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index e6b167d2e7c..7c4460238fd 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -417,6 +417,9 @@ class AndroidProject extends FlutterProjectPlatform { /// True if the parent Flutter project is a module. bool get isModule => parent.isModule; + /// True if the parent Flutter project is a plugin. + bool get isPlugin => parent.isPlugin; + /// True if the Flutter project is using the AndroidX support library. bool get usesAndroidX => parent.usesAndroidX; @@ -595,6 +598,13 @@ The detected reason was: // only supports the V2 embedding. return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v2, 'Is add-to-app module'); } + if (isPlugin) { + // Plugins do not use an appManifest, so we stop here. + // + // TODO(garyq): This method does not currently check for code references to + // the v1 embedding, we should check for this once removal is further along. + return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v2, 'Is plugin'); + } if (appManifestFile == null || !appManifestFile.existsSync()) { return AndroidEmbeddingVersionResult(AndroidEmbeddingVersion.v1, 'No `${appManifestFile.absolute.path}` file'); } diff --git a/packages/flutter_tools/test/general.shard/project_test.dart b/packages/flutter_tools/test/general.shard/project_test.dart index 3994bbaa5fc..ee609b9477f 100644 --- a/packages/flutter_tools/test/general.shard/project_test.dart +++ b/packages/flutter_tools/test/general.shard/project_test.dart @@ -207,6 +207,13 @@ void main() { project.checkForDeprecation(deprecationBehavior: DeprecationBehavior.ignore); expect(testLogger.statusText, contains('https://flutter.dev/go/android-project-migration')); }); + _testInMemory('Android plugin project does not throw v1 embedding deprecation warning', () async { + final FlutterProject project = await aPluginProject(); + + project.checkForDeprecation(deprecationBehavior: DeprecationBehavior.exit); + expect(testLogger.statusText, isNot(contains('https://flutter.dev/go/android-project-migration'))); + expect(testLogger.statusText, isNot(contains('No `` in '))); + }); _testInMemory('Android plugin without example app does not show a warning', () async { final FlutterProject project = await aPluginProject(); project.example.directory.deleteSync();