analyze method
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]+)'),
);
}