From cd4607ee38f185446a3c526fe9192be995f383b0 Mon Sep 17 00:00:00 2001 From: Egor Bogatov Date: Tue, 19 May 2020 14:08:03 +0300 Subject: [PATCH] [mono] Enable System.Runtime.Tests on Android (#36655) --- .config/dotnet-tools.json | 2 +- src/libraries/System.Runtime/tests/System/Type/TypeTests.cs | 2 ++ src/mono/netcore/sample/Android/Makefile | 2 +- src/mono/netcore/sample/Android/Program.csproj | 4 ++++ .../tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs | 11 ++++++++++- .../AndroidAppBuilder/Templates/runtime-android.c | 11 ++++++++++- 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index fa00191..fcd0903 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -15,7 +15,7 @@ ] }, "microsoft.dotnet.xharness.cli": { - "version": "1.0.0-prerelease.20264.9", + "version": "1.0.0-prerelease.20265.8", "commands": [ "xharness" ] diff --git a/src/libraries/System.Runtime/tests/System/Type/TypeTests.cs b/src/libraries/System.Runtime/tests/System/Type/TypeTests.cs index 7f8cd63..d45b52c 100644 --- a/src/libraries/System.Runtime/tests/System/Type/TypeTests.cs +++ b/src/libraries/System.Runtime/tests/System/Type/TypeTests.cs @@ -688,6 +688,8 @@ namespace System.Tests [Theory] [MemberData(nameof(GetInterfaceMap_TestData))] + // Android-only, change to TestPlatforms.Android once arcade dependency is updated + [ActiveIssue("https://github.com/dotnet/runtime/issues/36653", TestRuntimes.Mono)] public void GetInterfaceMap(Type interfaceType, Type classType, Tuple[] expectedMap) { InterfaceMapping actualMapping = classType.GetInterfaceMap(interfaceType); diff --git a/src/mono/netcore/sample/Android/Makefile b/src/mono/netcore/sample/Android/Makefile index 32d038d..80211c3 100644 --- a/src/mono/netcore/sample/Android/Makefile +++ b/src/mono/netcore/sample/Android/Makefile @@ -11,7 +11,7 @@ runtimepack: ../../../../.././build.sh Mono+Libs -os Android -arch $(MONO_ARCH) -c $(MONO_CONFIG) apk: clean appbuilder - $(DOTNET) publish -c Release -r android-$(MONO_ARCH) \ + $(DOTNET) publish -c $(MONO_CONFIG) -r android-$(MONO_ARCH) \ /p:Platform=$(MONO_ARCH) /p:DeployAndRun=true clean: diff --git a/src/mono/netcore/sample/Android/Program.csproj b/src/mono/netcore/sample/Android/Program.csproj index d7516dc..406e6fa 100644 --- a/src/mono/netcore/sample/Android/Program.csproj +++ b/src/mono/netcore/sample/Android/Program.csproj @@ -58,9 +58,13 @@ + + + + diff --git a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs index b252a46..409cbb5 100644 --- a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs +++ b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/ApkBuilder.cs @@ -140,7 +140,8 @@ public class ApkBuilder File.WriteAllText(Path.Combine(OutputDir, "CMakeLists.txt"), cmakeLists); string runtimeAndroidSrc = Utils.GetEmbeddedResource("runtime-android.c") - .Replace("%EntryPointLibName%", Path.GetFileName(entryPointLib)); + .Replace("%EntryPointLibName%", Path.GetFileName(entryPointLib) + .Replace("%RID%", GetRid(abi))); File.WriteAllText(Path.Combine(OutputDir, "runtime-android.c"), runtimeAndroidSrc); string cmakeGenArgs = $"-DCMAKE_TOOLCHAIN_FILE={androidToolchain} -DANDROID_ABI=\"{abi}\" -DANDROID_STL=none " + @@ -236,6 +237,14 @@ public class ApkBuilder return (alignedApk, packageId); } + + private static string GetRid(string abi) => abi switch + { + "arm64-v8a" => "android-arm64", + "armeabi-v7a" => "android-arm", + "x86_64" => "android-x64", + _ => "android-" + abi + }; /// /// Scan android SDK for build tools (ignore preview versions) diff --git a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/runtime-android.c b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/runtime-android.c index 8cfdaaf..4a2af6a 100644 --- a/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/runtime-android.c +++ b/tools-local/tasks/mobile.tasks/AndroidAppBuilder/Templates/runtime-android.c @@ -146,7 +146,16 @@ mono_mobile_runtime_init (void) chdir (bundle_path); // TODO: set TRUSTED_PLATFORM_ASSEMBLIES, APP_PATHS and NATIVE_DLL_SEARCH_DIRECTORIES - monovm_initialize(0, NULL, NULL); + + const char* appctx_keys[2]; + appctx_keys[0] = "RUNTIME_IDENTIFIER"; + appctx_keys[1] = "APP_CONTEXT_BASE_DIRECTORY"; + + const char* appctx_values[2]; + appctx_values[0] = "%RID%"; + appctx_values[1] = bundle_path; + + monovm_initialize(2, appctx_keys, appctx_values); mono_debug_init (MONO_DEBUG_FORMAT_MONO); mono_install_assembly_preload_hook (assembly_preload_hook, NULL); -- 2.7.4