diff --git a/build-tools/installers/create-installers.targets b/build-tools/installers/create-installers.targets index 7080dc29fde..4cd80baa804 100644 --- a/build-tools/installers/create-installers.targets +++ b/build-tools/installers/create-installers.targets @@ -29,29 +29,11 @@ <_EarlierFrameworkDir Include="@(_FrameworkDirsThatExist)" Exclude="$(_LatestStableFrameworkDir)" /> - - - - - - - - - - + + + + + <_DesignerFilesUnix Include="$(LegacyMSBuildSrcDir)$(HostOS)\bcl\**\*" /> <_DesignerFilesWin Include="$(LegacyMSBuildSrcDir)bcl\**\* "/> @@ -365,7 +347,7 @@ <_FrameworkFiles Include="@(_FrameworkDirsThatExist->'%(Identity)\AndroidApiInfo.xml')" /> diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs index 27177273816..79556883209 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs @@ -34,7 +34,9 @@ public void TestResolveToolsExists () Directory.Delete (Path.Combine (Root, path), recursive: true); var engine = new MockBuildEngine (TestContext.Out, errors: errors, messages: messages); - var frameworksPath = Path.Combine (TestEnvironment.MonoAndroidFrameworkDirectory, "v1.0"); + var frameworksRoot = Path.Combine (TestEnvironment.DotNetPreviewDirectory, "packs", "Microsoft.NETCore.App.Ref"); + var mscorlibDll = Directory.GetFiles (frameworksRoot, "mscorlib.dll", SearchOption.AllDirectories).LastOrDefault (); + var frameworksPath = Path.GetDirectoryName (mscorlibDll); var androidSdk = CreateFauxAndroidSdkDirectory (Path.Combine (path, "Sdk"), "24.0.1", new[] { new ApiInfo { Id = "23", Level = 23, Name = "Marshmallow", FrameworkVersion = "v6.0", Stable = true }, @@ -52,6 +54,7 @@ public void TestResolveToolsExists () MonoAndroidToolsPath = TestEnvironment.AndroidMSBuildDirectory, ReferenceAssemblyPaths = new string[] { frameworksPath, + TestEnvironment.MonoAndroidFrameworkDirectory, }, }; Assert.True (task.Execute (), "Task should have completed successfully."); 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 341fa33daa3..fa603222054 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 @@ -105,7 +105,7 @@ public void GetTargetFrameworkVersionRange (out string firstApiLevel, out string Version lastVersion = null; List allTFVs = new List (); - var searchDir = UseDotNet ? Path.Combine (TestEnvironment.DotNetPreviewAndroidSdkDirectory, "data") : TestEnvironment.MonoAndroidFrameworkDirectory; + var searchDir = Path.Combine (TestEnvironment.DotNetPreviewAndroidSdkDirectory, "data"); foreach (var apiInfoFile in Directory.EnumerateFiles (searchDir, "AndroidApiInfo.xml", SearchOption.AllDirectories)) { string frameworkVersion = GetApiInfoElementValue (apiInfoFile, "/AndroidApiInfo/Version"); string apiLevel = GetApiInfoElementValue (apiInfoFile, "/AndroidApiInfo/Level"); @@ -136,16 +136,6 @@ static string GetApiInfoElementValue (string androidApiInfo, string elementPath) return doc.XPathSelectElement (elementPath)?.Value; } - public bool TargetFrameworkExists (string targetFramework) - { - var path = Path.Combine (TestEnvironment.MonoAndroidFrameworkDirectory, targetFramework); - if (!Directory.Exists (path)) { - return false; - } - return true; - } - - public string Root { get { return String.IsNullOrEmpty (root) ? Path.GetDirectoryName (new Uri (typeof (XamarinProject).Assembly.CodeBase).LocalPath) : root; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs index 61b9784722b..52f4a8ba835 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/TestEnvironment.cs @@ -3,7 +3,7 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; -using Xamarin.Android.Tools.VSWhere; +using Xamarin.Android.Tools; namespace Xamarin.ProjectTools { @@ -47,69 +47,40 @@ public static bool IsLinux { } } - static readonly string LocalMonoAndroidToolsDirectory = Path.Combine (XABuildPaths.PrefixDirectory, "lib", "xamarin.android", "xbuild", "Xamarin", "Android"); - - public static readonly string MacOSInstallationRoot = "/Library/Frameworks/Xamarin.Android.framework/Versions/Current"; - - static VisualStudioInstance visualStudioInstance; - public static VisualStudioInstance GetVisualStudioInstance () - { - //We should cache and reuse this value, so we don't run vswhere.exe so much - if (visualStudioInstance != null && !string.IsNullOrEmpty (visualStudioInstance.VisualStudioRootPath)) - return visualStudioInstance; - - return visualStudioInstance = MSBuildLocator.QueryLatest (); - } - /// - /// The MonoAndroid framework (and other reference assemblies) directory within a local build tree. Contains v1.0, v9.0, etc, - /// e.g. xamarin-android/bin/Debug/lib/xamarin.android/xbuild-frameworks/MonoAndroid.
+ /// The MonoAndroid reference assemblies directory within a local build tree, e.g. bin/Debug/lib/packs/Microsoft.Android.Ref.34/34.99.0/ref/net8.0/
/// If a local build tree can not be found, or if it is empty, this will return the system installation location instead:
- /// Windows: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\ReferenceAssemblies\Microsoft\Framework\MonoAndroid
- /// macOS: Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/xamarin.android/xbuild-frameworks/MonoAndroid + /// bin/Debug/dotnet/packs/Microsoft.Android.Ref.34/$(Latest)/ref/net$(Latest)/ ///
public static string MonoAndroidFrameworkDirectory { get { - var frameworkLibDir = Path.Combine (XABuildPaths.PrefixDirectory, "lib", "xamarin.android", "xbuild-frameworks", "MonoAndroid"); - if (Directory.Exists (frameworkLibDir) && Directory.EnumerateDirectories (frameworkLibDir, "v*", SearchOption.TopDirectoryOnly).Any ()) - return frameworkLibDir; - - if (IsWindows) { - VisualStudioInstance vs = GetVisualStudioInstance (); - return Path.Combine (vs.VisualStudioRootPath, "Common7", "IDE", "ReferenceAssemblies", "Microsoft", "Framework", "MonoAndroid"); - } else { - return Path.Combine (MacOSInstallationRoot, "lib", "xamarin.android", "xbuild-frameworks", "MonoAndroid"); + var rootRefDir = Directory.GetDirectories (Path.Combine (DotNetPreviewPacksDirectory, $"Microsoft.Android.Ref.{XABuildConfig.AndroidDefaultTargetDotnetApiLevel}")).LastOrDefault (); + if (!Directory.Exists (rootRefDir)) { + throw new DirectoryNotFoundException ($"Unable to locate Microsoft.Android.Ref."); } + + var maDll = Directory.GetFiles (rootRefDir, "Mono.Android.dll", SearchOption.AllDirectories).LastOrDefault (); + var refDir = Path.GetDirectoryName(maDll); + if (!Directory.Exists (refDir)) { + throw new DirectoryNotFoundException ($"Unable to locate Mono.Android.dll inside Microsoft.Android.Ref."); + } + + return refDir; } } /// - /// The MonoAndroidTools directory within a local build tree, e.g. xamarin-android/bin/Debug/lib/xamarin.android/xbuild/Xamarin/Android.
- /// If a local build tree can not be found, or if it is empty, this will return the system installation or .NET sandbox location instead:
- /// Windows: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Xamarin\Android
- /// macOS: /Library/Frameworks/Xamarin.Android.framework/Versions/Current/lib/xamarin.android/xbuild/Xamarin/Android
- /// Windows (dotnet): bin\Debug\dotnet\packs\Microsoft.Android.Sdk.Windows\$(Latest)\tools
- /// macOS (dotnet): bin/Debug/dotnet/packs/Microsoft.Android.Sdk.Darwin/$(Latest)/tools + /// The MonoAndroidTools directory within a local build tree, e.g. bin/Debug/lib/packs/Microsoft.Android.Sdk.Darwin/34.99.0/tools/
+ /// If a local build tree can not be found, or if it is empty, this will return the .NET sandbox location instead:
+ /// Windows: bin\Debug\dotnet\packs\Microsoft.Android.Sdk.Windows\$(Latest)\tools
+ /// macOS: bin/Debug/dotnet/packs/Microsoft.Android.Sdk.Darwin/$(Latest)/tools ///
public static string AndroidMSBuildDirectory { get { - if (Builder.UseDotNet) { - if (!Directory.Exists (DotNetPreviewAndroidSdkDirectory)) { - throw new DirectoryNotFoundException ($"Unable to locate a Microsoft.Android.Sdk in either '{DefaultPacksDir}' or '{LocalPacksDir}'."); - } - return Path.Combine (DotNetPreviewAndroidSdkDirectory, "tools"); - } - - if (UseLocalBuildOutput) { - return LocalMonoAndroidToolsDirectory; - } else { - if (IsWindows) { - VisualStudioInstance vs = GetVisualStudioInstance (); - return Path.Combine (vs.VisualStudioRootPath, "MSBuild", "Xamarin", "Android"); - } else { - return Path.Combine (MacOSInstallationRoot, "lib", "xamarin.android", "xbuild", "Xamarin", "Android"); - } + if (!Directory.Exists (DotNetPreviewAndroidSdkDirectory)) { + throw new DirectoryNotFoundException ($"Unable to locate a Microsoft.Android.Sdk in either '{DefaultPacksDir}' or '{LocalPacksDir}'."); } + return Path.Combine (DotNetPreviewAndroidSdkDirectory, "tools"); } } @@ -167,12 +138,12 @@ orderby version descending /// /// Tests will attempt to run against local build output directories by default, - /// and fall back to `dotnet/packs` or a legacy system install location if a local build does not exist. + /// and fall back to `dotnet/packs` if a local build does not exist. /// This will always return false for our tests running in CI. /// public static bool UseLocalBuildOutput { get { - var msbuildDir = Builder.UseDotNet ? Path.Combine (LocalDotNetAndroidSdkDirectory, "tools") : LocalMonoAndroidToolsDirectory; + var msbuildDir = Path.Combine (LocalDotNetAndroidSdkDirectory, "tools"); return Directory.Exists (msbuildDir) && File.Exists (Path.Combine (msbuildDir, "Xamarin.Android.Build.Tasks.dll")); } } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets index bb45a722e04..fbd0fd842c7 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.targets @@ -22,6 +22,7 @@ _GenerateBundledVersions; _CopyNetSdkTargets; _CopyVSExtensionTargets; + _WriteVersionFiles; <_AndroidSdkLocation Condition="'$(_AndroidSdkLocation)'==''">$(AndroidSdkDirectory) <_MultiDexAarInAndroidSdk>extras\android\m2repository\com\android\support\multidex\1.0.1\multidex-1.0.1.aar @@ -381,4 +382,23 @@ SkipUnchangedFiles="True" />
+ + + + + +