build method
Release the app for the given platform release type. Returns the absolute output path.
Implementation
@override
Future<String> build() async {
if (keyStoreFileBase64 != null &&
keyStorePassword != null &&
keyAlias != null &&
keyPassword != null) {
// Check if key signing is prepared
final buildGradleFile = File('$_androidDirectory/app/build.gradle');
final buildGradleFileContents = await buildGradleFile.readAsString();
if (!(buildGradleFileContents.contains('key.properties') &&
buildGradleFileContents.contains('keyAlias') &&
buildGradleFileContents.contains('keyPassword') &&
buildGradleFileContents.contains('storeFile') &&
buildGradleFileContents.contains('storePassword'))) {
throw Exception(
'Signing is not configured for Android, please follow the instructions:\n'
'https://docs.flutter.dev/deployment/android#configure-signing-in-gradle',
);
}
// Save keystore file
final keyStoreFile = File('$_androidDirectory/$_keyStoreFile');
await keyStoreFile.writeAsBytes(base64.decode(keyStoreFileBase64!));
final signingKeys = '''
storePassword=$keyStorePassword
keyPassword=$keyPassword
keyAlias=$keyAlias
storeFile=${keyStoreFile.absolute.path}
''';
await File('$_androidDirectory/key.properties')
.writeAsString(signingKeys);
}
return switch (buildType) {
BuildType.aab => _buildAndroidAab(),
BuildType.apk => _buildAndroidApk(),
_ => throw UnsupportedError(
'BuildType $buildType is not available for Android!'),
};
}