diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets
index 2c355fea155915..2da19d5173d4f4 100644
--- a/eng/testing/tests.mobile.targets
+++ b/eng/testing/tests.mobile.targets
@@ -108,6 +108,13 @@
AndroidTestRunner.dll
+
+
+ <_AndroidEnv Condition="'$(XUnitSingleThreadedMode)' == 'true'" Include="XUNIT_SINGLE_THREADED">
+ 1
+
+
+
@(MonoAOTCompilerDefaultAotArguments, ';')
@@ -140,6 +147,7 @@
MonoRuntimeHeaders="$(MicrosoftNetCoreAppRuntimePackNativeDir)include\mono-2.0"
Assemblies="@(BundleAssemblies)"
MainLibraryFileName="$(MainLibraryFileName)"
+ EnvironmentVariables="@(_AndroidEnv)"
ForceAOT="$(RunAOTCompilation)"
ForceInterpreter="$(MonoForceInterpreter)"
StripDebugSymbols="False"
diff --git a/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs b/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs
index ee58a16f4436eb..e181c37290adcd 100644
--- a/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs
+++ b/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs
@@ -30,7 +30,8 @@ public static async Task Main(string[] args)
int exitCode = 0;
s_MainTestName = Path.GetFileNameWithoutExtension(s_testLibs[0]);
string? verbose = Environment.GetEnvironmentVariable("XUNIT_VERBOSE")?.ToLower();
- var simpleTestRunner = new SimpleAndroidTestRunner(verbose == "true" || verbose == "1");
+ bool enableMaxThreads = (Environment.GetEnvironmentVariable("XUNIT_SINGLE_THREADED") != "1");
+ var simpleTestRunner = new SimpleAndroidTestRunner(verbose == "true" || verbose == "1", enableMaxThreads);
simpleTestRunner.TestsCompleted += (e, result) =>
{
if (result.FailedTests > 0)
@@ -42,17 +43,14 @@ public static async Task Main(string[] args)
return exitCode;
}
- public SimpleAndroidTestRunner(bool verbose)
+ public SimpleAndroidTestRunner(bool verbose, bool enableMaxThreads)
{
- if (verbose)
- {
- MinimumLogLevel = MinimumLogLevel.Verbose;
- _maxParallelThreads = 1;
- }
- else
+ MinimumLogLevel = (verbose) ? MinimumLogLevel.Verbose : MinimumLogLevel.Info;
+ _maxParallelThreads = (enableMaxThreads) ? Environment.ProcessorCount : 1;
+
+ if (!enableMaxThreads)
{
- MinimumLogLevel = MinimumLogLevel.Info;
- _maxParallelThreads = Environment.ProcessorCount;
+ Console.WriteLine("XUNIT: SINGLE THREADED MODE ENABLED");
}
}
diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj b/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj
index 3fce6c8a16ea71..26d518fc740def 100644
--- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj
+++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj
@@ -11,9 +11,12 @@
$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))
$(DefineConstants);Unix
- true
true
+
+ true
+ true
+
diff --git a/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj b/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj
index 889dca4802564c..8ee00a560deb0d 100644
--- a/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj
+++ b/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj
@@ -9,7 +9,10 @@
$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))
- true
+
+
+ true
+ true
-
-
-
-
@@ -191,14 +187,6 @@
-
-
-
-
-
-
-
-
diff --git a/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs b/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs
index fcf71c0e6f68e3..b2ae7276fe90b9 100644
--- a/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs
+++ b/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs
@@ -28,6 +28,11 @@ public class AndroidAppBuilderTask : Task
///
public ITaskItem[] Assemblies { get; set; } = Array.Empty();
+ ///
+ /// The set of environment variables to provide to the native embedded application
+ ///
+ public ITaskItem[] EnvironmentVariables { get; set; } = Array.Empty();
+
///
/// Prefer FullAOT mode for Emulator over JIT
///
@@ -103,6 +108,7 @@ public override bool Execute()
apkBuilder.KeyStorePath = KeyStorePath;
apkBuilder.ForceInterpreter = ForceInterpreter;
apkBuilder.ForceAOT = ForceAOT;
+ apkBuilder.EnvironmentVariables = EnvironmentVariables;
apkBuilder.StaticLinkedRuntime = StaticLinkedRuntime;
apkBuilder.RuntimeComponents = RuntimeComponents;
apkBuilder.DiagnosticPorts = DiagnosticPorts;
diff --git a/src/tasks/AndroidAppBuilder/ApkBuilder.cs b/src/tasks/AndroidAppBuilder/ApkBuilder.cs
index d11c8da8b79711..b6acdc48592f1c 100644
--- a/src/tasks/AndroidAppBuilder/ApkBuilder.cs
+++ b/src/tasks/AndroidAppBuilder/ApkBuilder.cs
@@ -27,6 +27,7 @@ public class ApkBuilder
public string? KeyStorePath { get; set; }
public bool ForceInterpreter { get; set; }
public bool ForceAOT { get; set; }
+ public ITaskItem[] EnvironmentVariables { get; set; } = Array.Empty();
public bool InvariantGlobalization { get; set; }
public bool EnableRuntimeLogging { get; set; }
public bool StaticLinkedRuntime { get; set; }
@@ -371,8 +372,17 @@ public ApkBuilder(TaskLoggingHelper logger)
if (!string.IsNullOrEmpty(NativeMainSource))
File.Copy(NativeMainSource, javaActivityPath, true);
+ string envVariables = "";
+ foreach (ITaskItem item in EnvironmentVariables)
+ {
+ string name = item.ItemSpec;
+ string value = item.GetMetadata("Value");
+ envVariables += $"\t\tsetEnv(\"{name}\", \"{value}\");\n";
+ }
+
string monoRunner = Utils.GetEmbeddedResource("MonoRunner.java")
- .Replace("%EntryPointLibName%", Path.GetFileName(mainLibraryFileName));
+ .Replace("%EntryPointLibName%", Path.GetFileName(mainLibraryFileName))
+ .Replace("%EnvVariables%", envVariables);
File.WriteAllText(monoRunnerPath, monoRunner);
diff --git a/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java b/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java
index 1f9654c0acf909..700d95e123f07a 100644
--- a/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java
+++ b/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java
@@ -65,6 +65,8 @@ public void onCreate(Bundle arguments) {
argsToForward = argsList.toArray(new String[argsList.size()]);
}
+%EnvVariables%
+
super.onCreate(arguments);
start();
}