Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions eng/pipelines/arcade/setup-test-env.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,14 @@ steps:
fetchDepth: 1
clean: true

# Enable KVM for Android tests on Linux
- bash: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
displayName: Enable KVM
condition: and(succeeded(), eq(variables['Agent.OS'], 'Linux'))

- template: /eng/pipelines/common/provision.yml@self
parameters:
checkoutDirectory: '$(System.DefaultWorkingDirectory)'
Expand Down
4 changes: 3 additions & 1 deletion src/DotNet/DotNet.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,9 @@
<!-- Run 'dotnet workload install' for the current running 'dotnet' install -->
<ItemGroup>
<_WorkloadSource Include="$(NugetArtifactsPath)" />
<_LocalWorkloadIds Include="maui" />
<!-- On Linux, install maui-android instead of maui to avoid iOS/macOS dependencies -->
<_LocalWorkloadIds Include="maui-android" Condition="$([MSBuild]::IsOSPlatform('linux'))" />
<_LocalWorkloadIds Include="maui" Condition="!$([MSBuild]::IsOSPlatform('linux'))" />

<_LocalWorkloadIds Include="tizen" Condition=" '$(IncludeTizenTargetFrameworks)' == 'true' " />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using Microsoft.Maui.IntegrationTests.Android;

namespace Microsoft.Maui.IntegrationTests
Expand Down Expand Up @@ -94,6 +95,12 @@ public void RunOnAndroid(string id, string framework, string config, string? tri
Assert.True(DotnetInternal.New(id, projectDir, framework, output: _output),
$"Unable to create template {id}. Check test output for errors.");

// On Linux, only the maui-android workload is installed. Previous .NET
// templates may still include iOS/macOS TFMs causing NETSDK1178 errors
// during restore. Strip them so only Android remains.
if (TestEnvironment.IsLinux)
StripNonAndroidTfms(projectFile, framework);

var buildProps = BuildProps;
if (!string.IsNullOrEmpty(trimMode))
{
Expand Down Expand Up @@ -128,5 +135,20 @@ void AddInstrumentation(string projectDir)
"MainLauncher = true, Name = \"com.microsoft.mauitemplate.MainActivity\"");
}

static void StripNonAndroidTfms(string projectFile, string framework)
{
var content = File.ReadAllText(projectFile);
var androidTfm = $"{framework}-android";
// Remove conditional TargetFrameworks lines (iOS/macOS/Windows additions)
content = Regex.Replace(content,
@"\s*<TargetFrameworks\s+Condition=""[^""]*"">[^<]*</TargetFrameworks>",
"");
// Set the base TargetFrameworks to Android only
content = Regex.Replace(content,
@"<TargetFrameworks>[^<]*</TargetFrameworks>",
$"<TargetFrameworks>{androidTfm}</TargetFrameworks>");
File.WriteAllText(projectFile, content);
}

}
}
Loading