diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.AvailableItems.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.AvailableItems.targets index 3e63db73393..9a1e70f9392 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.AvailableItems.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.AvailableItems.targets @@ -100,7 +100,7 @@ This item group populates the Build Action drop-down in IDEs. - + diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.AndroidLibraries.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.AndroidLibraries.targets index aab24a7676b..fce34fc745c 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.AndroidLibraries.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.AndroidLibraries.targets @@ -91,14 +91,16 @@ projects. $(TargetsForTfmSpecificContentInPackage);_IncludeAarInNuGetPackage + Condition=" '$(IncludeBuildOutput)' != 'false' and '$(AndroidApplication)' != 'true' " + DependsOnTargets="_CategorizeAndroidLibraries"> - + + diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs index 2f1fbc095e6..8f4aa643cd4 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs @@ -91,27 +91,34 @@ public Foo () TextContent = () => { return "\n"; } - } + }, + new AndroidItem.AndroidAsset ("Assets\\foo\\foo.txt") { + BinaryContent = () => Array.Empty (), + }, + new AndroidItem.AndroidResource ("Resources\\layout\\MyLayout.axml") { + TextContent = () => "" + }, + new AndroidItem.AndroidResource ("Resources\\raw\\bar.txt") { + BinaryContent = () => Array.Empty (), + }, + new AndroidItem.AndroidLibrary ("sub\\directory\\foo.jar") { + BinaryContent = () => ResourceData.JavaSourceJarTestJar, + }, + new AndroidItem.AndroidLibrary ("sub\\directory\\bar.aar") { + WebContent = "https://repo1.maven.org/maven2/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar", + }, + new AndroidItem.AndroidJavaSource ("JavaSourceTestExtension.java") { + Encoding = Encoding.ASCII, + TextContent = () => ResourceData.JavaSourceTestExtension, + }, } }; - libB.OtherBuildItems.Add (new AndroidItem.AndroidAsset ("Assets\\foo\\foo.txt") { - BinaryContent = () => Array.Empty (), - }); - libB.OtherBuildItems.Add (new AndroidItem.AndroidResource ("Resources\\layout\\MyLayout.axml") { - TextContent = () => "" - }); - libB.OtherBuildItems.Add (new AndroidItem.AndroidResource ("Resources\\raw\\bar.txt") { - BinaryContent = () => Array.Empty (), - }); libB.OtherBuildItems.Add (new AndroidItem.AndroidEnvironment ("env.txt") { TextContent = () => $"{env_var}={env_val}", }); libB.OtherBuildItems.Add (new AndroidItem.AndroidEnvironment ("sub\\directory\\env.txt") { TextContent = () => $"{env_var}={env_val}", }); - libB.OtherBuildItems.Add (new AndroidItem.AndroidLibrary ("sub\\directory\\foo.jar") { - BinaryContent = () => ResourceData.JavaSourceJarTestJar, - }); libB.OtherBuildItems.Add (new AndroidItem.AndroidLibrary ("sub\\directory\\arm64-v8a\\libfoo.so") { BinaryContent = () => Array.Empty (), }); @@ -120,11 +127,6 @@ public Foo () MetadataValues = "Link=x86\\libfoo.so", BinaryContent = () => Array.Empty (), }); - libB.OtherBuildItems.Add (new AndroidItem.AndroidJavaSource ("JavaSourceTestExtension.java") { - Encoding = Encoding.ASCII, - TextContent = () => ResourceData.JavaSourceTestExtension, - Metadata = { { "Bind", "True"} }, - }); libB.AddReference (libC); activity = libB.Sources.FirstOrDefault (s => s.Include () == "MainActivity.cs"); @@ -137,8 +139,10 @@ public Foo () "binding", "bin", $"{libB.ProjectName}.jar").Replace ("\\", "/")); // Check .aar file for class library - var aarPath = Path.Combine (FullProjectDirectory, libB.OutputPath, $"{libB.ProjectName}.aar"); + var libBOutputPath = Path.Combine (FullProjectDirectory, libB.OutputPath); + var aarPath = Path.Combine (libBOutputPath, $"{libB.ProjectName}.aar"); FileAssert.Exists (aarPath); + FileAssert.Exists (Path.Combine (libBOutputPath, "bar.aar")); using (var aar = ZipHelper.OpenZip (aarPath)) { aar.AssertContainsEntry (aarPath, "assets/foo/foo.txt"); aar.AssertContainsEntry (aarPath, "res/layout/mylayout.xml"); @@ -263,7 +267,26 @@ public void DotNetPack (string dotnetVersion, string platform, int apiLevel) Sources = { new BuildItem.Source ("Foo.cs") { TextContent = () => "public class Foo { }", - } + }, + new AndroidItem.AndroidResource ("Resources\\raw\\bar.txt") { + BinaryContent = () => Array.Empty (), + }, + new AndroidItem.AndroidLibrary ("sub\\directory\\foo.jar") { + BinaryContent = () => ResourceData.JavaSourceJarTestJar, + }, + new AndroidItem.AndroidLibrary ("sub\\directory\\bar.aar") { + WebContent = "https://repo1.maven.org/maven2/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar", + }, + new AndroidItem.AndroidJavaSource ("JavaSourceTest.java") { + Encoding = Encoding.ASCII, + TextContent = () => +@"package com.xamarin.android.test.msbuildtest; +public class JavaSourceTest { + public String Say (String quote) { + return quote; + } +}", + }, }, ExtraNuGetConfigSources = { // Projects targeting net6.0 require ref/runtime packs on NuGet.org @@ -273,12 +296,6 @@ public void DotNetPack (string dotnetVersion, string platform, int apiLevel) if (IsPreviewFrameworkVersion (targetFramework)) { proj.SetProperty ("EnablePreviewFeatures", "true"); } - proj.OtherBuildItems.Add (new AndroidItem.AndroidResource ("Resources\\raw\\bar.txt") { - BinaryContent = () => Array.Empty (), - }); - proj.OtherBuildItems.Add (new AndroidItem.AndroidLibrary ("sub\\directory\\foo.jar") { - BinaryContent = () => ResourceData.JavaSourceJarTestJar, - }); proj.OtherBuildItems.Add (new AndroidItem.AndroidLibrary ("sub\\directory\\arm64-v8a\\libfoo.so") { BinaryContent = () => Array.Empty (), }); @@ -287,27 +304,30 @@ public void DotNetPack (string dotnetVersion, string platform, int apiLevel) MetadataValues = "Link=x86\\libfoo.so", BinaryContent = () => Array.Empty (), }); - proj.OtherBuildItems.Add (new AndroidItem.AndroidJavaSource ("JavaSourceTest.java") { - Encoding = Encoding.ASCII, - TextContent = () => @"package com.xamarin.android.test.msbuildtest; -public class JavaSourceTest { - public String Say (String quote) { - return quote; - } -} -", - Metadata = { { "Bind", "True"} }, - } - ); + proj.OtherBuildItems.Add (new AndroidItem.AndroidLibrary (default (Func)) { + Update = () => "nopack.aar", + WebContent = "https://repo1.maven.org/maven2/com/balysv/material-menu/1.1.0/material-menu-1.1.0.aar", + MetadataValues = "Pack=false;Bind=false", + }); var dotnet = CreateDotNetBuilder (proj); Assert.IsTrue (dotnet.Pack (), "`dotnet pack` should succeed"); var nupkgPath = Path.Combine (FullProjectDirectory, proj.OutputPath, "..", $"{proj.ProjectName}.1.0.0.nupkg"); FileAssert.Exists (nupkgPath); - using (var nupkg = ZipHelper.OpenZip (nupkgPath)) { - nupkg.AssertContainsEntry (nupkgPath, $"lib/{dotnetVersion}-android{apiLevel}.0/{proj.ProjectName}.dll"); - nupkg.AssertContainsEntry (nupkgPath, $"lib/{dotnetVersion}-android{apiLevel}.0/{proj.ProjectName}.aar"); + using var nupkg = ZipHelper.OpenZip (nupkgPath); + nupkg.AssertContainsEntry (nupkgPath, $"lib/{dotnetVersion}-android{apiLevel}.0/{proj.ProjectName}.dll"); + nupkg.AssertContainsEntry (nupkgPath, $"lib/{dotnetVersion}-android{apiLevel}.0/{proj.ProjectName}.aar"); + + if (dotnetVersion != "net6.0") { + //TODO: this issue is not fixed in net6.0-android MSBuild targets + nupkg.AssertContainsEntry (nupkgPath, $"lib/{dotnetVersion}-android{apiLevel}.0/bar.aar"); + nupkg.AssertDoesNotContainEntry (nupkgPath, "content/bar.aar"); + nupkg.AssertDoesNotContainEntry (nupkgPath, "content/sub/directory/bar.aar"); + nupkg.AssertDoesNotContainEntry (nupkgPath, $"contentFiles/any/{dotnetVersion}-android{apiLevel}.0/sub/directory/bar.aar"); + nupkg.AssertDoesNotContainEntry (nupkgPath, $"lib/{dotnetVersion}-android{apiLevel}.0/nopack.aar"); + nupkg.AssertDoesNotContainEntry (nupkgPath, "content/nopack.aar"); + nupkg.AssertDoesNotContainEntry (nupkgPath, $"contentFiles/any/{dotnetVersion}-android{apiLevel}.0/nopack.aar"); } }