resolvePackageName static method
Resolves the application ID used by Google Play.
Implementation
static Future<String> resolvePackageName(
String appRoot,
AndroidConfig config, {
String? flavor,
}) async {
final configuredPackageName = config.packageName;
if (configuredPackageName != null) return configuredPackageName;
SmfError.check(
flavor == null,
'platforms.android.package_name is required when flavor is configured.',
SmfErrorCode.packageNameRequired,
);
final androidApp = p.join(appRoot, 'android', 'app');
final possiblePaths = <String>[
p.join(androidApp, 'build.gradle.kts'),
p.join(androidApp, 'build.gradle'),
];
for (final path in possiblePaths) {
if (!(await File(path).exists())) continue;
final source = await File(path).readAsString();
final match = RegExp(
r'''applicationId\s*(?:=|\s)\s*["']([^"'$]+)["']''',
).firstMatch(source);
final packageName = match?.group(1)?.trim();
if (packageName != null && packageName.isNotEmpty) return packageName;
}
throw const SmfError(
'Could not detect the Android application ID. Set '
'platforms.android.package_name in smf/config.yaml.',
SmfErrorCode.packageNameRequired,
);
}