analyze method

AndroidToolchainInfo analyze(
  1. String projectPath
)

Implementation

AndroidToolchainInfo analyze(String projectPath) {
  final android = Directory(projectPath + Platform.pathSeparator + 'android');
  if (!android.existsSync()) return const AndroidToolchainInfo();
  String all = '';
  for (final name in [
    'build.gradle',
    'build.gradle.kts',
    'settings.gradle',
    'settings.gradle.kts',
    'app/build.gradle',
    'app/build.gradle.kts'
  ]) {
    final f = File(android.path + Platform.pathSeparator + name);
    if (f.existsSync()) all += '\n' + f.readAsStringSync();
  }
  final wrapper = File(android.path +
      Platform.pathSeparator +
      'gradle' +
      Platform.pathSeparator +
      'wrapper' +
      Platform.pathSeparator +
      'gradle-wrapper.properties');
  final wrapperText = wrapper.existsSync() ? wrapper.readAsStringSync() : '';
  String? find(String pattern) =>
      RegExp(pattern, caseSensitive: false, multiLine: true)
          .firstMatch(all)
          ?.group(1);
  int? number(String pattern) => int.tryParse(find(pattern) ?? '');
  return AndroidToolchainInfo(
    gradleVersion: RegExp(r'gradle-([0-9.]+)-(?:bin|all)')
        .firstMatch(wrapperText)
        ?.group(1),
    agpVersion: find(r'com\.android\.tools\.build:gradle:([0-9.]+)') ??
        find(
            r'id\s*[\(\s]*["\x27]com\.android\.(?:application|library)["\x27][\)\s]*version\s*["\x27]([0-9.]+)'),
    kotlinVersion: find(r'kotlin_version\s*=\s*["\x27]([0-9.]+)') ??
        find(
            r'org\.jetbrains\.kotlin(?:\.android)?["\x27][\)\s]*version\s*["\x27]([0-9.]+)'),
    compileSdk: number(r'compileSdk(?:Version)?\s*(?:=\s*)?([0-9]+)'),
    targetSdk: number(r'targetSdk(?:Version)?\s*(?:=\s*)?([0-9]+)'),
    minSdk: number(r'minSdk(?:Version)?\s*(?:=\s*)?([0-9]+)'),
  );
}