updateBuildGradleInApp function
void
updateBuildGradleInApp()
Implementation
void updateBuildGradleInApp() {
const gradlePath = 'android/app/build.gradle';
const gradleKtsPath = 'android/app/build.gradle.kts';
final gradleFile = File(gradlePath);
final gradleKtsFile = File(gradleKtsPath);
if (!gradleFile.existsSync() && !gradleKtsFile.existsSync()) {
print('Error: Neither build.gradle nor build.gradle.kts exists.');
return;
}
final isKts = gradleKtsFile.existsSync();
final fileToEdit = isKts ? gradleKtsFile : gradleFile;
List<String> gradleLines;
try {
gradleLines = fileToEdit.readAsLinesSync();
} catch (e) {
print('Error reading file: $e');
return;
}
final newDeps = isKts
? [
'coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")',
'implementation("androidx.window:window:1.0.0")',
'implementation("androidx.window:window-java:1.0.0")',
]
: [
"coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'",
"implementation 'androidx.window:window:1.0.0'",
"implementation 'androidx.window:window-java:1.0.0'",
];
final dependenciesStart =
gradleLines.indexWhere((line) => line.trim() == 'dependencies {');
if (dependenciesStart == -1) {
gradleLines.add('');
gradleLines.add('dependencies {');
gradleLines.addAll(newDeps.map((dep) => ' $dep'));
gradleLines.add('}');
print('Added new dependencies block with required dependencies.');
} else {
final alreadyAdded = newDeps.every(
(dep) => gradleLines.any((line) => line.trim() == dep.trim()));
if (!alreadyAdded) {
gradleLines.insertAll(dependenciesStart + 1,
newDeps.map((dep) => ' $dep'));
print('Added dependencies inside existing dependencies block.');
} else {
print('Dependencies already exist in the file.');
}
}
final defaultConfigStart =
gradleLines.indexWhere((line) => line.trim() == 'defaultConfig {');
if (defaultConfigStart != -1) {
final defaultConfigEnd = _findBlockEnd(gradleLines, defaultConfigStart);
final multiDexExists = gradleLines
.sublist(defaultConfigStart, defaultConfigEnd)
.any((line) => line.contains('multiDexEnabled'));
if (!multiDexExists) {
gradleLines.insert(defaultConfigStart + 1, isKts ? ' multiDexEnabled = true' :' multiDexEnabled true');
print('multiDexEnabled added successfully.');
} else {
print('multiDexEnabled already set.');
}
} else {
print('No defaultConfig block found!');
}
final compileOptionsStart =
gradleLines.indexWhere((line) => line.trim() == 'compileOptions {');
if (compileOptionsStart != -1) {
final compileOptionsEnd = _findBlockEnd(gradleLines, compileOptionsStart);
final desugaringEnabledExists = gradleLines
.sublist(compileOptionsStart, compileOptionsEnd)
.any((line) => line.contains('coreLibraryDesugaringEnabled'));
if (!desugaringEnabledExists) {
gradleLines.insert(
compileOptionsStart + 1, isKts ? ' isCoreLibraryDesugaringEnabled = true' :' coreLibraryDesugaringEnabled true');
print('coreLibraryDesugaringEnabled added successfully.');
} else {
print('coreLibraryDesugaringEnabled already set.');
}
} else {
print('No compileOptions block found!');
}
try {
fileToEdit.writeAsStringSync(gradleLines.join('\n'));
print('build.gradle updated successfully.');
} catch (e) {
print('Failed to write build.gradle: $e');
}
}