public AndroidVersions(IEnumerable <string> frameworkDirectories) { if (frameworkDirectories == null) { throw new ArgumentNullException(nameof(frameworkDirectories)); } var dirs = new List <string> (); foreach (var d in frameworkDirectories) { if (!Directory.Exists(d)) { throw new ArgumentException($"`{d}` must be a directory!", nameof(frameworkDirectories)); } var dp = d.TrimEnd(Path.DirectorySeparatorChar); var dn = Path.GetFileName(dp); // In "normal" use, `dp` will contain e.g. `...\MonoAndroid\v1.0`. // We want the `MonoAndroid` dir, not the versioned dir. var p = dn.StartsWith("v", StringComparison.Ordinal) ? Path.GetDirectoryName(dp) : dp; dirs.Add(Path.GetFullPath(p)); } dirs = dirs.Distinct(StringComparer.OrdinalIgnoreCase) .ToList(); FrameworkDirectories = new ReadOnlyCollection <string> (dirs); var versions = dirs.SelectMany(d => Directory.EnumerateFiles(d, "AndroidApiInfo.xml", SearchOption.AllDirectories)) .Select(file => AndroidVersion.Load(file)); LoadVersions(versions); }
static bool MatchesId(AndroidVersion version, string id) { return(version.Id == id || (version.AlternateIds?.Contains(id) ?? false) || (version.ApiLevel.ToString() == id)); }
static bool MatchesFrameworkVersion(AndroidVersion version, string frameworkVersion) { return(version.FrameworkVersion == frameworkVersion || version.OSVersion == frameworkVersion); }