updateMinSdk method
Updates the minSdkVersion in the Android Gradle build file.
Implementation
OperationResult updateMinSdk(int version) {
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;
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.]+"),
];
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.',
);
}
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}');
}
}