bool ValidateApiLevels() { // Priority: // $(UseLatestAndroidPlatformSdk) > $(AndroidApiLevel) > $(TargetFrameworkVersion) // // If $(TargetFrameworkVersion) isn't set, and $(AndroidApiLevel) isn't // set, act as if $(UseLatestAndroidPlatformSdk) is True // // If $(UseLatestAndroidPlatformSdk) is true, we do as it says: use the // latest installed version. // // Otherwise, if $(AndroidApiLevel) is set, use it and set $(TargetFrameworkVersion). // Rationale: monodroid/samples/xbuild.make uses $(AndroidApiLevel) // to build for a specific API level. // Otherwise, if $(TargetFrameworkVersion) is set, use it and set $(AndroidApiLevel). UseLatestAndroidPlatformSdk = UseLatestAndroidPlatformSdk || (string.IsNullOrWhiteSpace(AndroidApiLevel) && string.IsNullOrWhiteSpace(TargetFrameworkVersion)); if (UseLatestAndroidPlatformSdk) { AndroidApiLevel = GetMaxInstalledApiLevel().ToString(); SupportedApiLevel = GetMaxSupportedApiLevel(AndroidApiLevel); int maxInstalled, maxSupported = 0; if (int.TryParse(AndroidApiLevel, out maxInstalled) && int.TryParse(SupportedApiLevel, out maxSupported) && maxInstalled > maxSupported) { Log.LogDebugMessage($"API Level {AndroidApiLevel} is greater than the maximum supported API level of {SupportedApiLevel}. " + "Support for this API will be added in a future release."); AndroidApiLevel = SupportedApiLevel; } TargetFrameworkVersion = GetTargetFrameworkVersionFromApiLevel(); return(TargetFrameworkVersion != null); } if (!string.IsNullOrWhiteSpace(AndroidApiLevel)) { AndroidApiLevel = AndroidApiLevel.Trim(); SupportedApiLevel = GetMaxSupportedApiLevel(AndroidApiLevel); TargetFrameworkVersion = GetTargetFrameworkVersionFromApiLevel(); return(TargetFrameworkVersion != null); } if (!string.IsNullOrWhiteSpace(TargetFrameworkVersion)) { TargetFrameworkVersion = TargetFrameworkVersion.Trim(); string apiLevel = MonoDroidSdk.GetApiLevelForFrameworkVersion(TargetFrameworkVersion); if (apiLevel == null) { Log.LogCodedError("XA0000", "Could not determine API level for $(TargetFrameworkVersion) of '{0}'.", TargetFrameworkVersion); return(false); } AndroidApiLevel = apiLevel; SupportedApiLevel = apiLevel; return(true); } Log.LogCodedError("XA0000", "Could not determine $(AndroidApiLevel) or $(TargetFrameworkVersion); SHOULD NOT BE REACHED."); return(false); }
bool ValidateApiLevels() { // Priority: // $(UseLatestAndroidPlatformSdk) > $(AndroidApiLevel) > $(TargetFrameworkVersion) // // If $(TargetFrameworkVersion) isn't set, and $(AndroidApiLevel) isn't // set, act as if $(UseLatestAndroidPlatformSdk) is True // // If $(UseLatestAndroidPlatformSdk) is true, we do as it says: use the // latest installed version. // // Otherwise, if $(AndroidApiLevel) is set, use it and set $(TargetFrameworkVersion). // Rationale: monodroid/samples/xbuild.make uses $(AndroidApiLevel) // to build for a specific API level. // Otherwise, if $(TargetFrameworkVersion) is set, use it and set $(AndroidApiLevel). UseLatestAndroidPlatformSdk = UseLatestAndroidPlatformSdk || (string.IsNullOrWhiteSpace(AndroidApiLevel) && string.IsNullOrWhiteSpace(TargetFrameworkVersion)); if (UseLatestAndroidPlatformSdk) { AndroidApiLevel = GetMaxInstalledApiLevel().ToString(); SupportedApiLevel = GetMaxSupportedApiLevel(AndroidApiLevel); TargetFrameworkVersion = GetTargetFrameworkVersionFromApiLevel(); return(TargetFrameworkVersion != null); } if (!string.IsNullOrWhiteSpace(AndroidApiLevel)) { AndroidApiLevel = AndroidApiLevel.Trim(); SupportedApiLevel = GetMaxSupportedApiLevel(AndroidApiLevel); TargetFrameworkVersion = GetTargetFrameworkVersionFromApiLevel(); return(TargetFrameworkVersion != null); } if (!string.IsNullOrWhiteSpace(TargetFrameworkVersion)) { TargetFrameworkVersion = TargetFrameworkVersion.Trim(); string apiLevel = MonoDroidSdk.GetApiLevelForFrameworkVersion(TargetFrameworkVersion); if (apiLevel == null) { Log.LogCodedError("XA0000", "Could not determine API level for $(TargetFrameworkVersion) of '{0}'.", TargetFrameworkVersion); return(false); } AndroidApiLevel = apiLevel; SupportedApiLevel = apiLevel; return(true); } Log.LogCodedError("XA0000", "Could not determine $(AndroidApiLevel) or $(TargetFrameworkVersion); SHOULD NOT BE REACHED."); return(false); }
bool ValidateApiLevels() { // Priority: // $(UseLatestAndroidPlatformSdk) > $(AndroidApiLevel) > $(TargetFrameworkVersion) // // If $(TargetFrameworkVersion) isn't set, and $(AndroidApiLevel) isn't // set, act as if $(UseLatestAndroidPlatformSdk) is True // // If $(UseLatestAndroidPlatformSdk) is true, we do as it says: use the // latest installed version. // // Otherwise, if $(AndroidApiLevel) is set, use it and set $(TargetFrameworkVersion). // Rationale: monodroid/samples/xbuild.make uses $(AndroidApiLevel) // to build for a specific API level. // Otherwise, if $(TargetFrameworkVersion) is set, use it and set $(AndroidApiLevel). UseLatestAndroidPlatformSdk = UseLatestAndroidPlatformSdk || (string.IsNullOrWhiteSpace(AndroidApiLevel) && string.IsNullOrWhiteSpace(TargetFrameworkVersion)); if (UseLatestAndroidPlatformSdk) { int maxInstalled = GetMaxInstalledApiLevel(); int maxSupported = GetMaxStableApiLevel(); AndroidApiLevel = maxInstalled.ToString(); if (maxInstalled > maxSupported) { Log.LogDebugMessage($"API Level {maxInstalled} is greater than the maximum supported API level of {maxSupported}. " + "Support for this API will be added in a future release."); } if (!string.IsNullOrWhiteSpace(TargetFrameworkVersion)) { var userSelected = MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion(TargetFrameworkVersion); // overwrite using user version only if it is // above the maxStableApi and a valid apiLevel. if (userSelected != null && userSelected > maxSupported && userSelected <= maxInstalled) { maxInstalled = maxSupported = userSelected.Value; AndroidApiLevel = userSelected.ToString(); } } for (int apiLevel = maxSupported; apiLevel >= MonoAndroidHelper.SupportedVersions.MinStableVersion.ApiLevel; apiLevel--) { var id = MonoAndroidHelper.SupportedVersions.GetIdFromApiLevel(apiLevel); var apiPlatformDir = MonoAndroidHelper.AndroidSdk.TryGetPlatformDirectoryFromApiLevel(id, MonoAndroidHelper.SupportedVersions); if (apiPlatformDir != null && Directory.Exists(apiPlatformDir)) { var targetFramework = MonoAndroidHelper.SupportedVersions.GetFrameworkVersionFromId(id); if (targetFramework != null && MonoAndroidHelper.SupportedVersions.InstalledBindingVersions.Any(b => b.FrameworkVersion == targetFramework)) { AndroidApiLevel = apiLevel.ToString(); TargetFrameworkVersion = targetFramework; break; } } } return(TargetFrameworkVersion != null); } if (!string.IsNullOrWhiteSpace(TargetFrameworkVersion)) { TargetFrameworkVersion = TargetFrameworkVersion.Trim(); string id = MonoAndroidHelper.SupportedVersions.GetIdFromFrameworkVersion(TargetFrameworkVersion); if (id == null) { Log.LogCodedError("XA0000", Properties.Resources.XA0000_API_for_TargetFrameworkVersion, TargetFrameworkVersion); return(false); } AndroidApiLevel = MonoAndroidHelper.SupportedVersions.GetApiLevelFromId(id).ToString(); return(true); } if (!string.IsNullOrWhiteSpace(AndroidApiLevel)) { AndroidApiLevel = AndroidApiLevel.Trim(); TargetFrameworkVersion = GetTargetFrameworkVersionFromApiLevel(); return(TargetFrameworkVersion != null); } Log.LogCodedError("XA0000", Properties.Resources.XA0000_API_or_TargetFrameworkVersion_Fail); return(false); }