예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }