diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs index b63d8c2102e..94078471915 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidDependenciesTests.cs @@ -133,9 +133,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest () var referencesPath = CreateFauxReferencesDirectory (Path.Combine (path, "xbuild-frameworks"), apis); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, - TargetFrameworkVersion = "v8.0", TargetSdkVersion = "26", - UseLatestPlatformSdk = false, }; var parameters = new string [] { $"TargetFrameworkRootPath={referencesPath}", @@ -147,7 +145,7 @@ public void GetDependencyWhenBuildToolsAreMissingTest () builder.Target = "GetAndroidDependencies"; Assert.True (builder.Build (proj, parameters: parameters), string.Format ("First Build should have succeeded")); - int apiLevel = Builder.UseDotNet ? XABuildConfig.AndroidDefaultTargetDotnetApiLevel : 26; + int apiLevel = XABuildConfig.AndroidDefaultTargetDotnetApiLevel; StringAssertEx.Contains ($"platforms/android-{apiLevel}", builder.LastBuildOutput, $"platforms/android-{apiLevel} should be a dependency."); StringAssertEx.Contains ($"build-tools/{buildToolsVersion}", builder.LastBuildOutput, $"build-tools/{buildToolsVersion} should be a dependency."); StringAssertEx.Contains ("platform-tools", builder.LastBuildOutput, "platform-tools should be a dependency."); @@ -168,9 +166,7 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat var referencesPath = CreateFauxReferencesDirectory (Path.Combine (path, "xbuild-frameworks"), apis); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, - TargetFrameworkVersion = "v8.0", TargetSdkVersion = "26", - UseLatestPlatformSdk = false, }; var parameters = new string [] { $"TargetFrameworkRootPath={referencesPath}", @@ -183,7 +179,7 @@ public void GetDependencyWhenSDKIsMissingTest ([Values (true, false)] bool creat builder.Target = "GetAndroidDependencies"; Assert.True (builder.Build (proj, parameters: parameters), string.Format ("First Build should have succeeded")); - int apiLevel = Builder.UseDotNet ? XABuildConfig.AndroidDefaultTargetDotnetApiLevel : 26; + int apiLevel = XABuildConfig.AndroidDefaultTargetDotnetApiLevel; StringAssertEx.Contains ($"platforms/android-{apiLevel}", builder.LastBuildOutput, $"platforms/android-{apiLevel} should be a dependency."); StringAssertEx.Contains ($"build-tools/{buildToolsVersion}", builder.LastBuildOutput, $"build-tools/{buildToolsVersion} should be a dependency."); StringAssertEx.Contains ("platform-tools", builder.LastBuildOutput, "platform-tools should be a dependency."); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs index 99e9a963422..f73f76da2a7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs @@ -20,9 +20,6 @@ public class AndroidUpdateResourcesTest : BaseTest [Test] public void CheckMultipleLibraryProjectReferenceAlias ([Values (true, false)] bool withGlobal, [Values (true, false)] bool useDesignerAssembly) { - if (useDesignerAssembly && !Builder.UseDotNet) { - Assert.Ignore ($"Skipping, {useDesignerAssembly} not supported in Legacy."); - } var path = Path.Combine (Root, "temp", TestName); var library1 = new XamarinAndroidLibraryProject () { ProjectName = "Library1", @@ -88,19 +85,17 @@ public void BuildAppWithSystemNamespace () } [Test] - public void DesignTimeBuild ([Values(false, true)] bool isRelease, [Values (false, true)] bool useManagedParser, [Values (false, true)] bool useAapt2) + public void DesignTimeBuild ([Values(false, true)] bool isRelease, [Values (false, true)] bool useManagedParser) { - AssertAaptSupported (useAapt2); var regEx = new Regex (@"(?([a-zA-Z_0-9])+)\slibrary_name=(?([0-9A-Za-z])+);", RegexOptions.Compiled | RegexOptions.Multiline ); - var path = Path.Combine (Root, "temp", $"DesignTimeBuild_{isRelease}_{useManagedParser}_{useAapt2}"); + var path = Path.Combine (Root, "temp", $"DesignTimeBuild_{isRelease}_{useManagedParser}"); var lib = new XamarinAndroidLibraryProject () { ProjectName = "Lib1", IsRelease = isRelease, }; lib.SetProperty ("AndroidUseManagedDesignTimeResourceGenerator", useManagedParser.ToString ()); lib.SetProperty ("AndroidUseDesignerAssembly", "false"); - lib.AndroidUseAapt2 = useAapt2; var proj = new XamarinAndroidApplicationProject () { IsRelease = isRelease, References = { @@ -110,7 +105,6 @@ public void DesignTimeBuild ([Values(false, true)] bool isRelease, [Values (fals var intermediateOutputPath = Path.Combine (path, proj.ProjectName, proj.IntermediateOutputPath); proj.SetProperty ("AndroidUseManagedDesignTimeResourceGenerator", useManagedParser.ToString ()); proj.SetProperty ("AndroidUseDesignerAssembly", "false"); - proj.AndroidUseAapt2 = useAapt2; using (var l = CreateDllBuilder (Path.Combine (path, lib.ProjectName), false, false)) { using (var b = CreateApkBuilder (Path.Combine (path, proj.ProjectName), false, false)) { l.Target = "Build"; @@ -203,30 +197,26 @@ public void ReportAaptErrorsInOriginalFileName () } [Test] - public void ReportAaptWarningsForBlankLevel ([Values (false, true)] bool useAapt2) + public void ReportAaptWarningsForBlankLevel () { - AssertAaptSupported (useAapt2); //This test should get the warning `Invalid file name: must contain only [a-z0-9_.]` // However, still fails due to aapt failing, Resource.designer.cs is not generated var proj = new XamarinAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; proj.AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\drawable\\Image (1).png") { BinaryContent = () => XamarinAndroidCommonProject.icon_binary_mdpi }); using (var b = CreateApkBuilder ($"temp/{TestName}")) { b.ThrowOnBuildFailure = false; Assert.IsFalse (b.Build (proj), "Build should have failed."); - StringAssertEx.Contains (useAapt2 ? "APT0003" : "APT1144", b.LastBuildOutput, "An error message with a blank \"level\", should be reported as an error!"); + StringAssertEx.Contains ("APT0003", b.LastBuildOutput, "An error message with a blank \"level\", should be reported as an error!"); Assert.IsTrue (b.Clean (proj), "Clean should have succeeded."); } } [Test] - public void RepetiviteBuildUpdateSingleResource ([Values (false, true)] bool useAapt2) + public void RepetiviteBuildUpdateSingleResource () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; using (var b = CreateApkBuilder ()) { BuildItem image1, image2; using (var stream = typeof (XamarinAndroidCommonProject).Assembly.GetManifestResourceStream ("Xamarin.ProjectTools.Resources.Base.Icon.png")) { @@ -246,9 +236,7 @@ public void RepetiviteBuildUpdateSingleResource ([Values (false, true)] bool use b.Output.AssertTargetIsSkipped ("_GenerateAndroidResourceDir"); b.Output.AssertTargetIsSkipped ("_CompileJava"); b.Output.AssertTargetIsSkipped (KnownTargets.LinkAssembliesNoShrink); - if (useAapt2) { - b.Output.AssertTargetIsSkipped ("_CompileResources"); - } + b.Output.AssertTargetIsSkipped ("_CompileResources"); image1.Timestamp = DateTimeOffset.UtcNow; var layout = proj.AndroidResources.First (x => x.Include() == "Resources\\layout\\Main.axml"); layout.Timestamp = DateTimeOffset.UtcNow; @@ -258,9 +246,7 @@ public void RepetiviteBuildUpdateSingleResource ([Values (false, true)] bool use b.Output.AssertTargetIsSkipped ("_CompileJava", occurrence: 2); b.Output.AssertTargetIsSkipped (KnownTargets.LinkAssembliesNoShrink, occurrence: 2); b.Output.AssertTargetIsNotSkipped ("_CreateBaseApk", occurrence: 2); - if (useAapt2) { - b.Output.AssertTargetIsPartiallyBuilt ("_CompileResources"); - } + b.Output.AssertTargetIsPartiallyBuilt ("_CompileResources"); } } @@ -314,10 +300,9 @@ public void Check9PatchFilesAreProcessed () /// /// Based on https://bugzilla.xamarin.com/show_bug.cgi?id=29263 /// - public void CheckXmlResourcesFilesAreProcessed ([Values(false, true)] bool useAapt2) + public void CheckXmlResourcesFilesAreProcessed () { - AssertAaptSupported (useAapt2); - var projectPath = String.Format ("temp/CheckXmlResourcesFilesAreProcessed_{0}", useAapt2); + var projectPath = "temp/CheckXmlResourcesFilesAreProcessed"; var layout = @" layout, @@ -436,8 +420,7 @@ protected override void OnClick() var packaged_resources = Path.Combine (intermediate, "android", "bin", "packaged_resources"); FileAssert.Exists (packaged_resources); var assemblyIdentityMap = b.Output.GetAssemblyMapCache (); - var extension = Builder.UseDotNet ? ".aar" : ".dll"; - var assemblyIndex = assemblyIdentityMap.IndexOf ($"{lib.ProjectName}{extension}").ToString (); + var assemblyIndex = assemblyIdentityMap.IndexOf ($"{lib.ProjectName}.aar").ToString (); using (var zip = ZipHelper.OpenZip (packaged_resources)) { CheckCustomView (zip, intermediate, "lp", assemblyIndex, "jl", "res", "layout", "custom_text_lib.xml"); CheckCustomView (zip, intermediate, "res", "layout", "custom_text_app.xml"); @@ -537,23 +520,11 @@ public void CheckResourceDesignerIsCreated (bool isRelease, ProjectLanguage lang using (var b = CreateApkBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); // Intermediate designer file support is not compatible with F# projects using Xamarin.Android.FSharp.ResourceProvider. - string outputFile; - if (Builder.UseDotNet) { - outputFile = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "__Microsoft.Android.Resource.Designer" + proj.Language.DefaultDesignerExtension); - Assert.IsTrue (File.Exists (outputFile), $"{outputFile} should have been created in {proj.IntermediateOutputPath}"); - } else { - outputFile = isFSharp ? Path.Combine (Root, b.ProjectDirectory, "Resources", "Resource.designer" + proj.Language.DefaultDesignerExtension) - : Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "Resource.designer" + proj.Language.DefaultDesignerExtension); - Assert.IsTrue (File.Exists (outputFile), "Resource.designer{1} should have been created in {0}", - isFSharp ? Path.Combine (Root, b.ProjectDirectory, "Resources") : proj.IntermediateOutputPath, - proj.Language.DefaultDesignerExtension); - } - + string outputFile = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "__Microsoft.Android.Resource.Designer" + proj.Language.DefaultDesignerExtension); + Assert.IsTrue (File.Exists (outputFile), $"{outputFile} should have been created in {proj.IntermediateOutputPath}"); Assert.IsTrue (b.Clean (proj), "Clean should have succeeded."); - if (!isFSharp || Builder.UseDotNet) { - Assert.IsFalse (File.Exists (outputFile), "Resource.designer{1} should have been cleaned in {0}", - proj.IntermediateOutputPath, proj.Language.DefaultDesignerExtension); - } + Assert.IsFalse (File.Exists (outputFile), "Resource.designer{1} should have been cleaned in {0}", + proj.IntermediateOutputPath, proj.Language.DefaultDesignerExtension); } } @@ -613,7 +584,7 @@ public void CheckOldResourceDesignerIsNotUsed ([Values (true, false)] bool isRel var fi = new FileInfo (Path.Combine (Root, b.ProjectDirectory, designer)); Assert.IsFalse (fi.Length > new [] { 0xef, 0xbb, 0xbf, 0x0d, 0x0a }.Length, "{0} should not contain anything.", designer); - var designerFile = Builder.UseDotNet ? "__Microsoft.Android.Resource.Designer" : "Resource.designer" ; + var designerFile = "__Microsoft.Android.Resource.Designer"; var outputFile = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, designerFile + proj.Language.DefaultDesignerExtension); Assert.IsTrue (File.Exists (outputFile), $"{designerFile}{proj.Language.DefaultDesignerExtension} should have been created in {proj.IntermediateOutputPath}"); @@ -640,7 +611,7 @@ public void CheckOldResourceDesignerWithWrongCasingIsRemoved ([Values (true, fal Assert.IsFalse (File.Exists (Path.Combine (Root, b.ProjectDirectory, "Resources", "Resource.designer" + proj.Language.DefaultDesignerExtension)), "{0} should not exists", designer.Include ()); - var designerFile = Builder.UseDotNet ? "__Microsoft.Android.Resource.Designer" : "Resource.designer" ; + var designerFile = "__Microsoft.Android.Resource.Designer"; var outputFile = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, designerFile + proj.Language.DefaultDesignerExtension); Assert.IsTrue (File.Exists (outputFile), $"{designerFile}{proj.Language.DefaultDesignerExtension} should have been created in {proj.IntermediateOutputPath}"); @@ -696,8 +667,6 @@ public void GenerateResourceDesigner_false([Values (false, true)] bool useDesign [Test] public void CheckThatXA1034IsRaisedForInvalidConfiguration ([Values (true, false)] bool isRelease) { - if (!Builder.UseDotNet) - Assert.Ignore ("Test uses designer assembly which does not work on Legacy projects."); string path = Path.Combine (Root, "temp", TestName); var foo = new BuildItem.Source ("Foo.cs") { TextContent = () => @"using System; @@ -782,11 +751,9 @@ public void CheckAaptErrorRaisedForInvalidDirectoryName () } [Test] - public void CheckAaptErrorRaisedForInvalidFileName ([Values (false, true)] bool useAapt2) + public void CheckAaptErrorRaisedForInvalidFileName () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; proj.AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\drawable\\icon-2.png") { BinaryContent = () => XamarinAndroidCommonProject.icon_binary_hdpi, }); @@ -800,16 +767,14 @@ public void CheckAaptErrorRaisedForInvalidFileName ([Values (false, true)] bool b.ThrowOnBuildFailure = false; Assert.IsFalse (b.Build (proj), "Build should have failed"); StringAssertEx.Contains ("Invalid file name:", b.LastBuildOutput); - StringAssertEx.Contains ($"{(useAapt2 ? "1" : "3")} Error(s)", b.LastBuildOutput); + StringAssertEx.Contains ($"1 Error(s)", b.LastBuildOutput); } } [Test] - public void CheckAaptErrorNotRaisedForInvalidFileNameWithValidLogicalName ([Values (false, true)] bool useAapt2) + public void CheckAaptErrorNotRaisedForInvalidFileNameWithValidLogicalName () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; proj.AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\drawable\\icon-2.png") { Metadata = { { "LogicalName", "Resources\\drawable\\icon2.png" } }, BinaryContent = () => XamarinAndroidCommonProject.icon_binary_hdpi, @@ -871,8 +836,6 @@ public void CheckFilesAreRemoved () { KnownPackages.AndroidSupportV4_27_0_2_1, }, }; - if (!Builder.UseDotNet) - proj.SetProperty (KnownProperties.TargetFrameworkVersion, "v5.1"); using (var builder = CreateApkBuilder ()) { Assert.IsTrue (builder.Build (proj), "Build should have succeeded"); @@ -889,10 +852,8 @@ public void CheckFilesAreRemoved () { [Test] public void CheckDontUpdateResourceIfNotNeeded ([Values (true, false)] bool useDesignerAssembly) { - if (!Builder.UseDotNet && useDesignerAssembly) - Assert.Ignore ("Test uses designer assembly which does not work on Legacy projects."); var path = Path.Combine ("temp", TestName); - var target = Builder.UseDotNet ? "_CreateAar" : "_CreateManagedLibraryResourceArchive"; + var target = "_CreateAar"; var foo = new BuildItem.Source ("Foo.cs") { TextContent = () => @"using System; namespace Lib1 { @@ -988,11 +949,7 @@ public string GetFoo () { var themeFile = Path.Combine (Root, path, libProj.ProjectName, libProj.IntermediateOutputPath, "res", "values", "theme.xml"); Assert.IsTrue (!File.Exists (themeFile), $"{themeFile} should have been deleted."); string archive; - if (Builder.UseDotNet) { - archive = Path.Combine (Root, path, libProj.ProjectName, libProj.OutputPath, $"{libProj.ProjectName}.aar"); - } else { - archive = Path.Combine (Root, path, libProj.ProjectName, libProj.IntermediateOutputPath, "__AndroidLibraryProjects__.zip"); - } + archive = Path.Combine (Root, path, libProj.ProjectName, libProj.OutputPath, $"{libProj.ProjectName}.aar"); Assert.IsNull (ZipHelper.ReadFileFromZip (archive, "res/values/theme.xml"), "res/values/theme.xml should have been removed from __AndroidLibraryProjects__.zip"); appBuilder.BuildLogFile = "build3.log"; Assert.IsTrue (appBuilder.Build (appProj, doNotCleanupOnUpdate: true, saveProject: false), "Application Build should have succeeded."); @@ -1169,33 +1126,6 @@ public void CheckMaxResWarningIsEmittedAsAWarning() } } - [Test] - public void CheckDefaultTranslationWarnings () - { - AssertAaptSupported (useAapt2: false); - var path = Path.Combine ("temp", TestName); - var proj = new XamarinAndroidApplicationProject () { - IsRelease = true, - OtherBuildItems = { - new BuildItem.Folder ("Resources\\values-fr\\") { - }, - }, - }; - - string name = "test"; - proj.AndroidUseAapt2 = false; - proj.AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\values-fr\\Strings.xml") { - TextContent = () => $@" - - Test -", - }); - using (var builder = CreateApkBuilder (path, false, false)) { - Assert.IsTrue (builder.Build (proj), "Build should have succeeded."); - StringAssertEx.Contains ($"warning APT1145: warning: string '{name}' has no default translation.", builder.LastBuildOutput, "Build output should contain an APT1145 warning about 'no default translation'"); - } - } - [Test] public void CheckCodeBehindIsGenerated () { @@ -1290,11 +1220,9 @@ public void LightlyModifyLayout () } [Test] - public void CustomViewAddResourceId ([Values (false, true)] bool useAapt2) + public void CustomViewAddResourceId () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; proj.LayoutMain = proj.LayoutMain.Replace ("", ""); proj.PackageReferences.Add (KnownPackages.Android_Arch_Core_Common_26_1_0); proj.PackageReferences.Add (KnownPackages.Android_Arch_Lifecycle_Common_26_1_0); @@ -1319,14 +1247,13 @@ public void CustomViewAddResourceId ([Values (false, true)] bool useAapt2) proj.Touch (@"Resources\layout\Main.axml"); Assert.IsTrue (b.Build (proj, doNotCleanupOnUpdate: true), "second build should have succeeded"); - if (useAapt2) { - Assert.IsTrue ( - b.Output.IsTargetPartiallyBuilt ("_CompileResources"), - "The target _CompileResources should have been partially built"); - Assert.IsTrue ( - b.Output.IsTargetSkipped ("_FixupCustomViewsForAapt2"), - "The target _FixupCustomViewsForAapt2 should have been skipped"); - } + Assert.IsTrue ( + b.Output.IsTargetPartiallyBuilt ("_CompileResources"), + "The target _CompileResources should have been partially built"); + Assert.IsTrue ( + b.Output.IsTargetSkipped ("_FixupCustomViewsForAapt2"), + "The target _FixupCustomViewsForAapt2 should have been skipped"); + var r_java = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", proj.PackageNameJavaIntermediatePath, "R.java"); FileAssert.Exists (r_java); var r_java_contents = File.ReadAllLines (r_java); @@ -1336,15 +1263,13 @@ public void CustomViewAddResourceId ([Values (false, true)] bool useAapt2) [Test] [Parallelizable (ParallelScope.Self)] - public void CheckNoVersionVectors ([Values (true, false)] bool useAapt2) + public void CheckNoVersionVectors () { - AssertAaptSupported (useAapt2); var proj = new XamarinFormsAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - string aaptCommand = useAapt2 ? "Executing link" : "Executing package"; + string aaptCommand = "Executing link"; foreach (var line in b.LastBuildOutput) { if (line.Contains (aaptCommand)) { StringAssert.Contains ("--no-version-vectors", line, "The Xamarin.Android.Support.Vector.Drawable NuGet should set `--no-version-vectors`!"); @@ -1365,10 +1290,6 @@ BuildItem CreateItem (string include) => }; var proj = new XamarinAndroidApplicationProject (); - // Package requires packages.config - if (!Builder.UseDotNet) { - proj.Packages.Add (KnownPackages.Xamarin_PdfView_Android); - } proj.AndroidResources.Add (CreateItem ("Resources\\raw\\.foo")); proj.AndroidResources.Add (CreateItem ("Resources\\raw\\.git")); proj.AndroidResources.Add (CreateItem ("Resources\\raw\\.svn")); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs index c207d49e7e8..0b89a082870 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AotTests.cs @@ -54,16 +54,15 @@ public void TearDown () void AssertProfiledAotBuildMessages(ProjectBuilder b) { - string filename = Builder.UseDotNet ? "dotnet" : "startup"; - StringAssertEx.ContainsRegex (@$"Using profile data file.*{filename}\.aotprofile", b.LastBuildOutput, "Should use default AOT profile", RegexOptions.IgnoreCase); + StringAssertEx.ContainsRegex (@$"Using profile data file.*dotnet\.aotprofile", b.LastBuildOutput, "Should use default AOT profile", RegexOptions.IgnoreCase); StringAssertEx.ContainsRegex (@$"Method.*emitted at", b.LastBuildOutput, "Should contain verbose AOT compiler output", RegexOptions.IgnoreCase); } [Test, Category ("ProfiledAOT")] public void BuildBasicApplicationReleaseProfiledAot ([Values (true, false)] bool enableLLVM) { - if (Builder.UseDotNet && enableLLVM) { - Assert.Ignore("https://github.com/dotnet/runtime/pull/71411"); + if (TestEnvironment.IsWindows && enableLLVM) { + Assert.Ignore("https://github.com/dotnet/runtime/issues/93788"); } var proj = new XamarinAndroidApplicationProject () { @@ -108,8 +107,7 @@ public void BuildBasicApplicationReleaseProfiledAotWithoutDefaultProfile () proj.SetProperty (proj.ActiveConfigurationProperties, "AndroidUseDefaultAotProfile", "false"); using var b = CreateApkBuilder (); Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - string filename = Builder.UseDotNet ? "dotnet" : "startup"; - StringAssertEx.DoesNotContainRegex (@$"Using profile data file.*{filename}\.aotprofile", b.LastBuildOutput, "Should not use default AOT profile", RegexOptions.IgnoreCase); + StringAssertEx.DoesNotContainRegex (@$"Using profile data file.*dotnet\.aotprofile", b.LastBuildOutput, "Should not use default AOT profile", RegexOptions.IgnoreCase); } [Test] @@ -199,31 +197,9 @@ public void BuildAotApplicationWithNdkAndBundleAndÜmläüts (string supportedAb using (var b = CreateApkBuilder (path)) { b.ThrowOnBuildFailure = false; Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - //NOTE: Windows has shortened paths such as: C:\Users\myuser\ANDROI~3\ndk\PLATFO~1\AN3971~1\arch-x86\usr\lib\libc.so - if (checkMinLlvmPath && !IsWindows && !Builder.UseDotNet) { - Xamarin.Android.Tasks.NdkTools ndk = Xamarin.Android.Tasks.NdkTools.Create (AndroidNdkPath); - bool ndk22OrNewer = ndk.Version.Main.Major >= 22; - - // LLVM passes a direct path to libc.so, and we need to use the libc.so - // which corresponds to the *minimum* SDK version specified in AndroidManifest.xml - // Since we overrode minSdkVersion=16, that means we should use libc.so from android-16. - if (ndk22OrNewer) { - // NDK r22 or newer store libc in [toolchain]/sysroot/usr/lib/[ARCH]/[API]/libc.so - StringAssertEx.ContainsRegex (@"\s*\[aot-compiler stdout].*sysroot.*.usr.lib.*19.libc\.so", b.LastBuildOutput, "AOT+LLVM should use libc.so from minSdkVersion!"); - } else { - StringAssertEx.ContainsRegex (@"\s*\[aot-compiler stdout].*android-19.arch-.*.usr.lib.libc\.so", b.LastBuildOutput, "AOT+LLVM should use libc.so from minSdkVersion!"); - } - } foreach (var abi in supportedAbis.Split (new char [] { ';' })) { var intermediate = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - if (!Builder.UseDotNet) { - var libapp = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, - "bundles", abi, "libmonodroid_bundle_app.so"); - Assert.IsTrue (File.Exists (libapp), abi + " libmonodroid_bundle_app.so does not exist"); - } - var aotNativeLibrary = Builder.UseDotNet ? - Path.Combine (intermediate, AbiUtils.AbiToRuntimeIdentifier (abi), "aot", "UnnamedProject.dll.so") : - Path.Combine (intermediate, "aot", abi, "libaot-UnnamedProject.dll.so"); + var aotNativeLibrary = Path.Combine (intermediate, AbiUtils.AbiToRuntimeIdentifier (abi), "aot", "UnnamedProject.dll.so"); FileAssert.Exists (aotNativeLibrary); var apk = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.PackageName}-Signed.apk"); @@ -268,9 +244,7 @@ public void BuildAotApplicationAndÜmläüts (string supportedAbis, bool enableL Assert.IsTrue (b.Build (proj), "Build should have succeeded."); foreach (var abi in supportedAbis.Split (new char [] { ';' })) { var intermediate = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - var aotNativeLibrary = Builder.UseDotNet ? - Path.Combine (intermediate, AbiUtils.AbiToRuntimeIdentifier (abi), "aot", "UnnamedProject.dll.so") : - Path.Combine (intermediate, "aot", abi, "libaot-UnnamedProject.dll.so"); + var aotNativeLibrary = Path.Combine (intermediate, AbiUtils.AbiToRuntimeIdentifier (abi), "aot", "UnnamedProject.dll.so"); FileAssert.Exists (aotNativeLibrary); var apk = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.PackageName}-Signed.apk"); @@ -304,19 +278,10 @@ public void BuildAMassiveApp () SolutionPath = Path.Combine (Root, testPath), }; var app1 = new XamarinFormsMapsApplicationProject { - TargetFrameworkVersion = sb.LatestTargetFrameworkVersion (), ProjectName = "App1", AotAssemblies = true, IsRelease = true, }; - if (Builder.UseDotNet) { - //TODO Re-enable if this test fails. - // app1.PackageReferences.Clear (); - // app1.PackageReferences.Add (KnownPackages.XamarinForms_5_0_0_2515); - // app1.PackageReferences.Add (KnownPackages.XamarinFormsMaps_5_0_0_2515); - // app1.PackageReferences.Add (KnownPackages.Xamarin_Build_Download_0_11_3); - - } //NOTE: BuildingInsideVisualStudio prevents the projects from being built as dependencies sb.BuildingInsideVisualStudio = false; app1.Imports.Add (new Import ("foo.targets") { @@ -348,7 +313,6 @@ public void BuildAMassiveApp () for (int i = 0; i < 128; i++) { var libName = $"Lib{i}"; var lib = new XamarinAndroidLibraryProject () { - TargetFrameworkVersion = sb.LatestTargetFrameworkVersion (), ProjectName = libName, IsRelease = true, OtherBuildItems = { @@ -482,13 +446,8 @@ public void CheckWhetherLibcAndLibmAreReferencedInAOTLibraries () proj.SetAndroidSupportedAbis (abis); var libPaths = new List (); - if (Builder.UseDotNet) { - libPaths.Add (Path.Combine ("android-arm64", "aot", "Mono.Android.dll.so")); - libPaths.Add (Path.Combine ("android-x64", "aot", "Mono.Android.dll.so")); - } else { - libPaths.Add (Path.Combine ("aot", "arm64-v8a", "libaot-Mono.Android.dll.so")); - libPaths.Add (Path.Combine ("aot", "x86_64", "libaot-Mono.Android.dll.so")); - } + libPaths.Add (Path.Combine ("android-arm64", "aot", "Mono.Android.dll.so")); + libPaths.Add (Path.Combine ("android-x64", "aot", "Mono.Android.dll.so")); using (var b = CreateApkBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 7fb2f61bfd7..a38d5a8299f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -74,15 +74,8 @@ public void BindingLibraryIncremental (string classParser) "GenerateBindings", "_ResolveLibraryProjectImports", "CoreCompile", + "_CreateAar", }; - if (Builder.UseDotNet) { - targets.Add ("_CreateAar"); - } else { - targets.Add ("_CreateBindingResourceArchive"); - //TODO: .NET 5+ cannot support javadoc yet, due to missing mdoc - targets.Add ("_ExtractJavaDocJars"); - targets.Add ("BuildDocumentation"); - } var proj = new XamarinAndroidBindingProject () { IsRelease = true, @@ -102,7 +95,7 @@ public void BindingLibraryIncremental (string classParser) } //TODO: see https://github.com/dotnet/msbuild/issues/6609 - if (!Builder.UseDotNet) { + if (false) { //A list of properties we check exist in binding projects var properties = new [] { "AndroidSdkBuildToolsVersion", @@ -155,7 +148,6 @@ public void CleanBasicBindingLibrary (string classParser) public void BuildAarBindingLibraryStandalone (string classParser) { var proj = new XamarinAndroidBindingProject () { - UseLatestPlatformSdk = true, IsRelease = true, }; proj.Jars.Add (new AndroidItem.AndroidLibrary ("Jars\\material-menu-1.1.0.aar") { @@ -164,9 +156,7 @@ public void BuildAarBindingLibraryStandalone (string classParser) proj.AndroidClassParser = classParser; using (var b = CreateDllBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - if (Builder.UseDotNet) { - FileAssert.Exists (Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, "material-menu-1.1.0.aar")); - } + FileAssert.Exists (Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, "material-menu-1.1.0.aar")); } } @@ -175,7 +165,6 @@ public void BuildAarBindingLibraryStandalone (string classParser) public void BuildAarBindigLibraryWithNuGetPackageOfJar (string classParser) { var proj = new XamarinAndroidBindingProject () { - UseLatestPlatformSdk = true, IsRelease = true, }; proj.PackageReferences.Add (KnownPackages.AndroidSupportV4_27_0_2_1); @@ -201,7 +190,6 @@ public void BuildAarBindigLibraryWithNuGetPackageOfJar (string classParser) public void BuildLibraryZipBindigLibraryWithAarOfJar (string classParser) { var proj = new XamarinAndroidBindingProject () { - UseLatestPlatformSdk = true, IsRelease = true, }; proj.AndroidClassParser = classParser; @@ -398,15 +386,13 @@ public void BindingCheckHiddenFiles () FileAssert.Exists (assemblyMap); var libraryProjects = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "lp"); var assemblyIdentityMap = b.Output.GetAssemblyMapCache (); - var assemblyIdentityName = Builder.UseDotNet ? "mylibrary.aar" : $"{binding.ProjectName}.dll"; + var assemblyIdentityName = "mylibrary.aar"; var assemblyIdentity = assemblyIdentityMap.IndexOf (assemblyIdentityName).ToString (); var dsStorePath = Path.Combine (libraryProjects, assemblyIdentity, "jl"); DirectoryAssert.Exists (dsStorePath); FileAssert.DoesNotExist (Path.Combine (dsStorePath, ".DS_Store")); DirectoryAssert.DoesNotExist (Path.Combine (dsStorePath, "_MACOSX")); - var svgJar = Builder.UseDotNet ? - Path.Combine (libraryProjects, assemblyIdentityMap.IndexOf ($"{binding.ProjectName}.aar").ToString (), "jl", "libs", "FD575F2BC294C4A9.jar") : - Path.Combine (dsStorePath, "svg-android.jar"); + var svgJar = Path.Combine (libraryProjects, assemblyIdentityMap.IndexOf ($"{binding.ProjectName}.aar").ToString (), "jl", "libs", "FD575F2BC294C4A9.jar"); FileAssert.Exists (svgJar); } } @@ -651,7 +637,6 @@ public void BindDefaultInterfaceMethods (string classParser) proj.SetProperty ("LangVersion", "preview"); using (var b = CreateDllBuilder ()) { - proj.NuGetRestore (b.ProjectDirectory); Assert.IsTrue (b.Build (proj), "Build should have succeeded."); string asmpath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.dll"); @@ -681,8 +666,6 @@ public void NothingToBind (string classParser) [Test] public void BindingWithAndroidJavaSource () { - if (!Builder.UseDotNet) - Assert.Ignore ("This Feature and Test is not available in Legacy Projects"); var path = Path.Combine ("temp", TestName); var lib = new XamarinAndroidBindingProject () { ProjectName = "BindingsProject", @@ -732,10 +715,7 @@ public void BindingWithAndroidJavaSource () var hash = Files.HashString (Path.Combine (lib.IntermediateOutputPath, "binding", "bin", $"{lib.ProjectName}.jar").Replace ("\\", "/")); var intermediate = Path.Combine (Root, appBuilder.ProjectDirectory, app.IntermediateOutputPath); - var lpPath = Path.Combine ("0", "jl", $"{lib.ProjectName}.jar"); - if (Builder.UseDotNet) { - lpPath = Path.Combine ("1", "jl", "libs", $"{hash}.jar"); - } + var lpPath = Path.Combine ("1", "jl", "libs", $"{hash}.jar"); var jar = Path.Combine (intermediate, "lp", lpPath); FileAssert.Exists (jar, $"'{jar}' should have been generated."); var dexFile = Path.Combine (intermediate, "android", "bin", "classes.dex"); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildAssetsTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildAssetsTest.cs index 00c410f2f17..734848651bd 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildAssetsTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildAssetsTest.cs @@ -58,9 +58,8 @@ public void CheckPostCompileAssetsIncludedInAPK () } [Test] - public void CheckAssetsAreIncludedInAPK ([Values (true, false)] bool useAapt2) + public void CheckAssetsAreIncludedInAPK () { - AssertAaptSupported (useAapt2); var projectPath = Path.Combine ("temp", TestName); var libproj = new XamarinAndroidLibraryProject () { ProjectName = "Library1", @@ -106,7 +105,6 @@ public void CheckAssetsAreIncludedInAPK ([Values (true, false)] bool useAapt2) }, } }; - proj.AndroidUseAapt2 = useAapt2; proj.References.Add (new BuildItem ("ProjectReference", "..\\Library1\\Library1.csproj")); using (var libb = CreateDllBuilder (Path.Combine (projectPath, libproj.ProjectName))) { Assert.IsTrue (libb.Build (libproj), "{0} should have built successfully.", libproj.ProjectName); @@ -151,19 +149,12 @@ public void FullPath () using (var b = CreateDllBuilder (Path.Combine ("temp", TestName, "SubDir"))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); var libraryProjectImports = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "__AndroidLibraryProjects__.zip"); - if (Builder.UseDotNet) { - var aarPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.aar"); - FileAssert.Exists (aarPath); - using (var aar = ZipHelper.OpenZip (aarPath)) { - aar.AssertEntryContents (aarPath, "assets/foo.txt", contents: "bar"); - } - FileAssert.DoesNotExist (libraryProjectImports); - } else { - FileAssert.Exists (libraryProjectImports); - using (var zip = ZipHelper.OpenZip (libraryProjectImports)) { - zip.AssertEntryContents (libraryProjectImports, "library_project_imports/assets/foo.txt", contents: "bar"); - } + var aarPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.aar"); + FileAssert.Exists (aarPath); + using (var aar = ZipHelper.OpenZip (aarPath)) { + aar.AssertEntryContents (aarPath, "assets/foo.txt", contents: "bar"); } + FileAssert.DoesNotExist (libraryProjectImports); } } } 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 cd269edafe0..e21148e9887 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 @@ -196,11 +196,6 @@ public void DotNetBuild (string runtimeIdentifiers, bool isRelease, bool aot, bo [TestCaseSource (nameof (MonoComponentMaskChecks))] public void CheckMonoComponentsMask (bool enableProfiler, bool useInterpreter, bool debugBuild, uint expectedMask) { - if (!Builder.UseDotNet) { - Assert.Ignore ("Valid only for NET6+ builds"); - return; - } - var proj = new XamarinFormsAndroidApplicationProject () { IsRelease = !debugBuild, }; @@ -308,7 +303,7 @@ public void SmokeTestBuildWithSpecialCharacters ([Values (false, true)] bool for public static string GetLinkedPath (ProjectBuilder builder, bool isRelease, string filename) { - return Builder.UseDotNet && isRelease ? + return isRelease ? builder.Output.GetIntermediaryPath (Path.Combine ("android-arm64", "linked", filename)) : builder.Output.GetIntermediaryPath (Path.Combine ("android", "assets", filename)); } @@ -338,19 +333,6 @@ public void CheckWhichRuntimeIsIncluded (string supportedAbi, bool debugSymbols, var inApk = ZipHelper.ReadFileFromZip (apk, $"lib/{supportedAbi}/{runtime.Name}"); var inApkRuntime = runtimeInfo.FirstOrDefault (x => x.Abi == supportedAbi && x.Size == inApk.Length); Assert.IsNotNull (inApkRuntime, "Could not find the actual runtime used."); - // TODO: file sizes will not match for .NET 5 - // TODO: libmono-profiler-log.so is not available in .NET 5 yet - if (!Builder.UseDotNet) { - Assert.AreEqual (runtime.Size, inApkRuntime.Size, "expected {0} got {1}", expectedRuntime, inApkRuntime.Runtime); - inApk = ZipHelper.ReadFileFromZip (apk, $"lib/{supportedAbi}/libmono-profiler-log.so"); - if (string.Compare (expectedRuntime, "debug", StringComparison.OrdinalIgnoreCase) == 0) { - if (inApk == null) - Assert.Fail ("libmono-profiler-log.so should exist in the apk."); - } else { - if (inApk != null) - Assert.Fail ("libmono-profiler-log.so should not exist in the apk."); - } - } } } } @@ -396,9 +378,6 @@ public void CheckItemMetadata ([Values (true, false)] bool isRelease) [Test] public void CheckLogicalNamePathSeperators ([Values (false, true)] bool isRelease, [Values (false, true)] bool useDesignerAssembly) { - if (useDesignerAssembly && !Builder.UseDotNet) { - Assert.Ignore ($"Skipping, {useDesignerAssembly} not supported in Legacy."); - } var illegalSeperator = IsWindows ? "/" : @"\"; var dll = new XamarinAndroidLibraryProject () { ProjectName = "Library1", @@ -487,9 +466,8 @@ public void ExtraAaptManifest () } [Test] - public void AarContentExtraction ([Values (false, true)] bool useAapt2) + public void AarContentExtraction () { - AssertAaptSupported (useAapt2); var aar = new AndroidItem.AndroidAarLibrary ("Jars\\android-crop-1.0.1.aar") { // https://mvnrepository.com/artifact/com.soundcloud.android/android-crop/1.0.1 WebContent = "https://repo1.maven.org/maven2/com/soundcloud/android/android-crop/1.0.1/android-crop-1.0.1.aar" @@ -502,7 +480,6 @@ public void AarContentExtraction ([Values (false, true)] bool useAapt2) } }, }; - proj.AndroidUseAapt2 = useAapt2; using (var builder = CreateApkBuilder ()) { Assert.IsTrue (builder.Build (proj), "Build should have succeeded"); var cache = builder.Output.GetIntermediaryPath ("libraryprojectimports.cache"); @@ -807,12 +784,9 @@ public void IfAndroidJarDoesNotExistThrowXA5207 () var AndroidSdkDirectory = CreateFauxAndroidSdkDirectory (Path.Combine (path, "android-sdk"), "24.0.1", new ApiInfo [] { new ApiInfo { Id = "30" } }); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, - UseLatestPlatformSdk = false, }; using (var builder = CreateApkBuilder (Path.Combine (path, proj.ProjectName), false, false)) { - if (!Builder.UseDotNet) - proj.TargetFrameworkVersion = builder.LatestTargetFrameworkVersion (); builder.ThrowOnBuildFailure = false; Assert.IsTrue (builder.DesignTimeBuild (proj), "DesignTime build should succeed."); Assert.IsFalse (builder.LastBuildOutput.ContainsText ("error XA5207:"), "XA5207 should not have been raised."); @@ -1106,9 +1080,8 @@ class MonoPackageManager_Resources { }"); public class ApplicationRegistration { }"); var oldMonoPackageManagerClass = Path.Combine (intermediate, "android", "bin", "classes" , "mono", "MonoPackageManager.class"); File.WriteAllText (oldMonoPackageManagerClass, ""); - // Change $(XamarinAndroidVersion) to trigger _CleanIntermediateIfNeeded - var property = Builder.UseDotNet ? "AndroidNETSdkVersion" : "XamarinAndroidVersion"; - Assert.IsTrue (b.Build (proj, parameters: new [] { $"{property}=99.99" }, doNotCleanupOnUpdate: true), "Build should have succeeded."); + // Change $(AndroidNETSdkVersion) to trigger _CleanIntermediateIfNeeded + Assert.IsTrue (b.Build (proj, parameters: new [] { "AndroidNETSdkVersion=99.99" }, doNotCleanupOnUpdate: true), "Build should have succeeded."); foreach (var target in targets) { Assert.IsFalse (b.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped."); } @@ -1186,8 +1159,7 @@ public MyWorker (Context c, WorkerParameters p) : base (c, p) { } } " }); - proj.PackageReferences.Add ( - Builder.UseDotNet ? KnownPackages.AndroidXWorkRuntime : KnownPackages.Android_Arch_Work_Runtime); + proj.PackageReferences.Add (KnownPackages.AndroidXWorkRuntime); using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); } @@ -1275,10 +1247,8 @@ public void PackageNamingPolicy ([Values ("LowercaseMD5", "LowercaseCrc64")] str var values = new List { $"__XA_PACKAGE_NAMING_POLICY__={packageNamingPolicy}" }; - if (Builder.UseDotNet) { - values.Add ("mono.enable_assembly_preload=0"); - values.Add ("DOTNET_MODIFIABLE_ASSEMBLIES=Debug"); - } + values.Add ("mono.enable_assembly_preload=0"); + values.Add ("DOTNET_MODIFIABLE_ASSEMBLIES=Debug"); Assert.AreEqual (string.Join (Environment.NewLine, values), File.ReadAllText (environment).Trim ()); } } @@ -1341,16 +1311,13 @@ public void XA4313 ([Values ("OpenTK-1.0", "Xamarin.Android.NUnitLite")] string new BuildItem.Reference (reference) }, }; - bool shouldSucceed = !Builder.UseDotNet; - string expectedText = shouldSucceed ? "succeeded" : "FAILED"; - string warnOrError = shouldSucceed ? "warning" : "error"; using (var builder = CreateApkBuilder ()) { builder.ThrowOnBuildFailure = false; - Assert.AreEqual (shouldSucceed, builder.Build (proj), $"Build should have {expectedText}."); + Assert.IsFalse (builder.Build (proj), $"Build should have failed."); string error = builder.LastBuildOutput - .SkipWhile (x => !x.StartsWith ($"Build {expectedText}.", StringComparison.Ordinal)) - .FirstOrDefault (x => x.Contains ($"{warnOrError} XA4313")); - Assert.IsNotNull (error, $"Build should have {expectedText} with XA4313 {warnOrError}."); + .SkipWhile (x => !x.StartsWith ($"Build FAILED.", StringComparison.Ordinal)) + .FirstOrDefault (x => x.Contains ("error XA4313")); + Assert.IsNotNull (error, $"Build should have failed with XA4313."); } } @@ -1473,7 +1440,6 @@ public void CheckLintErrorsAndWarnings () KnownPackages.SupportConstraintLayout_1_0_2_2, }, }; - proj.UseLatestPlatformSdk = false; proj.SetProperty ("AndroidLintEnabled", true.ToString ()); proj.SetProperty ("AndroidLintDisabledIssues", disabledIssues); proj.SetProperty ("AndroidLintEnabledIssues", ""); @@ -1504,8 +1470,7 @@ public class MainActivity : Activity }); using (var b = CreateApkBuilder ("temp/CheckLintErrorsAndWarnings", cleanupOnDispose: false)) { int maxApiLevel = AndroidSdkResolver.GetMaxInstalledPlatform (); - string apiLevel; - proj.TargetFrameworkVersion = b.LatestTargetFrameworkVersion (out apiLevel); + b.LatestTargetFrameworkVersion (out string apiLevel); if (int.TryParse (apiLevel, out int a) && a < maxApiLevel) disabledIssues += ",OldTargetApi"; proj.SetProperty ("AndroidLintDisabledIssues", disabledIssues); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs index 07496091a8a..2a52a44cea6 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest2.cs @@ -24,53 +24,36 @@ public partial class BuildTest2 : BaseTest { static object [] MarshalMethodsDefaultStatusSource = new object [] { new object[] { - /* isClassic */ false, /* isRelease */ true, /* marshalMethodsEnabled */ false, }, new object[] { - /* isClassic */ false, - /* isRelease */ false, - /* marshalMethodsEnabled */ false, + /* isRelease */ true, + /* marshalMethodsEnabled */ true, }, new object[] { - /* isClassic */ true, /* isRelease */ false, - /* marshalMethodsEnabled */ false, - }, - new object[] { - /* isClassic */ true, - /* isRelease */ true, - /* marshalMethodsEnabled */ false, + /* marshalMethodsEnabled */ true, }, }; [Test] [TestCaseSource (nameof (MarshalMethodsDefaultStatusSource))] - public void MarshalMethodsDefaultEnabledStatus (bool isClassic, bool isRelease, bool marshalMethodsEnabled) + public void MarshalMethodsDefaultEnabledStatus (bool isRelease, bool marshalMethodsEnabled) { - if (isClassic) { - if (Builder.UseDotNet) { - Assert.Ignore ("Ignored in .NET6+"); - return; - } - } else if (!Builder.UseDotNet) { - Assert.Ignore ("Ignored in classic"); - return; - } - var abis = new [] { "armeabi-v7a", "x86" }; var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease }; - + proj.SetProperty (KnownProperties.AndroidEnableMarshalMethods, marshalMethodsEnabled.ToString ()); proj.SetAndroidSupportedAbis (abis); + bool shouldMarshalMethodsBeEnabled = isRelease && marshalMethodsEnabled; using (var b = CreateApkBuilder ()) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); Assert.IsTrue ( - StringAssertEx.ContainsText (b.LastBuildOutput, $"_AndroidUseMarshalMethods = {marshalMethodsEnabled}"), - $"The '_AndroidUseMarshalMethods' MSBuild property should have had the value of '{marshalMethodsEnabled}'" + StringAssertEx.ContainsText (b.LastBuildOutput, $"_AndroidUseMarshalMethods = {shouldMarshalMethodsBeEnabled}"), + $"The '_AndroidUseMarshalMethods' MSBuild property should have had the value of '{shouldMarshalMethodsBeEnabled}'" ); string objPath = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); @@ -78,7 +61,7 @@ public void MarshalMethodsDefaultEnabledStatus (bool isClassic, bool isRelease, EnvironmentHelper.ApplicationConfig app_config = EnvironmentHelper.ReadApplicationConfig (envFiles); Assert.That (app_config, Is.Not.Null, "application_config must be present in the environment files"); - Assert.AreEqual (app_config.marshal_methods_enabled, marshalMethodsEnabled, $"Marshal methods enabled status should be '{marshalMethodsEnabled}', but it was '{app_config.marshal_methods_enabled}'"); + Assert.AreEqual (app_config.marshal_methods_enabled, shouldMarshalMethodsBeEnabled, $"Marshal methods enabled status should be '{shouldMarshalMethodsBeEnabled}', but it was '{app_config.marshal_methods_enabled}'"); } } @@ -94,22 +77,11 @@ public void CompressedWithoutLinker () } } - public static string [] SupportedTargetFrameworks () - { - using (var b = new Builder ()) { - if (Builder.UseDotNet) - return new string [] { b.LatestTargetFrameworkVersion () }; - else - return b.GetAllSupportedTargetFrameworkVersions (); - } - } - [Test] - public void BuildBasicApplication ([ValueSource (nameof (SupportedTargetFrameworks))] string tfv, [Values (true, false)] bool isRelease, [Values ("", "en_US.UTF-8", "sv_SE.UTF-8")] string langEnvironmentVariable) + public void BuildBasicApplication ([Values (true, false)] bool isRelease, [Values ("", "en_US.UTF-8", "sv_SE.UTF-8")] string langEnvironmentVariable) { var proj = new XamarinAndroidApplicationProject { IsRelease = isRelease, - TargetFrameworkVersion = tfv, }; Dictionary envvar = null; @@ -158,7 +130,7 @@ public void BuildBasicApplicationThenMoveIt ([Values (true, false)] bool isRelea public static string GetLinkedPath (ProjectBuilder builder, bool isRelease, string filename) { - return Builder.UseDotNet && isRelease ? + return isRelease ? builder.Output.GetIntermediaryPath (Path.Combine ("android-arm64", "linked", filename)) : builder.Output.GetIntermediaryPath (Path.Combine ("android", "assets", filename)); } @@ -181,7 +153,7 @@ public void BuildReleaseArm64 ([Values (false, true)] bool forms) } byte [] apkDescData; - var flavor = (forms ? "XForms" : "Simple") + (Builder.UseDotNet ? "DotNet" : "Legacy"); + var flavor = (forms ? "XForms" : "Simple") + "DotNet"; var apkDescFilename = $"BuildReleaseArm64{flavor}.apkdesc"; var apkDescReference = "reference.apkdesc"; using (var stream = typeof (XamarinAndroidApplicationProject).Assembly.GetManifestResourceStream ($"Xamarin.ProjectTools.Resources.Base.{apkDescFilename}")) { @@ -194,9 +166,7 @@ public void BuildReleaseArm64 ([Values (false, true)] bool forms) using (var b = BuildHelper.CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - var depsFile = Builder.UseDotNet - ? GetLinkedPath (b, true, "linker-dependencies.xml") - : Path.Combine (proj.Root, b.ProjectDirectory, "linker-dependencies.xml.gz"); + var depsFile = GetLinkedPath (b, true, "linker-dependencies.xml"); FileAssert.Exists (depsFile); const int ApkSizeThreshold = 5 * 1024; @@ -204,10 +174,8 @@ public void BuildReleaseArm64 ([Values (false, true)] bool forms) const int ApkPercentChangeThreshold = 3; const int FilePercentChangeThreshold = 5; var regressionCheckArgs = $"--test-apk-size-regression={ApkSizeThreshold} --test-assembly-size-regression={AssemblySizeThreshold}"; - // Make .NET 6 checks more lenient during previews. Report if any files increase by more than 5% or if the package size increases by more than 3% - if (Builder.UseDotNet) { - regressionCheckArgs = $"--test-apk-percentage-regression=\"{ApkPercentChangeThreshold}\" --test-content-percentage-regression=\"{FilePercentChangeThreshold}\""; - } + //TODO Only make these checks more lenient during early previews. Report if any files increase by more than 5% or if the package size increases by more than 3% + regressionCheckArgs = $"--test-apk-percentage-regression=\"{ApkPercentChangeThreshold}\" --test-content-percentage-regression=\"{FilePercentChangeThreshold}\""; var apkFile = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, proj.PackageName + "-Signed.apk"); var apkDescPath = Path.Combine (Root, apkDescFilename); var apkDescReferencePath = Path.Combine (Root, b.ProjectDirectory, apkDescReference); @@ -279,9 +247,6 @@ public void BuildHasNoWarnings (bool isRelease, bool xamarinForms, bool multidex proj.PackageReferences.Add (new Package { Id = "BenchmarkDotNet", Version = "0.13.1" }); proj.SetProperty ("XamarinAndroidSupportSkipVerifyVersions", "True"); // Disables API 29 warning in Xamarin.Build.Download proj.SetProperty ("AndroidPackageFormat", packageFormat); - if (proj.IsRelease = isRelease && !Builder.UseDotNet) { - proj.SetProperty ("MonoSymbolArchive", "True"); - } using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); b.AssertHasNoWarnings (); @@ -305,24 +270,10 @@ public void ClassLibraryHasNoWarnings () b.AssertHasNoWarnings (); // $(AndroidEnableMultiDex) should not add android-support-multidex.jar! - if (Builder.UseDotNet) { - var aarPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.aar"); - using var zip = Xamarin.Tools.Zip.ZipArchive.Open (aarPath, FileMode.Open); - Assert.IsFalse (zip.Any (e => e.FullName.EndsWith (".jar", StringComparison.OrdinalIgnoreCase)), - $"{aarPath} should not contain a .jar file!"); - } else { - var assemblyPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.dll"); - using var assembly = AssemblyDefinition.ReadAssembly (assemblyPath); - const string libraryProjects = "__AndroidLibraryProjects__.zip"; - var resource = assembly.MainModule.Resources.OfType () - .FirstOrDefault (e => e.Name == libraryProjects); - Assert.IsNotNull (resource, $"{assemblyPath} should contain {libraryProjects}"); - - using var stream = resource.GetResourceStream (); - using var zip = Xamarin.Tools.Zip.ZipArchive.Open (stream); - Assert.IsFalse (zip.Any (e => e.FullName.EndsWith (".jar", StringComparison.OrdinalIgnoreCase)), - $"{resource.Name} should not contain a .jar file!"); - } + var aarPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.aar"); + using var zip = Xamarin.Tools.Zip.ZipArchive.Open (aarPath, FileMode.Open); + Assert.IsFalse (zip.Any (e => e.FullName.EndsWith (".jar", StringComparison.OrdinalIgnoreCase)), + $"{aarPath} should not contain a .jar file!"); } } @@ -398,25 +349,11 @@ public void BuildBasicApplicationFSharp (bool isRelease, bool aot) [Test] [NonParallelizable] - public void BuildBasicApplicationAppCompat ([Values (true, false)] bool usePackageReference) + public void BuildBasicApplicationAppCompat () { - if (Builder.UseDotNet && !usePackageReference) { - Assert.Ignore ("'packages.config' is not supported in .NET 5+."); - } - var proj = new XamarinAndroidApplicationProject (); - var packages = usePackageReference ? proj.PackageReferences : proj.Packages; + var packages = proj.PackageReferences; packages.Add (KnownPackages.SupportV7AppCompat_27_0_2_1); - // packages.config needs every dependency listed - if (!usePackageReference) { - packages.Add (KnownPackages.Android_Arch_Core_Common_26_1_0); - packages.Add (KnownPackages.Android_Arch_Lifecycle_Common_26_1_0); - packages.Add (KnownPackages.Android_Arch_Lifecycle_Runtime_26_1_0); - packages.Add (KnownPackages.SupportFragment_27_0_2_1); - packages.Add (KnownPackages.SupportCompat_27_0_2_1); - packages.Add (KnownPackages.SupportCoreUI_27_0_2_1); - packages.Add (KnownPackages.SupportCoreUtils_27_0_2_1); - } proj.MainActivity = proj.DefaultMainActivity.Replace ("public class MainActivity : Activity", "public class MainActivity : Android.Support.V7.App.AppCompatActivity"); using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "Build should have succeeded."); @@ -527,27 +464,12 @@ public void BuildXamarinFormsMapsApplication ([Values (true, false)] bool multid } } - [Test, Ignore ("Deprecated CodeAnalysis feature is broken in 16.8: https://developercommunity.visualstudio.com/solutions/1255925/view.html")] - public void CodeAnalysis () - { - var proj = new XamarinAndroidApplicationProject { - IsRelease = true - }; - proj.SetProperty ("RunCodeAnalysis", "True"); - using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { - b.Target = "Build"; - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - } - } - [Test] [NonParallelizable] - public void SkipConvertResourcesCases ([Values (false, true)] bool useAapt2) + public void SkipConvertResourcesCases () { - AssertAaptSupported (useAapt2); var target = "ConvertResourcesCases"; var proj = new XamarinFormsAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; proj.OtherBuildItems.Add (new BuildItem ("AndroidAarLibrary", "Jars\\material-menu-1.1.0.aar") { WebContent = "https://repo1.maven.org/maven2/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar" }); @@ -591,26 +513,14 @@ public void SkipConvertResourcesCases ([Values (false, true)] bool useAapt2) var files = new List { "material-menu-1.1.0.aar", }; - // .NET 6 tests use AndroidX, others use Support - if (Builder.UseDotNet) { - files.Add ("androidx.core.core.aar"); - files.Add ("androidx.transition.transition.aar"); - files.Add ("androidx.recyclerview.recyclerview.aar"); - files.Add ("androidx.coordinatorlayout.coordinatorlayout.aar"); - files.Add ("androidx.cardview.cardview.aar"); - files.Add ("androidx.appcompat.appcompat-resources.aar"); - files.Add ("androidx.appcompat.appcompat.aar"); - files.Add ("com.google.android.material.material.aar"); - } else { - files.Add ("Xamarin.Android.Support.Compat.dll"); - files.Add ("Xamarin.Android.Support.Design.dll"); - files.Add ("Xamarin.Android.Support.Media.Compat.dll"); - files.Add ("Xamarin.Android.Support.Transition.dll"); - files.Add ("Xamarin.Android.Support.v7.AppCompat.dll"); - files.Add ("Xamarin.Android.Support.v7.CardView.dll"); - files.Add ("Xamarin.Android.Support.v7.MediaRouter.dll"); - files.Add ("Xamarin.Android.Support.v7.RecyclerView.dll"); - } + files.Add ("androidx.core.core.aar"); + files.Add ("androidx.transition.transition.aar"); + files.Add ("androidx.recyclerview.recyclerview.aar"); + files.Add ("androidx.coordinatorlayout.coordinatorlayout.aar"); + files.Add ("androidx.cardview.cardview.aar"); + files.Add ("androidx.appcompat.appcompat-resources.aar"); + files.Add ("androidx.appcompat.appcompat.aar"); + files.Add ("com.google.android.material.material.aar"); foreach (var file in files) { Assert.IsTrue (StringAssertEx.ContainsText (skipped, file), $"`{target}` should skip `{file}`."); } @@ -632,7 +542,6 @@ public void BuildInParallel () //We don't want these things stepping on each other b.BuildLogFile = null; b.Save (proj, saveProject: true); - proj.NuGetRestore (Path.Combine (Root, b.ProjectDirectory), b.PackagesDirectory); Parallel.For (0, 5, i => { try { @@ -822,7 +731,6 @@ public void TargetFrameworkMonikerAssemblyAttributesPath () const string filePattern = ".NETCoreApp,Version=*.AssemblyAttributes.cs"; var proj = new XamarinAndroidApplicationProject { }; - proj.SetProperty ("AndroidUseLatestPlatformSdk", "True"); using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "build should have succeeded."); @@ -858,7 +766,7 @@ public void CheckTimestamps ([Values (true, false)] bool isRelease) foreach (var file in files) { //NOTE: ILLink from the dotnet/sdk currently copies assemblies with older timestamps, and only $(_LinkSemaphore) is touched //see: https://github.com/dotnet/sdk/blob/a245b6ff06b483927e57d953b803a390ad31db95/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.ILLink.targets#L113-L116 - if (Builder.UseDotNet && Directory.GetParent (file).Name == "linked") { + if (Directory.GetParent (file).Name == "linked") { continue; } var info = new FileInfo (file); @@ -975,10 +883,8 @@ public void BuildApplicationWithLibraryAndClean ([Values (false, true)] bool isR public void BuildIncrementingAssemblyVersion () { var proj = new XamarinAndroidApplicationProject (); - if (Builder.UseDotNet) { - proj.SetProperty ("GenerateAssemblyInfo", "false"); - proj.SetProperty ("Deterministic", "false"); // Required for AssemblyVersion wildcards - } + proj.SetProperty ("GenerateAssemblyInfo", "false"); + proj.SetProperty ("Deterministic", "false"); // Required for AssemblyVersion wildcards proj.Sources.Add (new BuildItem ("Compile", "AssemblyInfo.cs") { TextContent = () => "[assembly: System.Reflection.AssemblyVersion (\"1.0.0.*\")]" }); @@ -1103,9 +1009,6 @@ public void BuildProguardEnabledProject (bool isRelease, string linkTool, string LinkTool = linkTool, }; if (!string.IsNullOrEmpty (rid)) { - if (!Builder.UseDotNet) { - Assert.Ignore ("Skipping test, as it is valid for .NET 6+ only."); - } proj.SetProperty ("RuntimeIdentifier", rid); } using (var b = CreateApkBuilder (Path.Combine ("temp", $"BuildProguard Enabled(1){isRelease}{linkTool}{rid}"))) { @@ -1118,7 +1021,7 @@ public void BuildProguardEnabledProject (bool isRelease, string linkTool, string intermediate = Path.Combine (intermediate, rid); } - var toolbar_class = Builder.UseDotNet ? "androidx.appcompat.widget.Toolbar" : "android.support.v7.widget.Toolbar"; + var toolbar_class = "androidx.appcompat.widget.Toolbar"; if (isRelease && !string.IsNullOrEmpty (linkTool)) { var proguardProjectPrimary = Path.Combine (intermediate, "proguard", "proguard_project_primary.cfg"); FileAssert.Exists (proguardProjectPrimary); @@ -1181,28 +1084,12 @@ public void CreateMultiDexWithSpacesInConfig () public void BuildMultiDexApplication () { var proj = CreateMultiDexRequiredApplication (); - proj.UseLatestPlatformSdk = false; proj.SetProperty ("AndroidEnableMultiDex", "True"); - if (IsWindows && !Builder.UseDotNet) { - proj.SetProperty ("AppendTargetFrameworkToIntermediateOutputPath", "True"); - } - using (var b = CreateApkBuilder (Path.Combine ("temp", TestName), false, false)) { - string intermediateDir; - if (IsWindows && !Builder.UseDotNet) { - intermediateDir = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, proj.TargetFrameworkAbbreviated); - } else { - intermediateDir = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); - } + string intermediateDir = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); Assert.IsTrue (b.Build (proj), "Build should have succeeded."); Assert.IsTrue (File.Exists (Path.Combine (Root, b.ProjectDirectory, intermediateDir, "android/bin/classes.dex")), "multidex-ed classes.zip exists"); - if (!Builder.UseDotNet) { - var multidexKeepPath = Path.Combine (Root, b.ProjectDirectory, intermediateDir, "multidex.keep"); - Assert.IsTrue (File.Exists (multidexKeepPath), "multidex.keep exists"); - Assert.IsTrue (File.ReadAllLines (multidexKeepPath).Length > 1, "multidex.keep must contain more than one line."); - Assert.IsTrue (b.LastBuildOutput.ContainsText (Path.Combine (proj.TargetFrameworkVersion, "mono.android.jar")), proj.TargetFrameworkVersion + "/mono.android.jar should be used."); - } Assert.IsFalse (b.LastBuildOutput.ContainsText ("Duplicate zip entry"), "Should not get warning about [META-INF/MANIFEST.MF]"); } } @@ -1463,13 +1350,7 @@ public void BuildBasicApplicationCheckConfigFiles () }; proj.OtherBuildItems.Add (config); Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - if (Builder.UseDotNet) { - StringAssertEx.Contains ("XA1024", b.LastBuildOutput, "Output should contain XA1024 warnings"); - } else { - FileAssert.Exists (Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android/assets/UnnamedProject.dll.config")); - Assert.IsTrue (b.Build (proj), "second build failed"); - b.Output.AssertTargetIsSkipped ("_CopyConfigFiles"); - } + StringAssertEx.Contains ("XA1024", b.LastBuildOutput, "Output should contain XA1024 warnings"); } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs index d1c8b1cefa4..c676d57e1a5 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs @@ -385,14 +385,6 @@ public void BuildWithNativeLibraries ([Values (true, false)] bool isRelease) } }; proj.SetAndroidSupportedAbis ("armeabi-v7a", "x86"); - if (!Builder.UseDotNet) { - //NOTE: Mono.Data.Sqlite and Mono.Posix do not exist in .NET 5+ - proj.References.Add (new BuildItem.Reference ("Mono.Data.Sqlite")); - proj.References.Add (new BuildItem.Reference ("Mono.Posix")); - proj.MainActivity = proj.DefaultMainActivity.Replace ("int count = 1;", @"int count = 1; -Mono.Data.Sqlite.SqliteConnection connection = null; -Mono.Unix.UnixFileInfo fileInfo = null;"); - } var path = Path.Combine (Root, "temp", string.Format ("BuildWithNativeLibraries_{0}", isRelease)); using (var b1 = CreateDllBuilder (Path.Combine (path, dll2.ProjectName))) { Assert.IsTrue (b1.Build (dll2), "Build should have succeeded."); @@ -416,25 +408,10 @@ public void BuildWithNativeLibraries ([Values (true, false)] bool isRelease) Assert.IsNotNull (data, "libtest1.so for armeabi-v7a should exist in the apk."); data = ZipHelper.ReadFileFromZip (zipFile, "lib/armeabi-v7a/libRSSupport.so"); Assert.IsNotNull (data, "libRSSupport.so for armeabi-v7a should exist in the apk."); - if (Builder.UseDotNet) { - data = ZipHelper.ReadFileFromZip (zipFile, "lib/x86/libSystem.Native.so"); - Assert.IsNotNull (data, "libSystem.Native.so for x86 should exist in the apk."); - data = ZipHelper.ReadFileFromZip (zipFile, "lib/armeabi-v7a/libSystem.Native.so"); - Assert.IsNotNull (data, "libSystem.Native.so for armeabi-v7a should exist in the apk."); - } else { - data = ZipHelper.ReadFileFromZip (zipFile, "lib/x86/libmono-native.so"); - Assert.IsNotNull (data, "libmono-native.so for x86 should exist in the apk."); - data = ZipHelper.ReadFileFromZip (zipFile, "lib/armeabi-v7a/libmono-native.so"); - Assert.IsNotNull (data, "libmono-native.so for armeabi-v7a should exist in the apk."); - data = ZipHelper.ReadFileFromZip (zipFile, "lib/x86/libMonoPosixHelper.so"); - Assert.IsNotNull (data, "libMonoPosixHelper.so for x86 should exist in the apk."); - data = ZipHelper.ReadFileFromZip (zipFile, "lib/armeabi-v7a/libMonoPosixHelper.so"); - Assert.IsNotNull (data, "libMonoPosixHelper.so for armeabi-v7a should exist in the apk."); - data = ZipHelper.ReadFileFromZip (zipFile, "lib/x86/libsqlite3_xamarin.so"); - Assert.IsNotNull (data, "libsqlite3_xamarin.so for x86 should exist in the apk."); - data = ZipHelper.ReadFileFromZip (zipFile, "lib/armeabi-v7a/libsqlite3_xamarin.so"); - Assert.IsNotNull (data, "libsqlite3_xamarin.so for armeabi-v7a should exist in the apk."); - } + data = ZipHelper.ReadFileFromZip (zipFile, "lib/x86/libSystem.Native.so"); + Assert.IsNotNull (data, "libSystem.Native.so for x86 should exist in the apk."); + data = ZipHelper.ReadFileFromZip (zipFile, "lib/armeabi-v7a/libSystem.Native.so"); + Assert.IsNotNull (data, "libSystem.Native.so for armeabi-v7a should exist in the apk."); } } } @@ -618,40 +595,8 @@ public void LibraryProjectsShouldSkipGetPrimaryCpuAbi () } [Test] - public void LibraryReferenceWithHigherTFVShouldDisplayWarning ([Values (true, false)] bool isRelease) - { - - if (!TestEnvironment.CommercialBuildAvailable || Builder.UseDotNet) - Assert.Ignore ("Not applicable to One .NET or single framework OSS builds."); - - var libproj = new XamarinAndroidLibraryProject () { - IsRelease = isRelease, - ProjectName = "Library1", - }; - var proj = new XamarinAndroidApplicationProject () { - IsRelease = isRelease, - ProjectName = "App1", - UseLatestPlatformSdk = false, - TargetFrameworkVersion = "v9.0", - References = { - new BuildItem ("ProjectReference", $"..\\{libproj.ProjectName}\\{Path.GetFileName (libproj.ProjectFilePath)}") - }, - }; - using (var libBuilder = CreateDllBuilder (Path.Combine ("temp", TestName, libproj.ProjectName))) - using (var appBuilder = CreateApkBuilder (Path.Combine ("temp", TestName, proj.ProjectName))) { - Assert.IsTrue (libBuilder.Build (libproj), "Library build should have succeeded."); - Assert.IsTrue (appBuilder.Build (proj), "App build should have succeeded."); - StringAssertEx.Contains ("warning XA0105", appBuilder.LastBuildOutput, "Build should have produced warning XA0105."); - } - } - - [Test] - public void AllResourcesInClassLibrary ([Values (true, false)] bool useAapt2, [Values (false, true)] bool useDesignerAssembly) + public void AllResourcesInClassLibrary ([Values (false, true)] bool useDesignerAssembly) { - if (useDesignerAssembly && !Builder.UseDotNet) { - Assert.Ignore ($"Skipping, {useDesignerAssembly} not supported in Legacy."); - } - AssertAaptSupported (useAapt2); var path = Path.Combine ("temp", TestName); // Create a "library" with all the application stuff in it @@ -665,10 +610,7 @@ public void AllResourcesInClassLibrary ([Values (true, false)] bool useAapt2, [V }; lib.SetProperty ("AndroidApplication", "False"); lib.SetProperty ("AndroidUseDesignerAssembly", useDesignerAssembly.ToString ()); - lib.AndroidUseAapt2 = useAapt2; - if (Builder.UseDotNet) { - lib.RemoveProperty ("OutputType"); - } + lib.RemoveProperty ("OutputType"); lib.AndroidManifest = lib.AndroidManifest. Replace ("application android:label=\"${PROJECT_NAME}\"", "application android:label=\"com.test.foo\" "); @@ -688,14 +630,7 @@ public void AllResourcesInClassLibrary ([Values (true, false)] bool useAapt2, [V }; app.SetProperty ("AndroidUseDesignerAssembly", useDesignerAssembly.ToString ()); app.AndroidResources.Clear (); // No Resources - if (Builder.UseDotNet) { - app.SetProperty (KnownProperties.OutputType, "Exe"); - } else { - app.SetProperty ("AndroidResgenFile", "Resources\\Resource.designer.cs"); - app.SetProperty ("AndroidApplication", "True"); - } - app.AndroidUseAapt2 = useAapt2; - + app.SetProperty (KnownProperties.OutputType, "Exe"); app.References.Add (new BuildItem.ProjectReference ($"..\\{lib.ProjectName}\\{lib.ProjectName}.csproj", lib.ProjectName, lib.ProjectGuid)); using (var libBuilder = CreateDllBuilder (Path.Combine (path, lib.ProjectName))) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs index 6c87875bfa0..b79a61409d8 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs @@ -153,9 +153,7 @@ static CodeBehindTests () TestProjectRootDirectory = Path.GetFullPath (Path.Combine (XABuildPaths.TopDirectory, "tests", "CodeBehind", "BuildTests")); CommonSampleLibraryRootDirectory = Path.GetFullPath (Path.Combine (XABuildPaths.TopDirectory, "tests", "CodeBehind", CommonSampleLibraryName)); TestOutputDir = Path.Combine (XABuildPaths.TestOutputDirectory, "temp", "CodeBehind"); - if (Builder.UseDotNet) { - ProjectName += ".NET"; - } + ProjectName += ".NET"; generated_sources = new List { new SourceFile ("Binding.Main.g.cs") { @@ -272,14 +270,9 @@ static CodeBehindTests () $"{ProjectName}.dll", "CommonSampleLibrary.dll", $"{PackageName}-Signed.apk", + $"{PackageName}.aab", + $"{PackageName}-Signed.aab", }; - - if (!Builder.UseDotNet) { - produced_binaries.Add ($"{PackageName}.apk"); - } else { - produced_binaries.Add ($"{PackageName}.aab"); - produced_binaries.Add ($"{PackageName}-Signed.aab"); - } } [Test] diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DesignerTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DesignerTests.cs index 9285060c65b..236c5c574af 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DesignerTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DesignerTests.cs @@ -152,8 +152,7 @@ public void IncrementalDesignTimeBuild () var resourcepathscache = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "designtime", "libraryprojectimports.cache"); FileAssert.Exists (resourcepathscache); var doc = XDocument.Load (resourcepathscache); - var expected = Builder.UseDotNet ? 37 : 40; - Assert.AreEqual (expected, doc.Root.Element ("Jars").Elements ("Jar").Count (), "libraryprojectimports.cache did not contain expected jar files"); + Assert.AreEqual (37, doc.Root.Element ("Jars").Elements ("Jar").Count (), "libraryprojectimports.cache did not contain expected jar files"); } } @@ -326,9 +325,6 @@ public void DesignerBeforeNuGetRestore ([Values (true, false)] bool restoreInSin var packageManagerPath = Path.Combine (Root, appb.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", "mono", "MonoPackageManager_Resources.java"); var before = GetAssembliesFromPackageManager (packageManagerPath); - if (!Builder.UseDotNet) { - Assert.AreEqual ("\"App1.dll\",", before, $"After first `{appb.Target}`, assemblies list should only have main App dll."); - } // NuGet restore, either with /t:Restore in a separate MSBuild call or /restore in a single call if (restoreInSingleCall) { @@ -341,9 +337,6 @@ public void DesignerBeforeNuGetRestore ([Values (true, false)] bool restoreInSin Assert.IsTrue (appb.Build (proj, parameters: DesignerParameters), "second build should have succeeded"); var after = GetAssembliesFromPackageManager (packageManagerPath); - if (!Builder.UseDotNet) { - Assert.AreNotEqual (before, after, $"After second `{appb.Target}`, assemblies list should *not* be empty."); - } foreach (var assembly in new [] { "Xamarin.Forms.Core.dll", "Xamarin.Forms.Platform.Android.dll" }) { StringAssert.Contains (assembly, after); } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs index 07de52a4b59..1d8ff21e199 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/EnvironmentContentTests.cs @@ -43,10 +43,6 @@ public void BuildApplicationWithMonoEnvironment ([Values ("", "Normal", "Offline using (var appb = CreateApkBuilder (Path.Combine ("temp", TestName, app.ProjectName))) { Assert.IsTrue (libb.Build (lib), "Library build should have succeeded."); Assert.IsTrue (appb.Build (app), "App should have succeeded."); - if (!Builder.UseDotNet) { - //TODO: $(AndroidLinkSkip) is not yet implemented - Assert.IsTrue (StringAssertEx.ContainsText (appb.LastBuildOutput, $"Save assembly: {linkSkip}"), $"{linkSkip} should be saved, and not linked!"); - } string intermediateOutputDir = Path.Combine (Root, appb.ProjectDirectory, app.IntermediateOutputPath); List envFiles = EnvironmentHelper.GatherEnvironmentFiles (intermediateOutputDir, supportedAbis, true); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs index 9c8dfc894e2..b456c4d6ae1 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/IncrementalBuildTest.cs @@ -71,14 +71,12 @@ public class Foo { } [Test] - public void CheckNothingIsDeletedByIncrementalClean ([Values (true, false)] bool enableMultiDex, [Values (true, false)] bool useAapt2) + public void CheckNothingIsDeletedByIncrementalClean ([Values (true, false)] bool enableMultiDex) { - AssertAaptSupported (useAapt2); var path = Path.Combine ("temp", TestName); var proj = new XamarinFormsAndroidApplicationProject () { ProjectName = "App1", IsRelease = true, - AndroidUseAapt2 = useAapt2, }; if (enableMultiDex) proj.SetProperty ("AndroidEnableMultiDex", "True"); @@ -201,22 +199,10 @@ public void LibraryIncrementalBuild () using (var b = CreateDllBuilder ()) { Assert.IsTrue (b.Build (lib), "first build should have succeeded."); var aarPath = Path.Combine (Root, b.ProjectDirectory, lib.OutputPath, $"{lib.ProjectName}.aar"); - if (Builder.UseDotNet) { - FileAssert.Exists (aarPath); - } else { - Assert.IsTrue (b.LastBuildOutput.ContainsText ("LogicalName=__AndroidLibraryProjects__.zip") || - b.LastBuildOutput.ContainsText ("Lib.obj.Debug.__AndroidLibraryProjects__.zip,__AndroidLibraryProjects__.zip"), - "The LogicalName for __AndroidLibraryProjects__.zip should be set."); - } + FileAssert.Exists (aarPath); lib.Touch ("Class1.cs"); Assert.IsTrue (b.Build (lib), "second build should have succeeded."); - if (Builder.UseDotNet) { - FileAssert.Exists (aarPath); - } else { - Assert.IsTrue (b.LastBuildOutput.ContainsText ("LogicalName=__AndroidLibraryProjects__.zip") || - b.LastBuildOutput.ContainsText ("Lib.obj.Debug.__AndroidLibraryProjects__.zip,__AndroidLibraryProjects__.zip"), - "The LogicalName for __AndroidLibraryProjects__.zip should be set."); - } + FileAssert.Exists (aarPath); } } @@ -402,11 +388,6 @@ public Class2 () Assert.IsNotNull (libfoo, "libfoo.so should exist in the .apk"); - if (!Builder.UseDotNet) { - Assert.AreEqual (so.TextContent ().Length, new FileInfo (Path.Combine (Root, libbuilder.ProjectDirectory, lib.IntermediateOutputPath, - "nl", "armeabi-v7a", "libfoo.so")).Length, - "intermediate size mismatch"); - } libfoo = ZipHelper.ReadFileFromZip (Path.Combine (Root, builder.ProjectDirectory, app.OutputPath, app.PackageName + "-Signed.apk"), "lib/armeabi-v7a/libfoo.so"); Assert.AreEqual (so.TextContent ().Length, libfoo.Length, "compressed size mismatch"); @@ -429,9 +410,7 @@ public void AppProjectTargetsDoNotBreak () "_ResolveLibraryProjectImports", "_CleanIntermediateIfNeeded", }; - if (!Builder.UseDotNet) { - targets.Add ("_CopyConfigFiles"); - } + var proj = new XamarinFormsAndroidApplicationProject { OtherBuildItems = { new BuildItem.NoActionResource ("UnnamedProject.dll.config") { @@ -485,14 +464,10 @@ public void AppProjectTargetsDoNotBreak () [Test] public void LibraryProjectTargetsDoNotBreak () { - var targets = Builder.UseDotNet ? - new [] { - "_CreateAar" - } : - new [] { - "_CreateNativeLibraryArchive", - "_CreateManagedLibraryResourceArchive", - }; + var targets = new [] { + "_CreateAar", + }; + var proj = new XamarinAndroidLibraryProject { Sources = { new BuildItem.Source ("Class1.cs") { @@ -718,15 +693,13 @@ public void CSProjUserFileChanges () [Test] [NonParallelizable] // /restore can fail on Mac in parallel - public void ConvertCustomView ([Values (true, false)] bool useAapt2) + public void ConvertCustomView () { - AssertAaptSupported (useAapt2); var path = Path.Combine ("temp", TestName); var app = new XamarinAndroidApplicationProject { ProjectName = "MyApp", //NOTE: so _BuildApkEmbed runs in commercial tests EmbedAssembliesIntoApk = true, - AndroidUseAapt2 = useAapt2, Sources = { new BuildItem.Source ("Foo.cs") { TextContent = () => "public class Foo : Bar { }" @@ -773,14 +746,12 @@ public CustomTextView(Context context, IAttributeSet attributes) : base(context, appBuilder.BuildLogFile = "build.log"; Assert.IsTrue (appBuilder.Build (app), "first app build should have succeeded."); - if (useAapt2) { - var aapt2TargetsShouldRun = new [] { - "_FixupCustomViewsForAapt2", - "_CompileResources" - }; - foreach (var target in aapt2TargetsShouldRun) { - Assert.IsFalse (appBuilder.Output.IsTargetSkipped (target), $"{target} should run!"); - } + var aapt2TargetsShouldRun = new [] { + "_FixupCustomViewsForAapt2", + "_CompileResources" + }; + foreach (var target in aapt2TargetsShouldRun) { + Assert.IsFalse (appBuilder.Output.IsTargetSkipped (target), $"{target} should run!"); } lib.Touch ("Bar.cs"); @@ -811,24 +782,20 @@ public CustomTextView(Context context, IAttributeSet attributes) : base(context, Assert.IsFalse (appBuilder.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped!"); } - if (useAapt2) { - var aapt2TargetsShouldBeSkipped = new [] { - "_FixupCustomViewsForAapt2", - "_CompileResources" - }; - foreach (var target in aapt2TargetsShouldBeSkipped) { - Assert.IsTrue (appBuilder.Output.IsTargetSkipped (target), $"{target} should be skipped!"); - } + var aapt2TargetsShouldBeSkipped = new [] { + "_FixupCustomViewsForAapt2", + "_CompileResources" + }; + foreach (var target in aapt2TargetsShouldBeSkipped) { + Assert.IsTrue (appBuilder.Output.IsTargetSkipped (target), $"{target} should be skipped!"); } } } [Test] - public void ResolveLibraryProjectImports ([Values (true, false)] bool useAapt2) + public void ResolveLibraryProjectImports () { - AssertAaptSupported (useAapt2); var proj = new XamarinFormsAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "first build should have succeeded."); var intermediate = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath); @@ -885,10 +852,8 @@ public void ResolveLibraryProjectImports ([Values (true, false)] bool useAapt2) "_UpdateAndroidResgen", "_CompileJava", "_CreateBaseApk", + "_ConvertResourcesCases", }; - if (useAapt2) { - targets.Add ("_ConvertResourcesCases"); - } foreach (var targetName in targets) { Assert.IsTrue (b.Output.IsTargetSkipped (targetName), $"`{targetName}` should be skipped!"); } @@ -907,15 +872,13 @@ ReadLibraryProjectImportsCache ReadCache (string cacheFile) [Test] [NonParallelizable] - public void InvalidAndroidResource ([Values (true, false)] bool useAapt2) + public void InvalidAndroidResource () { - AssertAaptSupported (useAapt2); var invalidXml = new AndroidItem.AndroidResource (@"Resources\values\ids.xml") { TextContent = () => "" }; var proj = new XamarinAndroidApplicationProject (); - proj.AndroidUseAapt2 = useAapt2; using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { var projectFile = Path.Combine (Root, b.ProjectDirectory, proj.ProjectFilePath); b.ThrowOnBuildFailure = false; @@ -1296,9 +1259,8 @@ public void MissingProjectReference () } [Test] - public void AaptError ([Values (true, false)] bool useAapt2) + public void AaptError () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject { Sources = { new BuildItem.Source ("TestActivity.cs") { @@ -1306,7 +1268,6 @@ public void AaptError ([Values (true, false)] bool useAapt2) } } }; - proj.AndroidUseAapt2 = useAapt2; using (var builder = CreateApkBuilder ()) { builder.ThrowOnBuildFailure = false; Assert.IsFalse (builder.Build (proj), "Build should *not* have succeeded on the first build."); @@ -1442,18 +1403,13 @@ public void ChangeSupportedAbis () proj.SetAndroidSupportedAbis ("armeabi-v7a"); using (var b = CreateApkBuilder ()) { b.Build (proj); - - var parameters = Builder.UseDotNet ? - new [] { $"{KnownProperties.RuntimeIdentifier}=android-x86" } : - new [] { $"{KnownProperties.AndroidSupportedAbis}=x86" }; - b.Build (proj, parameters: parameters, doNotCleanupOnUpdate: true); + b.Build (proj, parameters: new [] { $"{KnownProperties.RuntimeIdentifier}=android-x86" }, doNotCleanupOnUpdate: true); } } [Test] - public void BuildPropsBreaksConvertResourcesCasesOnSecondBuild ([Values (true, false)] bool useAapt2) + public void BuildPropsBreaksConvertResourcesCasesOnSecondBuild () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject () { AndroidResources = { new AndroidItem.AndroidResource (() => "Resources\\drawable\\IMALLCAPS.png") { @@ -1466,7 +1422,6 @@ public void BuildPropsBreaksConvertResourcesCasesOnSecondBuild ([Values (true, f } } }; - proj.AndroidUseAapt2 = useAapt2; using (var b = CreateApkBuilder (Path.Combine ("temp", TestName))) { Assert.IsTrue (b.Build (proj), "first build should have succeeded."); var assemblyPath = Path.Combine (Root, b.ProjectDirectory, proj.OutputPath, "UnnamedProject.dll"); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs index fdb987dbf5b..27e3a35ba57 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs @@ -70,18 +70,15 @@ protected override void OnCreate (Bundle bundle) "; [Test] - public void Bug12935 ([Values (true, false)] bool useAapt2) + public void Bug12935 () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, }; proj.MainActivity = ScreenOrientationActivity; - proj.AndroidUseAapt2 = useAapt2; - var directory = $"temp/Bug12935_{useAapt2}"; + var directory = $"temp/Bug12935"; using (var builder = CreateApkBuilder (directory)) { - proj.TargetFrameworkVersion = "v4.2"; proj.AndroidManifest = string.Format (TargetSdkManifest, "17"); Assert.IsTrue (builder.Build (proj), "Build for TargetFrameworkVersion 17 should have succeeded"); var manifestFile = Path.Combine (Root, builder.ProjectDirectory, proj.IntermediateOutputPath, "android", "AndroidManifest.xml"); @@ -103,7 +100,6 @@ public void Bug12935 ([Values (true, false)] bool useAapt2) Assert.AreEqual ("sensorPortrait", screenOrientation.Value, "screenOrientation should have been sensorPortrait"); builder.Cleanup (); - proj.TargetFrameworkVersion = "v4.1"; proj.AndroidManifest = string.Format (TargetSdkManifest, "16"); Assert.IsTrue (builder.Build (proj), "Build for TargetFrameworkVersion 16 should have succeeded"); @@ -119,25 +115,22 @@ public void Bug12935 ([Values (true, false)] bool useAapt2) builder.Cleanup (); builder.ThrowOnBuildFailure = false; - proj.TargetFrameworkVersion = "v4.0.3"; proj.AndroidManifest = string.Format (TargetSdkManifest, "15"); Assert.IsFalse (builder.Build (proj), "Build for TargetFrameworkVersion 15 should have failed"); - StringAssertEx.Contains (useAapt2 ? "APT2259: " : "APT1134: ", builder.LastBuildOutput); - StringAssertEx.Contains (useAapt2 ? "APT2067" : "", builder.LastBuildOutput); + StringAssertEx.Contains ("APT2259: ", builder.LastBuildOutput); + StringAssertEx.Contains ("APT2067", builder.LastBuildOutput); StringAssertEx.Contains (Path.Combine ("Properties", "AndroidManifest.xml"), builder.LastBuildOutput); - StringAssertEx.Contains ($"{(useAapt2 ? "2" : "1")} Error(s)", builder.LastBuildOutput); + StringAssertEx.Contains ("2 Error(s)", builder.LastBuildOutput); } } [Test] - public void CheckElementReOrdering ([Values (true, false)] bool useAapt2) + public void CheckElementReOrdering () { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, }; proj.MainActivity = ScreenOrientationActivity; - proj.AndroidUseAapt2 = useAapt2; using (var builder = CreateApkBuilder ()) { proj.AndroidManifest = ElementOrderManifest; Assert.IsTrue (builder.Build (proj), "first build should have succeeded"); @@ -305,7 +298,6 @@ public void IntentFilterMultipleItems () public void LayoutAttributeElement () { var proj = new XamarinAndroidApplicationProject () { - TargetFrameworkVersion = "v7.0", IsRelease = true, }; string declHead = "public class MainActivity"; @@ -328,7 +320,6 @@ public void LayoutAttributeElement () public void DirectBootAwareAttribute () { var proj = new XamarinAndroidApplicationProject () { - TargetFrameworkVersion = "v7.0", IsRelease = true, }; string attrHead = ", Activity ("; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs index 9e7facc32e7..df2a878cd99 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/PackagingTest.cs @@ -56,21 +56,10 @@ public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblySto .Replace ("//${AFTER_ONCREATE}", @"var c = new CultureInfo (""es-ES""); Console.WriteLine ($""{DateTime.UtcNow.AddHours(-30).Humanize(culture:c)}""); //${AFTER_ONCREATE}"); - if (Builder.UseDotNet) { - proj.OtherBuildItems.Add (new BuildItem ("Using", "System.Globalization")); - proj.OtherBuildItems.Add (new BuildItem ("Using", "Humanizer")); - } - if (!Builder.UseDotNet) { - proj.PackageReferences.Add (new Package { - Id = "System.Runtime.InteropServices.WindowsRuntime", - Version = "4.0.1", - TargetFramework = "monoandroid71", - }); - proj.References.Add (new BuildItem.Reference ("Mono.Data.Sqlite.dll")); - proj.MainActivity = proj.MainActivity.Replace ("//${AFTER_ONCREATE}", "var command = new Mono.Data.Sqlite.SqliteCommand ();"); - } - var expectedFiles = Builder.UseDotNet ? - new [] { + proj.OtherBuildItems.Add (new BuildItem ("Using", "System.Globalization")); + proj.OtherBuildItems.Add (new BuildItem ("Using", "Humanizer")); + + var expectedFiles = new [] { "Java.Interop.dll", "Mono.Android.dll", "Mono.Android.Runtime.dll", @@ -87,20 +76,8 @@ public void CheckIncludedAssemblies ([Values (false, true)] bool usesAssemblySto "System.Collections.dll", "System.Collections.Concurrent.dll", "System.Text.RegularExpressions.dll", - } : - new [] { - "Java.Interop.dll", - "Mono.Android.dll", - "mscorlib.dll", - "System.Core.dll", - "System.Data.dll", - "System.dll", - "UnnamedProject.dll", - "Mono.Data.Sqlite.dll", - "Mono.Data.Sqlite.dll.config", - "Humanizer.dll", - //"es/Humanizer.resources.dll", <- Bug in classic. - }; + }; + using (var b = CreateApkBuilder ()) { Assert.IsTrue (b.Build (proj), "build should have succeeded."); var apk = Path.Combine (Root, b.ProjectDirectory, @@ -140,14 +117,12 @@ public void CheckClassesDexIsIncluded () [Test] [Parallelizable (ParallelScope.Self)] - public void CheckIncludedNativeLibraries ([Values (true, false)] bool compressNativeLibraries, [Values (true, false)] bool useAapt2) + public void CheckIncludedNativeLibraries ([Values (true, false)] bool compressNativeLibraries) { - AssertAaptSupported (useAapt2); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, }; proj.PackageReferences.Add(KnownPackages.SQLitePCLRaw_Core); - proj.AndroidUseAapt2 = useAapt2; proj.SetAndroidSupportedAbis ("x86"); proj.SetProperty (proj.ReleaseProperties, "AndroidStoreUncompressedFileExtensions", compressNativeLibraries ? "" : "so"); using (var b = CreateApkBuilder ()) { @@ -583,7 +558,7 @@ public class Test } using (var b = CreateApkBuilder (Path.Combine (path, app.ProjectName))) { Assert.IsTrue (b.Build (app), "Build of jar should have succeeded."); - var jar = Builder.UseDotNet ? "2965D0C9A2D5DB1E.jar" : "test.jar"; + var jar = "2965D0C9A2D5DB1E.jar"; string expected = $"Ignoring jar entry AndroidManifest.xml from {jar}: the same file already exists in the apk"; Assert.IsTrue (b.LastBuildOutput.ContainsText (expected), $"AndroidManifest.xml for {jar} should have been ignored."); } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs index eebb80a4777..aabd090f01e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/SingleProjectTest.cs @@ -47,9 +47,7 @@ public void AndroidManifestProperties (string versionName, string versionCode, s .Replace ("android:label=\"${PROJECT_NAME}\"", "") .Replace ("android:versionName=\"1.0\"", "") .Replace ("android:versionCode=\"1\"", ""); - if (!Builder.UseDotNet) { - proj.SetProperty ("GenerateApplicationManifest", "true"); - } + proj.SetProperty ("ApplicationId", packageName); proj.SetProperty ("ApplicationTitle", applicationLabel); proj.SetProperty ("ApplicationVersion", versionCode); @@ -78,9 +76,6 @@ public void AndroidManifestProperties (string versionName, string versionCode, s var apk = b.Output.GetIntermediaryPath ($"android/bin/{packageName}.apk"); FileAssert.Exists (apk); - // NOTE: the $(Version) setting is only implemented in .NET 6 - if (!Builder.UseDotNet) - return; // If not valid version, skip if (!Version.TryParse (versionName, out _)) return; @@ -121,9 +116,7 @@ public void AndroidManifestValuesWin () .Replace ("android:label=\"${PROJECT_NAME}\"", $"android:label=\"{applicationLabel}\"") .Replace ("android:versionName=\"1.0\"", $"android:versionName=\"{versionName}\"") .Replace ("android:versionCode=\"1\"", $"android:versionCode=\"{versionCode}\""); - if (!Builder.UseDotNet) { - proj.SetProperty ("GenerateApplicationManifest", "true"); - } + proj.SetProperty ("ApplicationId", "com.i.should.not.be.used"); proj.SetProperty ("ApplicationTitle", "I should not be used"); proj.SetProperty ("ApplicationVersion", "21"); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/Aapt2Tests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/Aapt2Tests.cs index f4d68935fe2..9ae9a3563c8 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/Aapt2Tests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/Aapt2Tests.cs @@ -434,20 +434,6 @@ public void Aapt2CompileFixesUpErrors () Directory.Delete (Path.Combine (Root, path), recursive: true); } - [Test] - public void Aapt2Disabled () - { - AssertAaptSupported (useAapt2: false); - var proj = new XamarinAndroidApplicationProject (); - proj.AndroidUseAapt2 = false; - using (var b = CreateApkBuilder ()) { - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - Assert.IsFalse (StringAssertEx.ContainsText (b.LastBuildOutput, "Aapt2Link"), "Aapt2Link task should not run!"); - Assert.IsFalse (StringAssertEx.ContainsText (b.LastBuildOutput, "Aapt2Compile"), "Aapt2Compile task should not run!"); - Assert.IsFalse (StringAssertEx.ContainsText (b.LastBuildOutput, "_CreateAapt2VersionCache"), "_CreateAapt2VersionCache target should not run!"); - } - } - [Test] public void Aapt2AndroidResgenExtraArgsAreInvalid () { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidDotnetToolTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidDotnetToolTests.cs index 368b604f33b..d6d03315ad2 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidDotnetToolTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/AndroidDotnetToolTests.cs @@ -37,12 +37,11 @@ public void ShouldUseFullToolPath () BuildEngine = engine, NetCoreRoot = dotnetDir, ToolPath = TestEnvironment.AndroidMSBuildDirectory, - ToolExe = Builder.UseDotNet ? "class-parse.dll" : "class-parse.exe", + ToolExe = "class-parse.dll", }; Assert.True (classParseTask.Execute (), "Task should have succeeded."); - var expectedTool = Builder.UseDotNet ? dotnetPath : Path.Combine (TestEnvironment.AndroidMSBuildDirectory, "class-parse.exe"); - Assert.IsTrue (messages.Any (m => m.Message.StartsWith (expectedTool)), "Task did not use expected tool path."); + Assert.IsTrue (messages.Any (m => m.Message.StartsWith (dotnetPath)), "Task did not use expected tool path."); } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs index 5a9cabe50a5..bc0a493e58c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs @@ -174,15 +174,10 @@ private void PreserveCustomHttpClientHandler (string handlerType, string handler [Test] public void PreserveCustomHttpClientHandlers () { - if (Builder.UseDotNet) { - PreserveCustomHttpClientHandler ("Xamarin.Android.Net.AndroidMessageHandler", "", - "temp/PreserveAndroidMessageHandler", "android-arm64/linked/Mono.Android.dll"); - PreserveCustomHttpClientHandler ("System.Net.Http.SocketsHttpHandler", "System.Net.Http", - "temp/PreserveSocketsHttpHandler", "android-arm64/linked/System.Net.Http.dll"); - } else { - PreserveCustomHttpClientHandler ("Xamarin.Android.Net.AndroidClientHandler", "", - "temp/PreserveAndroidHttpClientHandler", "android/assets/Mono.Android.dll"); - } + PreserveCustomHttpClientHandler ("Xamarin.Android.Net.AndroidMessageHandler", "", + "temp/PreserveAndroidMessageHandler", "android-arm64/linked/Mono.Android.dll"); + PreserveCustomHttpClientHandler ("System.Net.Http.SocketsHttpHandler", "System.Net.Http", + "temp/PreserveSocketsHttpHandler", "android-arm64/linked/System.Net.Http.dll"); } [Test] @@ -216,8 +211,8 @@ public void WarnAboutAppDomains ([Values (true, false)] bool isRelease) Assert.IsTrue (appBuilder.Build (app), "app build should have succeeded."); // NOTE: in .NET 6, we only emit IL6200 for Release builds - if (!Builder.UseDotNet || isRelease) { - string code = Builder.UseDotNet ? "IL6200" : "XA2000"; + if (isRelease) { + string code = "IL6200"; Assert.IsTrue (StringAssertEx.ContainsText (appBuilder.LastBuildOutput, "1 Warning(s)"), "MSBuild should count 1 warnings."); Assert.IsTrue (StringAssertEx.ContainsText (appBuilder.LastBuildOutput, $"warning {code}: Use of AppDomain.CreateDomain()"), $"Should warn {code} about creating AppDomain."); } @@ -260,7 +255,7 @@ public void RemoveDesigner ([Values (true, false)] bool useAssemblyStore) [Test] public void LinkDescription ([Values (true, false)] bool useAssemblyStore) { - string assembly_name = Builder.UseDotNet ? "System.Console" : "mscorlib"; + string assembly_name = "System.Console"; string linker_xml = ""; var proj = new XamarinAndroidApplicationProject { @@ -428,7 +423,7 @@ public unsafe bool MyMethod (Android.OS.IBinder windowToken, [global::Android.Ru Assert.IsTrue (b.Build (proj), "Building a project should have succeded."); var assemblyFile = "UnnamedProject.dll"; - var assemblyPath = (Builder.UseDotNet && (!isRelease || setLinkModeNone)) ? b.Output.GetIntermediaryPath (Path.Combine ("android", "assets", assemblyFile)) : BuildTest.GetLinkedPath (b, true, assemblyFile); + var assemblyPath = (!isRelease || setLinkModeNone) ? b.Output.GetIntermediaryPath (Path.Combine ("android", "assets", assemblyFile)) : BuildTest.GetLinkedPath (b, true, assemblyFile); using (var assembly = AssemblyDefinition.ReadAssembly (assemblyPath)) { Assert.IsTrue (assembly != null); @@ -461,9 +456,6 @@ public unsafe bool MyMethod (Android.OS.IBinder windowToken, [global::Android.Ru [Test] public void TypeRegistrationsFallback ([Values (true, false)] bool enabled) { - if (!Builder.UseDotNet) - Assert.Ignore ("Test only valid on .NET 6"); - var proj = new XamarinAndroidApplicationProject () { IsRelease = true }; if (enabled) proj.SetProperty (proj.ActiveConfigurationProperties, "VSAndroidDesigner", "true"); @@ -484,9 +476,6 @@ public void TypeRegistrationsFallback ([Values (true, false)] bool enabled) [Test] public void AndroidUseNegotiateAuthentication ([Values (true, false, null)] bool? useNegotiateAuthentication) { - if (!Builder.UseDotNet) - Assert.Ignore ("Test only valid on .NET"); - var proj = new XamarinAndroidApplicationProject { IsRelease = true }; proj.AddReferences ("System.Net.Http"); proj.MainActivity = proj.DefaultMainActivity.Replace ( @@ -519,9 +508,6 @@ public void AndroidUseNegotiateAuthentication ([Values (true, false, null)] bool [Test] public void DoNotErrorOnPerArchJavaTypeDuplicates ([Values(true, false)] bool enableMarshalMethods) { - if (!Builder.UseDotNet) - Assert.Ignore ("Test only valid on .NET"); - var path = Path.Combine (Root, "temp", TestName); var lib = new XamarinAndroidLibraryProject { IsRelease = true, ProjectName = "Lib1" }; lib.SetProperty ("IsTrimmable", "true"); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveSdksTaskTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveSdksTaskTests.cs index 1ce49588ac5..4d0651233f6 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveSdksTaskTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ResolveSdksTaskTests.cs @@ -436,17 +436,5 @@ public void TargetFrameworkPairing (string description, ApiInfo[] androidSdk, Ap Directory.Delete (Path.Combine (Root, path), recursive: true); } - [Test] - public void LatestTFV_OldTargetSdkVersion () - { - var proj = new XamarinAndroidApplicationProject { - UseLatestPlatformSdk = false, - }; - proj.TargetSdkVersion = "19"; - using (var b = CreateApkBuilder ()) { - proj.TargetFrameworkVersion = b.LatestTargetFrameworkVersion (); - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - } - } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs index 29c00189e8e..8a909c4b752 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs @@ -73,13 +73,6 @@ public static string AndroidNdkPath { /// public const int MaxFileName = 255; - protected static void AssertAaptSupported (bool useAapt2) - { - if (Builder.UseDotNet && !useAapt2) { - Assert.Ignore ("aapt(1) is not supported in .NET 5+"); - } - } - protected static void WaitFor(int milliseconds) { var pause = new ManualResetEvent(false); @@ -452,36 +445,28 @@ protected string GetPathToAapt () protected string GetResourceDesignerPath (ProjectBuilder builder, XamarinAndroidProject project) { - string path; - if (Builder.UseDotNet) { - path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); - if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "True", ignoreCase: true) == 0) { - return Path.Combine (path, "_Microsoft.Android.Resource.Designer.dll"); - } - } else { - path = Path.Combine (Root, builder.ProjectDirectory, "Resources"); + string path = Path.Combine (Root, builder.ProjectDirectory, project.IntermediateOutputPath); + if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "False", ignoreCase: true) != 0) { + return Path.Combine (path, "_Microsoft.Android.Resource.Designer.dll"); } return Path.Combine (path, "Resource.designer" + project.Language.DefaultDesignerExtension); } protected string GetResourceDesignerText (XamarinAndroidProject project, string path) { - if (Builder.UseDotNet) { - if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "True", ignoreCase: true) == 0) { - var decompiler = new CSharpDecompiler (path, new DecompilerSettings () { }); - return decompiler.DecompileWholeModuleAsString (); - } + if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "False", ignoreCase: true) != 0) { + var decompiler = new CSharpDecompiler (path, new DecompilerSettings () { }); + return decompiler.DecompileWholeModuleAsString (); } + return File.ReadAllText (path); } protected string[] GetResourceDesignerLines (XamarinAndroidProject project, string path) { - if (Builder.UseDotNet) { - if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "True", ignoreCase: true) == 0) { - var decompiler = new CSharpDecompiler (path, new DecompilerSettings () { }); - return decompiler.DecompileWholeModuleAsString ().Split (Environment.NewLine[0]); - } + if (string.Compare (project.GetProperty ("AndroidUseDesignerAssembly"), "False", ignoreCase: true) != 0) { + var decompiler = new CSharpDecompiler (path, new DecompilerSettings () { }); + return decompiler.DecompileWholeModuleAsString ().Split (Environment.NewLine[0]); } return File.ReadAllLines (path); } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs index ed5becf6940..ab4b89de2c9 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs @@ -190,7 +190,12 @@ protected static string ClearAdbLogcat () protected static string ClearDebugProperty () { - return RunAdbCommand ("shell setprop debug.mono.extra \"\""); + return ClearShellProp ("debug.mono.extra"); + } + + protected static string ClearShellProp (string propName) + { + return RunAdbCommand ($"shell setprop {propName} \"''\""); } protected static string AdbStartActivity (string activity) @@ -200,15 +205,8 @@ protected static string AdbStartActivity (string activity) protected static void RunProjectAndAssert (XamarinAndroidApplicationProject proj, ProjectBuilder builder, string logName = "run.log", bool doNotCleanupOnUpdate = false, string [] parameters = null) { - if (Builder.UseDotNet) { - builder.BuildLogFile = logName; - Assert.True (builder.RunTarget (proj, "Run", doNotCleanupOnUpdate: doNotCleanupOnUpdate, parameters: parameters), "Project should have run."); - } else if (TestEnvironment.CommercialBuildAvailable) { - builder.BuildLogFile = logName; - Assert.True (builder.RunTarget (proj, "_Run", doNotCleanupOnUpdate: doNotCleanupOnUpdate, parameters: parameters), "Project should have run."); - } else { - StartActivityAndAssert (proj); - } + builder.BuildLogFile = logName; + Assert.True (builder.RunTarget (proj, "Run", doNotCleanupOnUpdate: doNotCleanupOnUpdate, parameters: parameters), "Project should have run."); } protected static void StartActivityAndAssert (XamarinAndroidApplicationProject proj) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs index b9378c94419..e6ca9dec4f3 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/WearTests.cs @@ -58,32 +58,9 @@ public void BundledWearApp () using (var wearBuilder = CreateDllBuilder (Path.Combine (path, wear.ProjectName))) using (var appBuilder = CreateApkBuilder (Path.Combine (path, app.ProjectName))) { Assert.IsTrue (wearBuilder.Build (wear), "first wear build should have succeeded."); - // In .NET 5+, just check for a build error - if (Builder.UseDotNet) { - appBuilder.ThrowOnBuildFailure = false; - Assert.IsFalse (appBuilder.Build (app), "'dotnet' app build should have failed."); - StringAssertEx.Contains ($"error XA4312", appBuilder.LastBuildOutput, "Error should be XA4312"); - return; - } - Assert.IsTrue (appBuilder.Build (app), "first app build should have succeeded."); - StringAssertEx.Contains ($"warning XA4312", appBuilder.LastBuildOutput, "Warning should be XA4312"); - // Build with no changes - Assert.IsTrue (wearBuilder.Build (wear, doNotCleanupOnUpdate: true), "second wear build should have succeeded."); - Assert.IsTrue (wearBuilder.Output.IsTargetSkipped (target), $"`{target}` in wear build should be skipped!"); - Assert.IsTrue (appBuilder.Build (app, doNotCleanupOnUpdate: true), "second app build should have succeeded."); - Assert.IsTrue (appBuilder.LastBuildOutput.ContainsOccurances ($"Skipping target \"{target}\"", 2), $"`{target}` in app build should be skipped!"); - // Check the APK for the special Android Wear files - var files = new [] { - "res/raw/wearable_app.apk", - "res/xml/wearable_app_desc.xml" - }; - var apk = Path.Combine (Root, appBuilder.ProjectDirectory, app.OutputPath, $"{app.PackageName}.apk"); - FileAssert.Exists (apk); - using (var zipFile = ZipHelper.OpenZip (apk)) { - foreach (var file in files) { - Assert.IsTrue (zipFile.ContainsEntry (file, caseSensitive: true), $"{file} should be in the apk!"); - } - } + appBuilder.ThrowOnBuildFailure = false; + Assert.IsFalse (appBuilder.Build (app), "'dotnet' app build should have failed."); + StringAssertEx.Contains ($"error XA4312", appBuilder.LastBuildOutput, "Error should be XA4312"); } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownProperties.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownProperties.cs index 7b846201c9a..9473811e49e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownProperties.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownProperties.cs @@ -9,7 +9,6 @@ public static class KnownProperties public const string AndroidLinkMode = "AndroidLinkMode"; public const string EmbedAssembliesIntoApk = "EmbedAssembliesIntoApk"; - public const string AndroidUseLatestPlatformSdk = "AndroidUseLatestPlatformSdk"; public const string AndroidUseAapt2 = "AndroidUseAapt2"; public const string AndroidCreatePackagePerAbi = "AndroidCreatePackagePerAbi"; public const string AndroidEnableMarshalMethods = "AndroidEnableMarshalMethods"; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownTargets.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownTargets.cs index b3dc6f4db2b..2d3641bab1f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownTargets.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownTargets.cs @@ -7,6 +7,6 @@ public static class KnownTargets public const string LinkAssembliesNoShrink = "_LinkAssembliesNoShrink"; // _RunILLink is found at: https://github.com/dotnet/sdk/blob/1ed51bc8f9cb06760c5b2f26798ee0278bd75f54/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.ILLink.targets#L69-L72 - public static string LinkAssembliesShrink => Builder.UseDotNet ? "_RunILLink" : "_LinkAssembliesShrink"; + public const string LinkAssembliesShrink = "_RunILLink"; } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs index 0a2f0e8bba3..67b77daceee 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidApplicationProject.cs @@ -25,8 +25,7 @@ public class XamarinAndroidApplicationProject : XamarinAndroidCommonProject static XamarinAndroidApplicationProject () { - var folder = Builder.UseDotNet ? "DotNet" : "Base"; - using (var sr = new StreamReader (typeof(XamarinAndroidApplicationProject).Assembly.GetManifestResourceStream ($"Xamarin.ProjectTools.Resources.{folder}.MainActivity.cs"))) + using (var sr = new StreamReader (typeof(XamarinAndroidApplicationProject).Assembly.GetManifestResourceStream ($"Xamarin.ProjectTools.Resources.DotNet.MainActivity.cs"))) default_main_activity_cs = sr.ReadToEnd (); using (var sr = new StreamReader (typeof(XamarinAndroidApplicationProject).Assembly.GetManifestResourceStream ("Xamarin.ProjectTools.Resources.Base.MainActivity.fs"))) default_main_activity_fs = sr.ReadToEnd (); @@ -40,39 +39,24 @@ static XamarinAndroidApplicationProject () public XamarinAndroidApplicationProject (string debugConfigurationName = "Debug", string releaseConfigurationName = "Release", [CallerMemberName] string packageName = "") : base (debugConfigurationName, releaseConfigurationName) { - if (Builder.UseDotNet) { - SetProperty (KnownProperties.OutputType, "Exe"); - SetProperty (KnownProperties.Nullable, "enable"); - SetProperty (KnownProperties.ImplicitUsings, "enable"); - SetProperty ("XamarinAndroidSupportSkipVerifyVersions", "True"); - SetProperty ("_FastDeploymentDiagnosticLogging", "True"); - SupportedOSPlatformVersion = "21.0"; - - // Workaround for AndroidX, see: https://github.com/xamarin/AndroidSupportComponents/pull/239 - Imports.Add (new Import (() => "Directory.Build.targets") { - TextContent = () => - @" - - - - " - }); - } else { - SetProperty ("_FastDeploymentDiagnosticLogging", "True"); - SetProperty ("AndroidApplication", "True"); - SetProperty ("AndroidResgenClass", "Resource"); - SetProperty ("AndroidResgenFile", () => "Resources\\Resource.designer" + Language.DefaultDesignerExtension); - SetProperty ("AndroidManifest", "Properties\\AndroidManifest.xml"); - SetProperty (DebugProperties, "AndroidLinkMode", "None"); - SetProperty (ReleaseProperties, "AndroidLinkMode", "SdkOnly"); - SetProperty (DebugProperties, KnownProperties.EmbedAssembliesIntoApk, "False", "'$(EmbedAssembliesIntoApk)' == ''"); - SetProperty (ReleaseProperties, KnownProperties.EmbedAssembliesIntoApk, "True", "'$(EmbedAssembliesIntoApk)' == ''"); - MinSdkVersion = "19"; - } + SetProperty (KnownProperties.OutputType, "Exe"); + SetProperty (KnownProperties.Nullable, "enable"); + SetProperty (KnownProperties.ImplicitUsings, "enable"); + SetProperty ("XamarinAndroidSupportSkipVerifyVersions", "True"); + SetProperty ("_FastDeploymentDiagnosticLogging", "True"); + SupportedOSPlatformVersion = "21.0"; + + // Workaround for AndroidX, see: https://github.com/xamarin/AndroidSupportComponents/pull/239 + Imports.Add (new Import (() => "Directory.Build.targets") { + TextContent = () => + @" + + + + " + }); + AndroidManifest = default_android_manifest; - if (!Builder.UseDotNet) { - TargetSdkVersion = AndroidSdkResolver.GetMaxInstalledPlatform ().ToString (); - } LayoutMain = default_layout_main; StringsXml = default_strings_xml; PackageName = $"com.xamarin.{(packageName ?? ProjectName).ToLower ()}"; @@ -110,11 +94,9 @@ public string SupportedOSPlatformVersion { set { SetProperty (KnownProperties.SupportedOSPlatformVersion, value); } } - string AotAssembliesPropertyName => Builder.UseDotNet ? KnownProperties.RunAOTCompilation : KnownProperties.AotAssemblies; - public bool AotAssemblies { - get { return string.Equals (GetProperty (AotAssembliesPropertyName), "True", StringComparison.OrdinalIgnoreCase); } - set { SetProperty (AotAssembliesPropertyName, value.ToString ()); } + get { return string.Equals (GetProperty (KnownProperties.RunAOTCompilation), "True", StringComparison.OrdinalIgnoreCase); } + set { SetProperty (KnownProperties.RunAOTCompilation, value.ToString ()); } } public bool AndroidEnableProfiledAot { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidCommonProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidCommonProject.cs index 51a4772a395..b4526934150 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidCommonProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidCommonProject.cs @@ -54,10 +54,6 @@ protected XamarinAndroidCommonProject (string debugConfigurationName = "Debug", AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\drawable-xxhdpi\\Icon.png") { BinaryContent = () => icon_binary_xxhdpi }); AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\drawable-xxxhdpi\\Icon.png") { BinaryContent = () => icon_binary_xxxhdpi }); //AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\drawable-nodpi\\Icon.png") { BinaryContent = () => icon_binary }); - if (Builder.UseDotNet) { - // set our default - SetProperty ("AndroidUseDesignerAssembly", "True"); - } } public override string ProjectTypeGuid { @@ -90,10 +86,8 @@ public override ProjectLanguage Language { Sources.Remove (resourceDesigner); OtherBuildItems.Add (new BuildItem.NoActionResource (() => "Resources\\Resource.designer" + Language.DefaultDesignerExtension) { TextContent = () => string.Empty }); - if (Builder.UseDotNet) { - // Use KnownPackages.FSharp_Core_Latest for FSharp.Core - SetProperty ("DisableImplicitFSharpCoreReference", "true"); - } + // Use KnownPackages.FSharp_Core_Latest for FSharp.Core + SetProperty ("DisableImplicitFSharpCoreReference", "true"); } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidLibraryProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidLibraryProject.cs index 358a0f47d1f..6e2157e4f7d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidLibraryProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidLibraryProject.cs @@ -14,14 +14,8 @@ public class XamarinAndroidLibraryProject : XamarinAndroidCommonProject public XamarinAndroidLibraryProject (string debugConfigurationName = "Debug", string releaseConfigurationName = "Release") : base (debugConfigurationName, releaseConfigurationName) { - if (Builder.UseDotNet) { - SetProperty (KnownProperties.Nullable, "enable"); - SetProperty (KnownProperties.ImplicitUsings, "enable"); - } else { - SetProperty ("AndroidApplication", "False"); - SetProperty ("AndroidResgenFile", Path.Combine ("Resources", "Resource.designer.cs")); - } - + SetProperty (KnownProperties.Nullable, "enable"); + SetProperty (KnownProperties.ImplicitUsings, "enable"); AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\values\\Strings.xml") { TextContent = () => StringsXml.Replace ("${PROJECT_NAME}", ProjectName) }); StringsXml = default_strings_xml; } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProject.cs index 5fdfa10d2c3..aa156fa95bc 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProject.cs @@ -13,20 +13,6 @@ protected XamarinAndroidProject (string debugConfigurationName = "Debug", string : base (debugConfigurationName, releaseConfigurationName) { Language = XamarinAndroidProjectLanguage.CSharp; - - if (!Builder.UseDotNet) { - TargetFrameworkVersion = Versions.Android11; - UseLatestPlatformSdk = true; - AddReferences ("System.Core", "System.Xml", "Mono.Android"); - ProjectGuid = Guid.NewGuid ().ToString (); - SetProperty ("ProjectTypeGuids", () => "{" + Language.ProjectTypeGuid + "};{" + ProjectTypeGuid + "}"); - SetProperty ("ProjectGuid", () => "{" + ProjectGuid + "}"); - SetProperty ("MonoAndroidAssetsPrefix", "Assets"); - SetProperty ("MonoAndroidResourcePrefix", "Resources"); - SetProperty (KnownProperties.AndroidUseLatestPlatformSdk, () => UseLatestPlatformSdk ? "True" : "False"); - SetProperty (KnownProperties.TargetFrameworkVersion, () => TargetFrameworkVersion); - } - SetProperty (KnownProperties.OutputType, "Library"); } @@ -34,24 +20,5 @@ protected XamarinAndroidProject (string debugConfigurationName = "Debug", string public XamarinAndroidProjectLanguage XamarinAndroidLanguage { get { return (XamarinAndroidProjectLanguage) Language; } } - - public bool UseLatestPlatformSdk { get; set; } - - public string TargetFrameworkVersion { get; set; } - - /// - /// TargetFrameworkVersion=v8.1 -> 81 - /// - public string TargetFrameworkAbbreviated => TargetFrameworkVersion?.TrimStart ('v').Replace (".", ""); - - /// - /// TargetFrameworkVersion=v8.1 -> MonoAndroid81 - /// - public string TargetFrameworkMoniker => "MonoAndroid" + TargetFrameworkAbbreviated; - - public bool AndroidUseAapt2 { - get { return string.Equals (GetProperty (KnownProperties.AndroidUseAapt2), "True", StringComparison.OrdinalIgnoreCase); } - set { SetProperty (KnownProperties.AndroidUseAapt2, value.ToString ()); } - } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProjectLanguage.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProjectLanguage.cs index 4365ce6bab1..755713d99d0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProjectLanguage.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidProjectLanguage.cs @@ -34,7 +34,7 @@ public override string DefaultExtension { get { return ".fs"; } } public override string DefaultDesignerExtension { - get { return Builder.UseDotNet ? ".fs" : ".cs"; } + get { return ".fs"; } } public override string DefaultProjectExtension { get { return ".fsproj"; } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidWearApplicationProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidWearApplicationProject.cs index 2155cdf2b3f..93bf7c01a4f 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidWearApplicationProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinAndroidWearApplicationProject.cs @@ -28,8 +28,6 @@ static XamarinAndroidWearApplicationProject () public XamarinAndroidWearApplicationProject (string debugConfigurationName = "Debug", string releaseConfigurationName = "Release", [CallerMemberName] string packageName = "") : base (debugConfigurationName, releaseConfigurationName, packageName) { - TargetFrameworkVersion = Versions.KitkatWatch; - UseLatestPlatformSdk = true; PackageReferences.Add (KnownPackages.AndroidWear_2_2_0); MainActivity = default_main_activity; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsAndroidApplicationProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsAndroidApplicationProject.cs index 9981e78a859..598f62a9139 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsAndroidApplicationProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsAndroidApplicationProject.cs @@ -41,13 +41,9 @@ static XamarinFormsAndroidApplicationProject () public XamarinFormsAndroidApplicationProject (string debugConfigurationName = "Debug", string releaseConfigurationName = "Release", [CallerMemberName] string packageName = "") : base (debugConfigurationName, releaseConfigurationName, packageName) { - if (Builder.UseDotNet) { - // Don't opt into ImplicitUsings - RemoveProperty (KnownProperties.ImplicitUsings); - PackageReferences.Add (KnownPackages.XamarinForms_4_7_0_1142); - } else { - PackageReferences.Add (KnownPackages.XamarinForms_4_0_0_425677); - } + // Don't opt into ImplicitUsings + RemoveProperty (KnownProperties.ImplicitUsings); + PackageReferences.Add (KnownPackages.XamarinForms_4_7_0_1142); AndroidResources.Add (new AndroidItem.AndroidResource ("Resources\\values\\colors.xml") { TextContent = () => colors_xml, diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsMapsApplicationProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsMapsApplicationProject.cs index a242a421ca7..b83416c51d6 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsMapsApplicationProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/XamarinFormsMapsApplicationProject.cs @@ -17,19 +17,13 @@ static XamarinFormsMapsApplicationProject () public XamarinFormsMapsApplicationProject ([CallerMemberName] string packageName = "") : base (packageName: packageName) { - if (Builder.UseDotNet) { - PackageReferences.Add (KnownPackages.XamarinFormsMaps_4_7_0_1142); - PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Base); - PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Basement); - PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Maps); - PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Tasks); - PackageReferences.Add (KnownPackages.Xamarin_Build_Download); + PackageReferences.Add (KnownPackages.XamarinFormsMaps_4_7_0_1142); + PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Base); + PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Basement); + PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Maps); + PackageReferences.Add (KnownPackages.Xamarin_GooglePlayServices_Tasks); + PackageReferences.Add (KnownPackages.Xamarin_Build_Download); - //TODO: temporary fix for ordering breakage and workloads - SetProperty ("AndroidApplication", "True"); - } else { - PackageReferences.Add (KnownPackages.XamarinFormsMaps_4_0_0_425677); - } MainActivity = MainActivity.Replace ("//${AFTER_FORMS_INIT}", "Xamarin.FormsMaps.Init (this, savedInstanceState);"); //NOTE: API_KEY metadata just has to *exist* AndroidManifest = AndroidManifest.Replace ("", ""); 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 fa603222054..c583e2b6192 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 @@ -18,13 +18,6 @@ public class Builder : IDisposable const string ConsoleLoggerError = "[ERROR] FATAL UNHANDLED EXCEPTION: System.ArgumentException: is negative"; const int DefaultBuildTimeOut = 30; - string Arm32AbiDir => UseDotNet ? "android-arm" : "armeabi-v7a"; - - /// - /// If true, use `dotnet build` and IShortFormProject throughout the tests - /// - public static bool UseDotNet => Environment.Version.Major >= 5; - string root; string buildLogFullPath; public bool IsUnix { get; set; } @@ -182,21 +175,18 @@ protected bool BuildInternal (string projectOrSolution, string target, string [] var args = new StringBuilder (); var psi = new ProcessStartInfo (Path.Combine (TestEnvironment.DotNetPreviewDirectory, "dotnet")); var responseFile = Path.Combine (XABuildPaths.TestOutputDirectory, Path.GetDirectoryName (projectOrSolution), "project.rsp"); - if (UseDotNet) { - args.Append ("build "); - if (TestEnvironment.UseLocalBuildOutput) { - psi.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_MANIFEST_ROOTS", TestEnvironment.WorkloadManifestOverridePath); - psi.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_PACK_ROOTS", TestEnvironment.WorkloadPackOverridePath); - } + args.Append ("build "); + + if (TestEnvironment.UseLocalBuildOutput) { + psi.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_MANIFEST_ROOTS", TestEnvironment.WorkloadManifestOverridePath); + psi.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_PACK_ROOTS", TestEnvironment.WorkloadPackOverridePath); } + args.AppendFormat ("{0} /t:{1} {2}", QuoteFileName (Path.Combine (XABuildPaths.TestOutputDirectory, projectOrSolution)), target, logger); - if (UseDotNet) { - if (!AutomaticNuGetRestore) { - args.Append (" --no-restore"); - } - } else if (AutomaticNuGetRestore && restore) { - args.Append (" /restore"); + + if (!AutomaticNuGetRestore) { + args.Append (" --no-restore"); } args.Append (" -nodeReuse:false"); // Disable the MSBuild daemon everywhere! @@ -248,13 +238,8 @@ protected bool BuildInternal (string projectOrSolution, string target, string [] psi.SetEnvironmentVariable ("BUILD_SOURCEVERSIONMESSAGE", ""); // Ensure any variable alteration from DotNetXamarinProject.Construct is cleared. - if (!Builder.UseDotNet && !TestEnvironment.IsWindows) { - psi.SetEnvironmentVariable ("MSBUILD_EXE_PATH", null); - } - if (Builder.UseDotNet) { - psi.SetEnvironmentVariable ("DOTNET_MULTILEVEL_LOOKUP", "0"); - psi.SetEnvironmentVariable ("PATH", TestEnvironment.DotNetPreviewDirectory + Path.PathSeparator + Environment.GetEnvironmentVariable ("PATH")); - } + psi.SetEnvironmentVariable ("DOTNET_MULTILEVEL_LOOKUP", "0"); + psi.SetEnvironmentVariable ("PATH", TestEnvironment.DotNetPreviewDirectory + Path.PathSeparator + Environment.GetEnvironmentVariable ("PATH")); psi.Arguments = args.ToString (); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetCLI.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetCLI.cs index e2631188050..e020fc89e85 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetCLI.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetCLI.cs @@ -53,11 +53,6 @@ protected bool Execute (params string [] args) p.StartInfo.SetEnvironmentVariable ("DOTNETSDK_WORKLOAD_PACK_ROOTS", TestEnvironment.WorkloadPackOverridePath); } - // Ensure any variable alteration from DotNetXamarinProject.Construct is cleared. - if (!Builder.UseDotNet && !TestEnvironment.IsWindows) { - p.StartInfo.SetEnvironmentVariable ("MSBUILD_EXE_PATH", null); - } - p.ErrorDataReceived += (sender, e) => { if (e.Data != null) { procOutput.AppendLine (e.Data); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs index cc396f31c0f..3f76fe0daf9 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetStandard.cs @@ -42,9 +42,5 @@ public override string SaveProject () { return XmlUtils.ToXml (this); } - - public override void NuGetRestore (string directory, string packagesDirectory = null) - { - } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs index acf8296b71e..b6a59cada54 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/DotNetXamarinProject.cs @@ -25,29 +25,9 @@ protected DotNetXamarinProject (string debugConfigurationName = "Debug", string SetProperty ("RootNamespace", () => RootNamespace ?? ProjectName); SetProperty ("AssemblyName", () => AssemblyName ?? ProjectName); - if (Builder.UseDotNet) { - TargetFramework = "net8.0-android"; - EnableDefaultItems = false; - AppendTargetFrameworkToOutputPath = false; - } else { - AddReferences ("System"); // default - SetProperty ("Platform", "AnyCPU", "'$(Platform)' == ''"); - SetProperty ("ErrorReport", "prompt"); - SetProperty ("WarningLevel", "4"); - SetProperty ("ConsolePause", "false"); - - SetProperty ("BaseIntermediateOutputPath", "obj\\", " '$(BaseIntermediateOutputPath)' == '' "); - - SetProperty (DebugProperties, "DebugSymbols", "true"); - SetProperty (DebugProperties, "DebugType", "portable"); - SetProperty (DebugProperties, "Optimize", "false"); - SetProperty (DebugProperties, "DefineConstants", "DEBUG;"); - - SetProperty (ReleaseProperties, "Optimize", "true"); - SetProperty (ReleaseProperties, "ErrorReport", "prompt"); - SetProperty (ReleaseProperties, "WarningLevel", "4"); - SetProperty (ReleaseProperties, "ConsolePause", "false"); - } + TargetFramework = "net8.0-android"; + EnableDefaultItems = false; + AppendTargetFrameworkToOutputPath = false; // These are always set, so the OutputPath and IntermediateOutputPath properties work SetProperty (DebugProperties, KnownProperties.OutputPath, Path.Combine ("bin", debugConfigurationName)); @@ -101,27 +81,8 @@ public void AddSources (params string [] sources) public virtual ProjectRootElement Construct () { - // Workaround for https://github.com/dotnet/msbuild/issues/2554 when using Microsoft.Build.Construction.ProjectRootElement.Create - var msbuildExePathVarName = "MSBUILD_EXE_PATH"; - if (!Builder.UseDotNet && !TestEnvironment.IsWindows) { - Environment.SetEnvironmentVariable (msbuildExePathVarName, typeof (DotNetXamarinProject).Assembly.Location); - } - ProjectRootElement root = null; - try { - root = ProjectRootElement.Create (); - } finally { - if (!Builder.UseDotNet && !TestEnvironment.IsWindows) { - Environment.SetEnvironmentVariable (msbuildExePathVarName, null); - } - } + ProjectRootElement root = ProjectRootElement.Create (); - if (Packages.Any ()) - root.AddItemGroup ().AddItem (BuildActions.None, "packages.config"); - foreach (var pkg in Packages.Where (p => p.AutoAddReferences)) - foreach (var reference in pkg.References) - if (!References.Any (r => r.Include == reference.Include)) - References.Add (reference); - foreach (var pg in PropertyGroups) pg.AddElement (root); @@ -141,37 +102,7 @@ public virtual ProjectRootElement Construct () public override string SaveProject () { - if (Builder.UseDotNet) { - return XmlUtils.ToXml (this); - } - XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003"; - var encoding = Encoding.UTF8; - var root = Construct (); - XDocument document; - using (var stream = new MemoryStream ()) - using (var sw = new StreamWriter (stream, encoding, 8 * 1024, leaveOpen: true)) { - root.Save (sw); - stream.Position = 0; - document = XDocument.Load (stream); - document.Declaration.Encoding = encoding.HeaderName; - var pn = XName.Get ("Project", ns.NamespaceName); - var p = document.Element (pn); - if (p != null) { - //NOTE: when running tests inside VS 2019 "Current" was set here - p.SetAttributeValue ("ToolsVersion", "15.0"); - - var referenceGroup = p.Elements ().FirstOrDefault (x => x.Name.LocalName == "ItemGroup" && x.HasElements && x.Elements ().Any (e => e.Name.LocalName == "Reference")); - if (referenceGroup != null) { - foreach (var pr in PackageReferences) { - //NOTE: without the namespace it puts xmlns="" - var e = XElement.Parse ($""); - e.Name = ns + e.Name.LocalName; - referenceGroup.Add (e); - } - } - } - return document.ToString (); - } + return XmlUtils.ToXml (this); } } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs index afa07f3ce27..514c16f7312 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs @@ -21,7 +21,6 @@ public ProjectBuilder (string projectDirectory) public bool CleanupOnDispose { get; set; } public bool CleanupAfterSuccessfulBuild { get; set; } - public string PackagesDirectory { get; set; } public string ProjectDirectory { get; set; } public string Target { get; set; } @@ -49,9 +48,6 @@ public void Save (XamarinProject project, bool doNotCleanupOnUpdate = false, boo FileSystemUtils.SetDirectoryWriteable (ProjectDirectory); Directory.Delete (ProjectDirectory, true); } - if (Directory.Exists (PackagesDirectory)) { - Directory.Delete (PackagesDirectory, true); - } project.Populate (ProjectDirectory, files); } @@ -67,10 +63,6 @@ public bool Build (XamarinProject project, bool doNotCleanupOnUpdate = false, st Output = project.CreateBuildOutput (this); - if (AutomaticNuGetRestore) { - project.NuGetRestore (Path.Combine (XABuildPaths.TestOutputDirectory, ProjectDirectory), PackagesDirectory); - } - bool result = BuildInternal (Path.Combine (ProjectDirectory, project.ProjectFilePath), Target, parameters, environmentVariables, restore: project.ShouldRestorePackageReferences, binlogName: Path.GetFileNameWithoutExtension (BuildLogFile)); built_before = true; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs index 6485a65c7b5..2de2bbabf23 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/SolutionBuilder.cs @@ -24,8 +24,6 @@ public void Save () foreach (var p in Projects) { using (var pb = new ProjectBuilder (Path.Combine (SolutionPath, p.ProjectName))) { pb.Save (p); - if (AutomaticNuGetRestore) - p.NuGetRestore (Path.Combine (SolutionPath, p.ProjectName), Path.Combine (SolutionPath, "packages")); } } // write a sln. diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs index a3fe0d7a4c0..d38addb60cc 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs @@ -27,7 +27,6 @@ public abstract class XamarinProject public IList CommonProperties { get; private set; } public IList> ItemGroupList { get; private set; } public IList PropertyGroups { get; private set; } - public IList Packages { get; private set; } public IList References { get; private set; } public IList PackageReferences { get; private set; } public string GlobalPackagesFolder { get; set; } = FileSystemUtils.FindNugetGlobalPackageFolder (); @@ -51,10 +50,7 @@ public bool IsRelease { get => isRelease; set { isRelease = value; - - if (Builder.UseDotNet) { - Touch ("Directory.Build.props"); - } + Touch ("Directory.Build.props"); } } @@ -73,35 +69,23 @@ public XamarinProject (string debugConfigurationName = "Debug", string releaseCo common = new PropertyGroup (null, CommonProperties); DebugProperties = new List (); ReleaseProperties = new List (); - if (Builder.UseDotNet) { - debug = new PropertyGroup ($"'$(Configuration)' == '{debugConfigurationName}'", DebugProperties); - release = new PropertyGroup ($"'$(Configuration)' == '{releaseConfigurationName}'", ReleaseProperties); - } else { - debug = new PropertyGroup ($"'$(Configuration)|$(Platform)' == '{debugConfigurationName}|AnyCPU'", DebugProperties); - release = new PropertyGroup ($"'$(Configuration)|$(Platform)' == '{releaseConfigurationName}|AnyCPU'", ReleaseProperties); - } - + debug = new PropertyGroup ($"'$(Configuration)' == '{debugConfigurationName}'", DebugProperties); + release = new PropertyGroup ($"'$(Configuration)' == '{releaseConfigurationName}'", ReleaseProperties); PropertyGroups.Add (common); PropertyGroups.Add (debug); PropertyGroups.Add (release); - - Packages = new List (); Imports = new List (); - if (Builder.UseDotNet) { - //NOTE: for SDK-style projects, we need $(Configuration) set before Microsoft.NET.Sdk.targets - Imports.Add (new Import ("Directory.Build.props") { - TextContent = () => + //NOTE: for SDK-style projects, we need $(Configuration) set before Microsoft.NET.Sdk.targets + Imports.Add (new Import ("Directory.Build.props") { + TextContent = () => $@" {Configuration} true " - }); - } else { - SetProperty (KnownProperties.Configuration, () => Configuration); - } + }); } /// @@ -228,7 +212,6 @@ public virtual BuildOutput CreateBuildOutput (ProjectBuilder builder) } ProjectResource project; - string packages_config_contents; public virtual List Save (bool saveProject = true) { @@ -249,19 +232,6 @@ public virtual List Save (bool saveProject = true) list.Add (project); } - if (Packages.Any ()) { - var contents = "\n" + string.Concat (Packages.Select (p => string.Format (" \n", - p.Id, p.Version, p.TargetFramework))) + ""; - var timestamp = contents != packages_config_contents ? default (DateTimeOffset?) : DateTimeOffset.MinValue; - list.Add (new ProjectResource () { - Timestamp = timestamp, - Path = "packages.config", - Content = packages_config_contents = contents, - }); - } else { - packages_config_contents = null; - } - foreach (var ig in ItemGroupList) list.AddRange (ig.Select (s => new ProjectResource () { Timestamp = s.Timestamp, @@ -382,34 +352,6 @@ public virtual void UpdateProjectFiles (string directory, IEnumerable Console.WriteLine (e.Data); - process.ErrorDataReceived += (sender, e) => Console.Error.WriteLine (e.Data); - process.Start (); - process.BeginOutputReadLine (); - process.BeginErrorReadLine (); - process.WaitForExit (); - } - } - public virtual string ProcessSourceTemplate (string source) { return source.Replace ("${ROOT_NAMESPACE}", RootNamespace ?? ProjectName).Replace ("${PROJECT_NAME}", ProjectName); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Utilities/ProjectExtensions.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Utilities/ProjectExtensions.cs index 42473207e1d..82891c8360c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Utilities/ProjectExtensions.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Utilities/ProjectExtensions.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; namespace Xamarin.ProjectTools @@ -7,26 +8,20 @@ public static class ProjectExtensions /// /// Sets $(AndroidSupportedAbis) or $(RuntimeIdentifiers) depending if running under dotnet /// + [Obsolete ("SetAndroidSupportedAbis is deprecated, please use SetRuntimeIdentifiers instead.")] public static void SetAndroidSupportedAbis (this IShortFormProject project, params string [] abis) { - if (Builder.UseDotNet) { - project.SetRuntimeIdentifiers (abis); - } else { - project.SetAndroidSupportedAbis (string.Join (";", abis)); - } + project.SetRuntimeIdentifiers (abis); } /// /// Sets $(AndroidSupportedAbis) or $(RuntimeIdentifiers) depending if running under dotnet /// - /// A semi-colon-delimited list of ABIs + /// A semi-colon-delimited list of ABIs + [Obsolete ("SetAndroidSupportedAbis is deprecated, please use SetRuntimeIdentifiers instead.")] public static void SetAndroidSupportedAbis (this IShortFormProject project, string abis) { - if (Builder.UseDotNet) { - project.SetRuntimeIdentifiers (abis.Split (';')); - } else { - project.SetProperty (KnownProperties.AndroidSupportedAbis, abis); - } + project.SetRuntimeIdentifiers (abis.Split (';')); } public static void SetRuntimeIdentifier (this IShortFormProject project, string androidAbi) diff --git a/tests/MSBuildDeviceIntegration/Tests/AotProfileTests.cs b/tests/MSBuildDeviceIntegration/Tests/AotProfileTests.cs index df4eca72697..b63b3f9d16c 100644 --- a/tests/MSBuildDeviceIntegration/Tests/AotProfileTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/AotProfileTests.cs @@ -9,6 +9,11 @@ namespace Xamarin.Android.Build.Tests [Category ("UsesDevice"), Category ("AOT"), Category ("ProfiledAOT")] public class AotProfileTests : DeviceTest { + [TearDown] + protected void ClearProp () + { + ClearShellProp ("debug.mono.profile"); + } readonly string PermissionManifest = @" @@ -19,6 +24,7 @@ public class AotProfileTests : DeviceTest "; [Test] + [NonParallelizable] public void BuildBasicApplicationAndAotProfileIt () { var proj = new XamarinAndroidApplicationProject () { @@ -26,12 +32,10 @@ public void BuildBasicApplicationAndAotProfileIt () AotAssemblies = false, }; proj.SetAndroidSupportedAbis ("armeabi-v7a", "x86", "x86_64"); - - if (Builder.UseDotNet) { - // TODO: only needed in .NET 6+ - // See https://github.com/dotnet/runtime/issues/56989 - proj.PackageReferences.Add (KnownPackages.Mono_AotProfiler_Android); - } + + // TODO: only needed in .NET 6+ + // See https://github.com/dotnet/runtime/issues/56989 + proj.PackageReferences.Add (KnownPackages.Mono_AotProfiler_Android); var port = 9000 + new Random ().Next (1000); proj.SetProperty ("AndroidAotProfilerPort", port.ToString ()); @@ -44,7 +48,7 @@ public void BuildBasicApplicationAndAotProfileIt () b.BuildLogFile = "build2.log"; // Need execute permission - if (Builder.UseDotNet && !IsWindows) { + if (!IsWindows) { var aprofutil = Path.Combine (Root, b.ProjectDirectory, "aprofutil"); RunProcess ("chmod", $"u+x {aprofutil}"); } diff --git a/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs b/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs index 78538e50734..cc83d72b5d3 100644 --- a/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/BundleToolTests.cs @@ -167,47 +167,23 @@ public void BaseZip () expectedFiles.Add ("root/assemblies/UnnamedProject.dll"); } - if (Builder.UseDotNet) { - //These are random files from Google Play Services .aar files - expectedFiles.Add ("root/play-services-base.properties"); - expectedFiles.Add ("root/play-services-basement.properties"); - expectedFiles.Add ("root/play-services-maps.properties"); - expectedFiles.Add ("root/play-services-tasks.properties"); - } else { - if (usesAssemblyBlobs) { - expectedFiles.Add ($"{blobEntryPrefix}mscorlib.dll"); - expectedFiles.Add ($"{blobEntryPrefix}System.Core.dll"); - expectedFiles.Add ($"{blobEntryPrefix}System.dll"); - expectedFiles.Add ($"{blobEntryPrefix}System.Runtime.Serialization.dll"); - } else { - expectedFiles.Add ("root/assemblies/mscorlib.dll"); - expectedFiles.Add ("root/assemblies/System.Core.dll"); - expectedFiles.Add ("root/assemblies/System.dll"); - expectedFiles.Add ("root/assemblies/System.Runtime.Serialization.dll"); - } + //These are random files from Google Play Services .aar files + expectedFiles.Add ("root/play-services-base.properties"); + expectedFiles.Add ("root/play-services-basement.properties"); + expectedFiles.Add ("root/play-services-maps.properties"); + expectedFiles.Add ("root/play-services-tasks.properties"); - //These are random files from Google Play Services .aar files - expectedFiles.Add ("root/build-data.properties"); - expectedFiles.Add ("root/com/google/api/client/repackaged/org/apache/commons/codec/language/dmrules.txt"); - expectedFiles.Add ("root/error_prone/Annotations.gwt.xml"); - expectedFiles.Add ("root/protobuf.meta"); - } foreach (var abi in Abis) { expectedFiles.Add ($"lib/{abi}/libmonodroid.so"); expectedFiles.Add ($"lib/{abi}/libmonosgen-2.0.so"); expectedFiles.Add ($"lib/{abi}/libxamarin-app.so"); - if (Builder.UseDotNet) { - if (usesAssemblyBlobs) { - expectedFiles.Add ($"{blobEntryPrefix}System.Private.CoreLib.dll"); - } else { - expectedFiles.Add ($"root/assemblies/{abi}/System.Private.CoreLib.dll"); - } - expectedFiles.Add ($"lib/{abi}/libSystem.IO.Compression.Native.so"); - expectedFiles.Add ($"lib/{abi}/libSystem.Native.so"); + if (usesAssemblyBlobs) { + expectedFiles.Add ($"{blobEntryPrefix}System.Private.CoreLib.dll"); } else { - expectedFiles.Add ($"lib/{abi}/libmono-native.so"); - expectedFiles.Add ($"lib/{abi}/libmono-btls-shared.so"); + expectedFiles.Add ($"root/assemblies/{abi}/System.Private.CoreLib.dll"); } + expectedFiles.Add ($"lib/{abi}/libSystem.IO.Compression.Native.so"); + expectedFiles.Add ($"lib/{abi}/libSystem.Native.so"); } foreach (var expected in expectedFiles) { CollectionAssert.Contains (contents, expected, $"`{baseZip}` did not contain `{expected}`"); @@ -249,47 +225,23 @@ public void AppBundle () expectedFiles.Add ("base/root/assemblies/UnnamedProject.dll"); } - if (Builder.UseDotNet) { - //These are random files from Google Play Services .aar files - expectedFiles.Add ("base/root/play-services-base.properties"); - expectedFiles.Add ("base/root/play-services-basement.properties"); - expectedFiles.Add ("base/root/play-services-maps.properties"); - expectedFiles.Add ("base/root/play-services-tasks.properties"); - } else { - if (usesAssemblyBlobs) { - expectedFiles.Add ($"{blobEntryPrefix}mscorlib.dll"); - expectedFiles.Add ($"{blobEntryPrefix}System.Core.dll"); - expectedFiles.Add ($"{blobEntryPrefix}System.dll"); - expectedFiles.Add ($"{blobEntryPrefix}System.Runtime.Serialization.dll"); - } else { - expectedFiles.Add ("base/root/assemblies/mscorlib.dll"); - expectedFiles.Add ("base/root/assemblies/System.Core.dll"); - expectedFiles.Add ("base/root/assemblies/System.dll"); - expectedFiles.Add ("base/root/assemblies/System.Runtime.Serialization.dll"); - } + //These are random files from Google Play Services .aar files + expectedFiles.Add ("base/root/play-services-base.properties"); + expectedFiles.Add ("base/root/play-services-basement.properties"); + expectedFiles.Add ("base/root/play-services-maps.properties"); + expectedFiles.Add ("base/root/play-services-tasks.properties"); - //These are random files from Google Play Services .aar files - expectedFiles.Add ("base/root/build-data.properties"); - expectedFiles.Add ("base/root/com/google/api/client/repackaged/org/apache/commons/codec/language/dmrules.txt"); - expectedFiles.Add ("base/root/error_prone/Annotations.gwt.xml"); - expectedFiles.Add ("base/root/protobuf.meta"); - } foreach (var abi in Abis) { expectedFiles.Add ($"base/lib/{abi}/libmonodroid.so"); expectedFiles.Add ($"base/lib/{abi}/libmonosgen-2.0.so"); expectedFiles.Add ($"base/lib/{abi}/libxamarin-app.so"); - if (Builder.UseDotNet) { - if (usesAssemblyBlobs) { - expectedFiles.Add ($"{blobEntryPrefix}System.Private.CoreLib.dll"); - } else { - expectedFiles.Add ($"base/root/assemblies/{abi}/System.Private.CoreLib.dll"); - } - expectedFiles.Add ($"base/lib/{abi}/libSystem.IO.Compression.Native.so"); - expectedFiles.Add ($"base/lib/{abi}/libSystem.Native.so"); + if (usesAssemblyBlobs) { + expectedFiles.Add ($"{blobEntryPrefix}System.Private.CoreLib.dll"); } else { - expectedFiles.Add ($"base/lib/{abi}/libmono-native.so"); - expectedFiles.Add ($"base/lib/{abi}/libmono-btls-shared.so"); + expectedFiles.Add ($"base/root/assemblies/{abi}/System.Private.CoreLib.dll"); } + expectedFiles.Add ($"base/lib/{abi}/libSystem.IO.Compression.Native.so"); + expectedFiles.Add ($"base/lib/{abi}/libSystem.Native.so"); } foreach (var expected in expectedFiles) { CollectionAssert.Contains (contents, expected, $"`{aab}` did not contain `{expected}`"); diff --git a/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs b/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs index 5acf58203bd..04368461f3b 100755 --- a/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs +++ b/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs @@ -62,7 +62,7 @@ public void ApplicationRunsWithoutDebugger ([Values (false, true)] bool isReleas proj.SetAndroidSupportedAbis ("armeabi-v7a", "x86", "x86_64"); } proj.SetDefaultTargetDevice (); - if (Builder.UseDotNet && isRelease) { + if (isRelease) { // bundle tool does NOT support embeddedDex files it seems. useEmbeddedDex = false; } diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index ea9f5da4c7c..84473a66f79 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -290,14 +290,13 @@ public class LinkModeFullClass { }, }, }; - if (Builder.UseDotNet) { - // NOTE: workaround for netcoreapp3.0 dependency being included along with monoandroid8.0 - // See: https://www.nuget.org/packages/SQLitePCLRaw.bundle_green/2.0.3 - proj.PackageReferences.Add (new Package { - Id = "SQLitePCLRaw.provider.dynamic_cdecl", - Version = "2.0.3", - }); - } + + // NOTE: workaround for netcoreapp3.0 dependency being included along with monoandroid8.0 + // See: https://www.nuget.org/packages/SQLitePCLRaw.bundle_green/2.0.3 + proj.PackageReferences.Add (new Package { + Id = "SQLitePCLRaw.provider.dynamic_cdecl", + Version = "2.0.3", + }); proj.AndroidManifest = proj.AndroidManifest.Replace ("", ""); proj.SetAndroidSupportedAbis ("armeabi-v7a", "arm64-v8a", "x86", "x86_64"); @@ -349,9 +348,7 @@ public void JsonDeserializationCreatesJavaHandle ([Values (false, true)] bool is } proj.References.Add (new BuildItem.Reference ("System.Runtime.Serialization")); - - if (Builder.UseDotNet) - proj.References.Add (new BuildItem.Reference ("System.Runtime.Serialization.Json")); + proj.References.Add (new BuildItem.Reference ("System.Runtime.Serialization.Json")); proj.MainActivity = proj.DefaultMainActivity.Replace ("//${AFTER_ONCREATE}", @"TestJsonDeserializationCreatesJavaHandle(); @@ -443,13 +440,6 @@ public void RunWithInterpreterEnabled ([Values (false, true)] bool isRelease) builder.BuildLogFile = "install.log"; Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); - if (!Builder.UseDotNet) { - foreach (var abi in abis) { - Assert.IsTrue (builder.LastBuildOutput.ContainsText (Path.Combine ($"interpreter-{abi}", "libmono-native.so")), $"interpreter-{abi}/libmono-native.so should be used."); - Assert.IsTrue (builder.LastBuildOutput.ContainsText (Path.Combine ($"interpreter-{abi}", "libmonosgen-2.0.so")), $"interpreter-{abi}/libmonosgen-2.0.so should be used."); - } - } - RunAdbCommand ("shell setprop debug.mono.log all"); var logProp = RunAdbCommand ("shell getprop debug.mono.log")?.Trim (); Assert.AreEqual (logProp, "all", "The debug.mono.log prop was not set correctly."); @@ -465,7 +455,7 @@ public void RunWithInterpreterEnabled ([Values (false, true)] bool isRelease) timeout: timeoutInSeconds); var didStart = WaitForActivityToStart (proj.PackageName, "MainActivity", Path.Combine (Root, builder.ProjectDirectory, "startup-logcat.log"), timeoutInSeconds); - RunAdbCommand ("shell setprop debug.mono.log \"''\""); + ClearShellProp ("debug.mono.log"); logProp = RunAdbCommand ("shell getprop debug.mono.log")?.Trim (); Assert.AreEqual (logProp, string.Empty, "The debug.mono.log prop was not unset correctly."); Assert.IsTrue (didPrintInterpMessage, "logcat output did not contain 'Enabling Mono Interpreter'."); @@ -480,9 +470,6 @@ public void RunWithLLVMEnabled () }; proj.SetAndroidSupportedAbis ("armeabi-v7a", "arm64-v8a", "x86", "x86_64"); proj.SetProperty ("EnableLLVM", true.ToString ()); - if (!Builder.UseDotNet) { - proj.AotAssemblies = true; - } builder = CreateApkBuilder (); Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); @@ -517,10 +504,6 @@ bool SeenFailedToLoad (string line) [Test] public void ResourceDesignerWithNuGetReference ([Values ("net8.0-android")] string dotnetTargetFramework) { - if (!Builder.UseDotNet) { - Assert.Ignore ("Skipping. Test not relevant under Classic."); - } - // Build a NuGet Package var nuget = new XamarinAndroidLibraryProject () { Sdk = "Xamarin.Legacy.Sdk/0.2.0-alpha4", @@ -837,10 +820,8 @@ private void OnPaintSurface(object sender, SKPaintSurfaceEventArgs e) [Test] - public void CheckResouceIsOverridden ([Values (true, false)] bool useAapt2) + public void CheckResouceIsOverridden () { - AssertAaptSupported (useAapt2); - var library = new XamarinAndroidLibraryProject () { ProjectName = "Library1", AndroidResources = { @@ -870,16 +851,12 @@ public void CheckResouceIsOverridden ([Values (true, false)] bool useAapt2) new BuildItem.ProjectReference ("..\\Library2\\Library2.csproj"), }, }; - library.AndroidUseAapt2 = - library2.AndroidUseAapt2 = - app.AndroidUseAapt2 = useAapt2; app.LayoutMain = app.LayoutMain.Replace ("@string/hello", "@string/hello_me"); using (var l1 = CreateDllBuilder (Path.Combine ("temp", TestName, library.ProjectName))) using (var l2 = CreateDllBuilder (Path.Combine ("temp", TestName, library2.ProjectName))) using (var b = CreateApkBuilder (Path.Combine ("temp", TestName, app.ProjectName))) { b.ThrowOnBuildFailure = false; - string apiLevel; - app.TargetFrameworkVersion = b.LatestTargetFrameworkVersion (out apiLevel); + b.LatestTargetFrameworkVersion (out string apiLevel); app.SupportedOSPlatformVersion = "24"; app.AndroidManifest = $@" @@ -914,9 +891,8 @@ public void CheckResouceIsOverridden ([Values (true, false)] bool useAapt2) }; library2.References.Add (new BuildItem.ProjectReference ("..\\Library1\\Library1.csproj")); - app.AndroidUseAapt2 = useAapt2; app.LayoutMain = app.LayoutMain.Replace ("@string/hello", "@string/hello_me"); - app.TargetFrameworkVersion = b.LatestTargetFrameworkVersion (out apiLevel); + b.LatestTargetFrameworkVersion (out apiLevel); app.SupportedOSPlatformVersion = "24"; app.AndroidManifest = $@" diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs index d77fec4f228..f84aaaf5328 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs @@ -173,13 +173,10 @@ public void InstallWithoutSharedRuntime () }; proj.SetProperty (proj.ReleaseProperties, "Optimize", false); proj.SetProperty (proj.ReleaseProperties, "DebugType", "none"); - if (Builder.UseDotNet) { - // NOTE: in .NET 6, EmbedAssembliesIntoApk=true by default for Release builds - proj.SetProperty (proj.ReleaseProperties, "EmbedAssembliesIntoApk", "false"); - proj.SetProperty (proj.ReleaseProperties, "AndroidPackageFormat", "apk"); - } else { - proj.RemoveProperty (proj.ReleaseProperties, "EmbedAssembliesIntoApk"); - } + // NOTE: in .NET 6, EmbedAssembliesIntoApk=true by default for Release builds + proj.SetProperty (proj.ReleaseProperties, "EmbedAssembliesIntoApk", "false"); + proj.SetProperty (proj.ReleaseProperties, "AndroidPackageFormat", "apk"); + var abis = new [] { "armeabi-v7a", "x86", "x86_64" }; proj.SetAndroidSupportedAbis (abis); using (var builder = CreateApkBuilder ()) { @@ -191,12 +188,7 @@ public void InstallWithoutSharedRuntime () proj.OutputPath, $"{proj.PackageName}-Signed.apk"); using (var apk = ZipHelper.OpenZip (apkPath)) { foreach (var abi in abis) { - string runtimeAbiName; - if (Builder.UseDotNet) { - runtimeAbiName = AbiUtils.AbiToRuntimeIdentifier (abi); - } else { - runtimeAbiName = abi; - } + string runtimeAbiName = AbiUtils.AbiToRuntimeIdentifier (abi); var runtime = runtimeInfo.FirstOrDefault (x => x.Abi == runtimeAbiName && x.Runtime == "debug"); Assert.IsNotNull (runtime, "Could not find the expected runtime."); var inApk = ZipHelper.ReadFileFromZip (apk, String.Format ("lib/{0}/{1}", abi, runtime.Name)); @@ -210,11 +202,7 @@ public void InstallWithoutSharedRuntime () // "The Shared Runtime should not have been installed."); var directorylist = GetContentFromAllOverrideDirectories (proj.PackageName); StringAssert.Contains ($"{proj.ProjectName}.dll", directorylist, $"{proj.ProjectName}.dll should exist in the .__override__ directory."); - if (Builder.UseDotNet) - StringAssert.Contains ($"System.Private.CoreLib.dll", directorylist, $"System.Private.CoreLib.dll should exist in the .__override__ directory."); - else - StringAssert.Contains ($"System.dll", directorylist, $"System.dll should exist in the .__override__ directory."); - + StringAssert.Contains ($"System.Private.CoreLib.dll", directorylist, $"System.Private.CoreLib.dll should exist in the .__override__ directory."); StringAssert.Contains ($"Mono.Android.dll", directorylist, $"Mono.Android.dll should exist in the .__override__ directory."); Assert.IsTrue (builder.Uninstall (proj), "unnstall should have succeeded."); } @@ -263,10 +251,6 @@ public void ToggleFastDev () Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); var directorylist = GetContentFromAllOverrideDirectories (proj.PackageName); StringAssert.Contains ($"{proj.ProjectName}.dll", directorylist, $"{proj.ProjectName}.dll should exist in the .__override__ directory."); - // Configuration files are not supported in One .NET, we don't need to make sure that they're fast deployed. - if (!Builder.UseDotNet) { - StringAssert.Contains ($"{proj.ProjectName}.dll.config", directorylist, $"{proj.ProjectName}.dll.config should exist in the .__override__ directory."); - } //Now toggle FastDev to OFF proj.EmbedAssembliesIntoApk = true; @@ -340,22 +324,16 @@ public void LoggingPropsShouldCreateOverrideDirForRelease () proj.AndroidManifest = proj.AndroidManifest.Replace (" diff --git a/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs b/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs index 0b44e54f68c..80c85755b5b 100644 --- a/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs +++ b/tests/MSBuildDeviceIntegration/Tests/PerformanceTest.cs @@ -50,10 +50,8 @@ void Profile (ProjectBuilder builder, Action action, [CallerMemb Assert.Fail ($"No timeout value found for a key of {caller}"); } - if (Builder.UseDotNet) { - //TODO: there is currently a slight performance regression in .NET 6 - expected += 500; - } + //TODO: Update baselines in MSBuildDeviceIntegration.csv, there is currently a slight performance regression in .NET 6 + expected += 500; action (builder); var actual = GetDurationFromBinLog (builder);