getFeatures method

List<Map<String, dynamic>> getFeatures()

Gets the list of features currently in AndroidManifest.xml.

Implementation

List<Map<String, dynamic>> getFeatures() {
  final manifestFile = File(_manifestPath);

  if (!manifestFile.existsSync()) {
    return [];
  }

  try {
    final content = manifestFile.readAsStringSync();
    final document = XmlDocument.parse(content);

    final manifest = document.rootElement;
    const androidNs = 'http://schemas.android.com/apk/res/android';

    final features = <Map<String, dynamic>>[];
    for (final feature in manifest.findAllElements('uses-feature')) {
      final nameAttr = feature.getAttribute('name', namespace: androidNs) ??
          feature.getAttribute('android:name');
      final requiredAttr =
          feature.getAttribute('required', namespace: androidNs) ??
              feature.getAttribute('android:required');

      if (nameAttr != null) {
        features.add({
          'name': nameAttr,
          'required': requiredAttr?.toLowerCase() == 'true',
        });
      }
    }

    return features;
  } catch (_) {
    return [];
  }
}