adjustBuildGradleInAndroidFile function

void adjustBuildGradleInAndroidFile()

Implementation

void adjustBuildGradleInAndroidFile() {
  const gradlePath = 'android/build.gradle';
  const gradleKtsPath = 'android/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;

  final buildscriptBlock = isKts
      ? '''buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:8.6.0")
    }
    repositories {
        google()
        mavenCentral()
    }
}'''
      : '''buildscript {
    dependencies {
        classpath 'com.android.tools.build:gradle:8.6.0'
    }
    repositories {
        google()
        mavenCentral()
    }
}''';

  List<String> lines;

  try {
    lines = fileToEdit.readAsLinesSync();
  } catch (e) {
    print('Error reading file: $e');
    return;
  }

  final containsVersion = lines.any((line) =>
      line.contains(isKts
          ? 'classpath("com.android.tools.build:gradle:8.6.0")'
          : 'classpath \'com.android.tools.build:gradle:8.6.0\''));

  if (containsVersion) {
    print('The buildscript block or version already exists in the file.');
    return;
  }

  final buildscriptLines = buildscriptBlock.split('\n');
  lines.insertAll(0, buildscriptLines);

  try {
    fileToEdit.writeAsStringSync(lines.join('\n'));
    print('buildscript block added successfully.');
  } catch (e) {
    print('Error writing to file: $e');
  }
}