updateMinSdk method
Updates the minSdkVersion in the Android Gradle build file.
This method automatically detects whether the project uses:
- Groovy DSL (
build.gradle) - Kotlin DSL (
build.gradle.kts)
Supported Formats
Groovy DSL:
minSdkVersion 21
minSdkVersion flutter.minSdkVersion
minSdkVersion = 21
Kotlin DSL:
minSdk = 21
minSdk = flutter.minSdkVersion
minSdkVersion(21)
Parameters
version: The Android API level to set (e.g., 21, 23, 26). Must be between 1 and 99.
Returns
- Success if the version was updated or was already set
- Failure if the file was not found or could not be modified
Example
final manager = AndroidManager('/path/to/project');
final result = manager.updateMinSdk(23);
switch (result) {
case Success(:final message):
print(message); // "Successfully updated minSdkVersion to 23"
case Failure(:final error):
print('Error: $error');
}
Implementation
OperationResult updateMinSdk(int version) {
// Locate the Gradle build file (Groovy DSL first, then Kotlin DSL)
final gradleFile = File(_buildGradlePath);
final gradleKtsFile = File(_buildGradleKtsPath);
File targetFile;
bool isKotlinDsl = false;
if (gradleFile.existsSync()) {
targetFile = gradleFile;
} else if (gradleKtsFile.existsSync()) {
targetFile = gradleKtsFile;
isKotlinDsl = true;
} else {
return const Failure(
'Could not find build.gradle or build.gradle.kts. '
'Are you in a Flutter project root directory?',
);
}
try {
String content = targetFile.readAsStringSync();
final originalContent = content;
// Define regex patterns for different minSdkVersion formats
final patterns = isKotlinDsl
? [
RegExp(r'minSdk\s*=\s*\d+'),
RegExp(r'minSdk\s*=\s*[\w.]+'),
RegExp(r'minSdkVersion\s*\(\s*\d+\s*\)'),
RegExp(r'minSdkVersion\s*\(\s*[\w.]+\s*\)'),
]
: [
RegExp(r'minSdkVersion\s+\d+'),
RegExp(r'minSdkVersion\s+[\w.]+'),
RegExp(r"minSdkVersion\s*=\s*\d+"),
RegExp(r"minSdkVersion\s*=\s*[\w.]+"),
];
// Try to find and replace using each pattern
bool replaced = false;
for (final pattern in patterns) {
if (pattern.hasMatch(content)) {
final replacement = isKotlinDsl
? 'minSdk = $version'
: 'minSdkVersion $version';
content = content.replaceFirst(pattern, replacement);
replaced = true;
break;
}
}
if (!replaced) {
return const Failure(
'Could not find minSdkVersion in build.gradle. '
'Please ensure the file has a valid Android configuration.',
);
}
// Check if content actually changed (avoid unnecessary writes)
if (content == originalContent) {
return Success('minSdkVersion is already set to $version.');
}
targetFile.writeAsStringSync(content);
return Success(
'Successfully updated minSdkVersion to $version in '
'${isKotlinDsl ? "build.gradle.kts" : "build.gradle"}.',
);
} on FileSystemException catch (e) {
return Failure('Failed to update build.gradle: ${e.message}');
}
}