From dde23281851f0ed0a556c0bdaad9acd37964389e Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:57:07 -0700 Subject: [PATCH] Android analyze command should run pub (#153953) The android command will build the android project partially and thus will need to run pub --- .../lib/src/commands/analyze.dart | 5 +- .../hermetic/android_analyze_test.dart | 48 ++++++++++++++++++- 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/analyze.dart b/packages/flutter_tools/lib/src/commands/analyze.dart index 68b66a425c..c0030c3932 100644 --- a/packages/flutter_tools/lib/src/commands/analyze.dart +++ b/packages/flutter_tools/lib/src/commands/analyze.dart @@ -210,9 +210,10 @@ class AnalyzeCommand extends FlutterCommand { return false; } - // Don't run pub if asking for android analysis. + // Android analyze needs to process resource, i.e. evaluating build + // settings and assets, and thus needs to run pub. if (boolArg('android')) { - return false; + return true; } return super.shouldRunPub; diff --git a/packages/flutter_tools/test/commands.shard/hermetic/android_analyze_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/android_analyze_test.dart index 07e5a34e97..430e08aeb6 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/android_analyze_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/android_analyze_test.dart @@ -23,6 +23,26 @@ import '../../src/test_flutter_command_runner.dart'; void main() { + testUsingContext('Android analyze command should run pub', () async { + final FileSystem fileSystem = MemoryFileSystem.test(); + final Platform platform = FakePlatform(); + final BufferLogger logger = BufferLogger.test(); + final FakeProcessManager processManager = FakeProcessManager.empty(); + final Terminal terminal = Terminal.test(); + final AnalyzeCommand command = FakeAndroidAnalyzeCommand( + artifacts: Artifacts.test(), + fileSystem: fileSystem, + logger: logger, + platform: platform, + processManager: processManager, + terminal: terminal, + allProjectValidators: [], + suppressAnalytics: true, + ); + fileSystem.currentDirectory.childFile('pubspec.yaml').createSync(); + expect(command.shouldRunPub, isTrue); + }); + group('Android analyze command', () { late FileSystem fileSystem; late Platform platform; @@ -65,7 +85,6 @@ void main() { fileSystem.directory(homePath).childDirectory(dir).createSync(recursive: true); } builder = FakeAndroidBuilder(); - }); testUsingContext('can list build variants', () async { @@ -130,3 +149,30 @@ class FakeAndroidBuilder extends Fake implements AndroidBuilder { return outputPath; } } + +class FakeAndroidAnalyzeCommand extends AnalyzeCommand { + FakeAndroidAnalyzeCommand({ + required super.fileSystem, + required super.platform, + required super.terminal, + required super.logger, + required super.processManager, + required super.artifacts, + required super.allProjectValidators, + required super.suppressAnalytics, + }); + + @override + bool boolArg(String arg, {bool global = false}) { + switch (arg) { + case 'current-package': + return true; + case 'android': + return true; + case 'pub': + return true; + default: + return false; + } + } +}