diff --git a/Configuration.props b/Configuration.props index b0bf7c45f52..f8c712939b9 100644 --- a/Configuration.props +++ b/Configuration.props @@ -15,7 +15,7 @@ 9.1.199 - v2.3 + v4.4 <_IsRunningNuGetRestore Condition="$(RestoreTaskAssemblyFile.EndsWith('NuGet.exe', StringComparison.InvariantCultureIgnoreCase))">True 28 diff --git a/Documentation/building/configuration.md b/Documentation/building/configuration.md index 10754673c61..9fd48c1c910 100644 --- a/Documentation/building/configuration.md +++ b/Documentation/building/configuration.md @@ -29,7 +29,7 @@ Overridable MSBuild properties include: * `$(AndroidFirstFrameworkVersion)`: The first `$(TargetFrameworkVersion)` which will be built by `make jenkins` and included in the installer. - Currently `v2.3`, but will be changed when we drop support for API-10. + Currently `v4.4`. This controls what is included in `build-tools/create-vsix` packages. * `$(AndroidFrameworkVersion)`: The Xamarin.Android `$(TargetFrameworkVersion)` diff --git a/build-tools/scripts/BuildEverything.mk b/build-tools/scripts/BuildEverything.mk index 3f82244d8ac..29485461a5c 100644 --- a/build-tools/scripts/BuildEverything.mk +++ b/build-tools/scripts/BuildEverything.mk @@ -23,13 +23,13 @@ ZIP_OUTPUT = $(ZIP_OUTPUT_BASENAME).$(ZIP_EXTENSION) ## The following values *must* use SPACE, **not** TAB, to separate values. # $(ALL_API_LEVELS) and $(ALL_FRAMEWORKS) must be kept in sync w/ each other -ALL_API_LEVELS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 +ALL_API_LEVELS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # this was different from ALL_API_LEVELS when API Level 26 was "O". Same could happen in the future. -ALL_PLATFORM_IDS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 +ALL_PLATFORM_IDS = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # supported api levels -ALL_FRAMEWORKS = _ _ _ _ _ _ _ _ _ v2.3 _ _ _ _ v4.0.3 v4.1 v4.2 v4.3 v4.4 v4.4.87 v5.0 v5.1 v6.0 v7.0 v7.1 v8.0 v8.1 v9.0 -API_LEVELS = 10 15 16 17 18 19 20 21 22 23 24 25 26 27 28 -STABLE_API_LEVELS = 10 15 16 17 18 19 20 21 22 23 24 25 26 27 28 +ALL_FRAMEWORKS = _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ v4.4 v4.4.87 v5.0 v5.1 v6.0 v7.0 v7.1 v8.0 v8.1 v9.0 +API_LEVELS = 19 20 21 22 23 24 25 26 27 28 +STABLE_API_LEVELS = 19 20 21 22 23 24 25 26 27 28 ## The preceding values *must* use SPACE, **not** TAB, to separate values. diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index 9f7ea19806f..e2f1fcbe914 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -2117,15 +2117,15 @@ public void CheckTargetFrameworkVersion ([Values (true, false)] bool isRelease) IsRelease = isRelease, }; proj.SetProperty ("AndroidUseLatestPlatformSdk", "False"); - proj.SetProperty ("TargetFrameworkVersion", "v2.3"); using (var builder = CreateApkBuilder (Path.Combine ("temp", TestContext.CurrentContext.Test.Name))) { - if (!Directory.Exists (Path.Combine (builder.FrameworkLibDirectory, "xbuild-frameworks", "MonoAndroid", "v2.3"))) + builder.GetTargetFrameworkVersionRange (out var _, out string firstFrameworkVersion, out var _, out string lastFrameworkVersion); + proj.SetProperty ("TargetFrameworkVersion", firstFrameworkVersion); + if (!Directory.Exists (Path.Combine (builder.FrameworkLibDirectory, "xbuild-frameworks", "MonoAndroid", firstFrameworkVersion))) Assert.Ignore ("This is a Pull Request Build. Ignoring test."); Assert.IsTrue (builder.Build (proj), "Build should have succeeded."); - Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion=v2.3"), "TargetFrameworkVerson should be v2.3"); - Assert.IsTrue (builder.Build (proj, parameters: new [] { "TargetFrameworkVersion=v4.4" }), "Build should have succeeded."); - Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion=v4.4"), "TargetFrameworkVerson should be v4.4"); - + Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion={firstFrameworkVersion}"), $"TargetFrameworkVerson should be {firstFrameworkVersion}"); + Assert.IsTrue (builder.Build (proj, parameters: new [] { $"TargetFrameworkVersion={lastFrameworkVersion}" }), "Build should have succeeded."); + Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion={lastFrameworkVersion}"), $"TargetFrameworkVersion should be {lastFrameworkVersion}"); } } @@ -2553,14 +2553,15 @@ public void CheckTargetFrameworkVersion () IsRelease = true, }; proj.SetProperty ("AndroidUseLatestPlatformSdk", "False"); - proj.SetProperty ("TargetFrameworkVersion", "v2.3"); using (var builder = CreateApkBuilder (Path.Combine ("temp", TestContext.CurrentContext.Test.Name))) { - if (!Directory.Exists (Path.Combine (builder.FrameworkLibDirectory, "xbuild-frameworks", "MonoAndroid", "v2.3"))) + builder.GetTargetFrameworkVersionRange (out var _, out string firstFrameworkVersion, out var _, out string lastFrameworkVersion); + proj.SetProperty ("TargetFrameworkVersion", firstFrameworkVersion); + if (!Directory.Exists (Path.Combine (builder.FrameworkLibDirectory, "xbuild-frameworks", "MonoAndroid", firstFrameworkVersion))) Assert.Ignore ("This is a Pull Request Build. Ignoring test."); Assert.IsTrue (builder.Build (proj), "Build should have succeeded."); - Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion=v2.3"), "TargetFrameworkVerson should be v2.3"); - Assert.IsTrue (builder.Build (proj, parameters: new [] { "TargetFrameworkVersion=v4.4" }), "Build should have succeeded."); - Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion=v4.4"), "TargetFrameworkVerson should be v4.4"); + Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion={firstFrameworkVersion}"), $"TargetFrameworkVersion should be {firstFrameworkVersion}"); + Assert.IsTrue (builder.Build (proj, parameters: new [] { $"TargetFrameworkVersion={lastFrameworkVersion}" }), "Build should have succeeded."); + Assert.IsTrue (StringAssertEx.ContainsText (builder.LastBuildOutput, $"Output Property: TargetFrameworkVersion={lastFrameworkVersion}"), $"TargetFrameworkVersion should be {lastFrameworkVersion}"); } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs index 6187516ab26..d99ae98351e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/Builder.cs @@ -172,33 +172,71 @@ public bool CrossCompilerAvailable (string supportedAbis) return result; } + public string FirstTargetFrameworkVersion () + { + GetTargetFrameworkVersionRange (out string _, out string firstFrameworkVersion, out string _, out string _); + return firstFrameworkVersion; + } + + public string FirstTargetFrameworkVersion (out string apiLevel) + { + GetTargetFrameworkVersionRange (out apiLevel, out string firstFrameworkVersion, out string _, out string _); + return firstFrameworkVersion; + } + public string LatestTargetFrameworkVersion () { - return LatestTargetFrameworkVersion (out string apiLevel); + GetTargetFrameworkVersionRange (out string _, out string _, out string _, out string lastFrameworkVersion); + return lastFrameworkVersion; } public string LatestTargetFrameworkVersion (out string apiLevel) { - Version latest = new Version (1, 0); - apiLevel = "1"; + GetTargetFrameworkVersionRange (out string _, out string _, out apiLevel, out string lastFrameworkVersion); + return lastFrameworkVersion; + } + + public void GetTargetFrameworkVersionRange (out string firstApiLevel, out string firstFrameworkVersion, out string lastApiLevel, out string lastFrameworkVersion) + { + firstApiLevel = firstFrameworkVersion = lastApiLevel = lastFrameworkVersion = null; + + Version firstVersion = null; + Version lastVersion = null; + var outdir = FrameworkLibDirectory; var path = Path.Combine (outdir, "xbuild-frameworks", "MonoAndroid"); if (!Directory.Exists(path)) { path = outdir; } foreach (var dir in Directory.EnumerateDirectories (path, "v*", SearchOption.TopDirectoryOnly)) { + // No binding assemblies in `v1.0`; don't process. + if (Path.GetFileName (dir) == "v1.0") + continue; Version version; string v = Path.GetFileName (dir).Replace ("v", ""); if (!Version.TryParse (v, out version)) continue; - if (latest < version) { - var apiInfo = Path.Combine (dir, "AndroidApiInfo.xml"); - if (File.Exists (apiInfo)) { - var doc = XDocument.Load (apiInfo); - apiLevel = doc.XPathSelectElement ("/AndroidApiInfo/Level")?.Value ?? apiLevel; - } - latest = version; + + string frameworkVersion = "v" + version.ToString (2); + string apiLevel = GetApiLevelFromInfoPath (Path.Combine (dir, "AndroidApiInfo.xml")); + if (firstVersion == null || version < firstVersion) { + firstVersion = version; + firstFrameworkVersion = frameworkVersion; + firstApiLevel = apiLevel; + } + if (lastVersion == null || version > lastVersion) { + lastVersion = version; + lastFrameworkVersion = frameworkVersion; + lastApiLevel = apiLevel; } } - return "v" + latest.ToString (2); + } + + static string GetApiLevelFromInfoPath (string androidApiInfo) + { + if (!File.Exists (androidApiInfo)) + return null; + + var doc = XDocument.Load (androidApiInfo); + return doc.XPathSelectElement ("/AndroidApiInfo/Level")?.Value; } public bool TargetFrameworkExists (string targetFramework) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets index ca396dd4b14..e7dd0f2237e 100755 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Bindings.targets @@ -62,7 +62,7 @@ Copyright (C) 2012 Xamarin Inc. All rights reserved. False MonoAndroid v5.0 - v2.3 + v4.4 True False jar2xml diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.CSharp.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.CSharp.targets index 4ecd524d26f..27bc46aa774 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.CSharp.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.CSharp.targets @@ -27,7 +27,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. MonoAndroid - v2.3 + v4.4 SdkOnly