// Copyright 2014 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. import 'dart:async'; import '../base/file_system.dart'; import '../base/logger.dart'; import '../convert.dart'; import '../project.dart'; /// The type of analysis to perform. enum AndroidAnalyzeOption { /// Prints out available build variants of the Android sub-project. /// /// An example output: /// ["debug", "profile", "release"] listBuildVariant, /// Outputs app link settings of the Android sub-project into a file. /// /// The file path will be printed after the command is run successfully. outputAppLinkSettings, } /// Analyze the Android sub-project of a Flutter project. /// /// The [userPath] must be point to a flutter project. class AndroidAnalyze { AndroidAnalyze({ required this.fileSystem, required this.option, required this.userPath, this.buildVariant, required this.logger, }) : assert(option == AndroidAnalyzeOption.listBuildVariant || buildVariant != null); final FileSystem fileSystem; final AndroidAnalyzeOption option; final String? buildVariant; final String userPath; final Logger logger; Future<void> analyze() async { final FlutterProject project = FlutterProject.fromDirectory(fileSystem.directory(userPath)); switch (option) { case AndroidAnalyzeOption.listBuildVariant: logger.printStatus(jsonEncode(await project.android.getBuildVariants())); case AndroidAnalyzeOption.outputAppLinkSettings: assert(buildVariant != null); await project.android.outputsAppLinkSettings(variant: buildVariant!); final String filePath = fileSystem.path.join(project.directory.path, 'build', 'app', 'app-link-settings-$buildVariant.json`'); logger.printStatus('result saved in $filePath'); } } }