build method

  1. @override
Future<String> build()
override

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!'),
  };
}