package method
Future<List<MakeResult> >
package(
- String platform,
- List<
String> targets, { - String? channel,
- String? artifactName,
- required bool cleanBeforeBuild,
- required Map<
String, dynamic> buildArguments, - Map<
String, String> ? variables,
inherited
Package an application for a specific platform and target
Implementation
Future<List<MakeResult>> package(
String platform,
List<String> targets, {
String? channel,
String? artifactName,
required bool cleanBeforeBuild,
required Map<String, dynamic> buildArguments,
Map<String, String>? variables,
}) async {
List<MakeResult> makeResultList = [];
try {
Directory outputDirectory = distributeOptions.outputDirectory;
if (!outputDirectory.existsSync()) {
outputDirectory.createSync(recursive: true);
}
if (cleanBeforeBuild) {
await _builder.clean();
}
bool isBuildOnlyOnce = platform != 'android';
BuildResult? buildResult;
for (String target in targets) {
logger.info('Packaging ${pubspec.name} ${pubspec.version} as $target:');
if (!isBuildOnlyOnce || (isBuildOnlyOnce && buildResult == null)) {
try {
buildResult = await _builder.build(
platform,
target: target,
arguments: buildArguments,
environment: variables ?? globalVariables,
);
print(
const JsonEncoder.withIndent(' ').convert(buildResult.toJson()),
);
logger.info(
'Successfully built ${buildResult.outputDirectory} in ${buildResult.duration!.inSeconds}s'
.brightGreen(),
);
} on UnsupportedError catch (error) {
logger.warning('Warning: ${error.message}'.yellow());
continue;
} catch (error) {
rethrow;
}
}
if (buildResult != null) {
String buildMode =
buildArguments.containsKey('profile') ? 'profile' : 'release';
Map<String, dynamic>? arguments = {
'build_mode': buildMode,
'flavor': buildArguments['flavor'],
'channel': channel,
'artifact_name': artifactName,
};
MakeResult makeResult = await _packager.package(
platform,
target,
arguments,
outputDirectory,
buildOutputDirectory: buildResult.outputDirectory,
buildOutputFiles: buildResult.outputFiles,
);
print(
const JsonEncoder.withIndent(' ').convert(makeResult.toJson()),
);
FileSystemEntity artifact = makeResult.artifacts.first;
logger.info(
'Successfully packaged ${artifact.path}'.brightGreen(),
);
makeResultList.add(makeResult);
}
}
} catch (error) {
logger.severe(error.toString().red());
if (error is Error) {
logger.severe(error.stackTrace.toString().red());
}
rethrow;
}
return makeResultList;
}