From ef0e7d7c4d733828c22bc1ea7e9a61d3aaf5ecd7 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Mon, 6 Feb 2023 21:50:41 +0100 Subject: [PATCH 1/9] Remove support for mkbundle Fixes: https://github.com/xamarin/xamarin-android/issues/7764 Remove all usage of the `$(BundleAssemblies)` MSBuild property as well as all the code affected by it. A couple of related properties remain in the `BuildApk` and `GeneratePackageManagerJava` tasks, because they are still assigned to by the debugger targets from `monodroid`: - Stop running bundle test apps on CI - Remove bundle unit tests - Remove the `CodeGen-MkBundle` project from the tests solution - Remove the `Xamarin.Android.MakeBundle-Tests` from the tests solution - Remove all native code (and configuration) related to mkbundle - Warn about `$(BundleAssemblies)` usage in .NET projects --- Configuration.props | 3 +- Xamarin.Android-Tests.sln | 9 -- build-tools/automation/azure-pipelines.yaml | 20 ----- .../installers/create-installers.targets | 1 - build-tools/scripts/RunTests.targets | 16 ---- .../xaprepare/Steps/Step_PrepareLocal.cs | 11 +-- .../Android/Xamarin.Android.Designer.targets | 1 - .../Properties/Resources.resx | 4 + .../Tasks/BuildApk.cs | 2 +- .../Tasks/GeneratePackageManagerJava.cs | 4 - .../AndroidDependenciesTests.cs | 1 - .../Xamarin.Android.Build.Tests/AotTests.cs | 4 +- .../Xamarin.Android.Build.Tests/BuildTest2.cs | 57 ------------ .../IncrementalBuildTest.cs | 1 - .../Tasks/GeneratePackageManagerJavaTests.cs | 1 - .../Utilities/EnvironmentHelper.cs | 51 +++++------ .../Android/KnownProperties.cs | 2 - .../XamarinAndroidApplicationProject.cs | 5 -- .../Utilities/ApplicationConfig.cs | 1 - ...pplicationConfigNativeAssemblyGenerator.cs | 2 - .../Xamarin.Android.Build.Tasks.csproj | 4 - .../Xamarin.Android.Common.targets | 13 ++- src/monodroid/jni/application_dso_stub.cc | 1 - src/monodroid/jni/logger.cc | 4 - src/monodroid/jni/mkbundle-api.h | 35 -------- src/monodroid/jni/monodroid-glue-internal.hh | 1 - src/monodroid/jni/monodroid-glue.cc | 86 +------------------ src/monodroid/jni/xamarin-app.hh | 1 - ...Forms.Performance.Integration.Droid.csproj | 3 +- ...marin.Forms.Performance.Integration.csproj | 5 +- 30 files changed, 40 insertions(+), 309 deletions(-) delete mode 100644 src/monodroid/jni/mkbundle-api.h diff --git a/Configuration.props b/Configuration.props index 1463c7b8184..98356b9724b 100644 --- a/Configuration.props +++ b/Configuration.props @@ -160,8 +160,7 @@ $([System.IO.Path]::PathSeparator) <_TestsAotName Condition=" '$(AotAssemblies)' == 'true' ">-Aot <_TestsProfiledAotName Condition=" '$(AndroidEnableProfiledAot)' == 'true' ">-Profiled - <_TestsBundleName Condition=" '$(BundleAssemblies)' == 'true' ">-Bundle - $(_TestsProfiledAotName)$(_TestsAotName)$(_TestsBundleName) + $(_TestsProfiledAotName)$(_TestsAotName) i686-w64-mingw32 diff --git a/Xamarin.Android-Tests.sln b/Xamarin.Android-Tests.sln index 0b732d451e6..d32380afde2 100644 --- a/Xamarin.Android-Tests.sln +++ b/Xamarin.Android-Tests.sln @@ -34,10 +34,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.FixJavaAbst EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.JcwGen-Tests", "tests\CodeGen-Binding\Xamarin.Android.JcwGen-Tests\Xamarin.Android.JcwGen-Tests.csproj", "{9479B71F-19FE-48F9-AB3F-AE764D76038A}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CodeGen-MkBundle", "CodeGen-MkBundle", "{93CBCEB8-8B64-420C-950C-BCE9CC8C6032}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.MakeBundle-Tests", "tests\CodeGen-MkBundle\Xamarin.Android.MakeBundle-Tests\Xamarin.Android.MakeBundle-Tests.csproj", "{A0B2692E-9FBE-4157-9526-7145F07F2C5A}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ResolveImports", "ResolveImports", "{E49089E4-4CE0-475E-BE9C-0AB4E4D56EE9}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.BindingResolveImportLib1", "tests\ResolveImports\Xamarin.Android.BindingResolveImportLib1\Xamarin.Android.BindingResolveImportLib1.csproj", "{2A0519DF-0DDA-45F7-AC3C-E2992748D364}" @@ -151,10 +147,6 @@ Global {9479B71F-19FE-48F9-AB3F-AE764D76038A}.Debug|Any CPU.Build.0 = Debug|Any CPU {9479B71F-19FE-48F9-AB3F-AE764D76038A}.Release|Any CPU.ActiveCfg = Release|Any CPU {9479B71F-19FE-48F9-AB3F-AE764D76038A}.Release|Any CPU.Build.0 = Release|Any CPU - {A0B2692E-9FBE-4157-9526-7145F07F2C5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A0B2692E-9FBE-4157-9526-7145F07F2C5A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A0B2692E-9FBE-4157-9526-7145F07F2C5A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A0B2692E-9FBE-4157-9526-7145F07F2C5A}.Release|Any CPU.Build.0 = Release|Any CPU {2A0519DF-0DDA-45F7-AC3C-E2992748D364}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2A0519DF-0DDA-45F7-AC3C-E2992748D364}.Debug|Any CPU.Build.0 = Debug|Any CPU {2A0519DF-0DDA-45F7-AC3C-E2992748D364}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -269,7 +261,6 @@ Global {7B9D9F32-973F-49CF-A8F8-05BDFC75556C} = {2EFFECF5-1CCA-4005-AE62-1D6F01C88DF4} {B7476528-C166-40BF-931F-EAEB02247879} = {2EFFECF5-1CCA-4005-AE62-1D6F01C88DF4} {9479B71F-19FE-48F9-AB3F-AE764D76038A} = {2EFFECF5-1CCA-4005-AE62-1D6F01C88DF4} - {A0B2692E-9FBE-4157-9526-7145F07F2C5A} = {93CBCEB8-8B64-420C-950C-BCE9CC8C6032} {2A0519DF-0DDA-45F7-AC3C-E2992748D364} = {E49089E4-4CE0-475E-BE9C-0AB4E4D56EE9} {DD4E2A49-730C-41FD-B6D4-AFB73F94271F} = {E49089E4-4CE0-475E-BE9C-0AB4E4D56EE9} {9802CB35-0BC0-4EE1-9A81-BB40BD97945A} = {E49089E4-4CE0-475E-BE9C-0AB4E4D56EE9} diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 65288f4f5fc..5ebdc5403ad 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -158,16 +158,6 @@ stages: artifactSource: bin/Test$(ApkTestConfiguration)/Mono.Android_Tests-Signed.apk artifactFolder: Profiled-Aot - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Mono.Android_Tests-Bundle - project: tests/Mono.Android-Tests/Mono.Android-Tests.csproj - testResultsFiles: TestResult-Mono.Android_Tests-$(ApkTestConfiguration)-Bundle.xml - extraBuildArgs: /p:BundleAssemblies=true - artifactSource: bin/Test$(ApkTestConfiguration)/Mono.Android_Tests-Signed.apk - artifactFolder: Bundle - - template: yaml-templates/apk-instrumentation.yaml parameters: configuration: $(ApkTestConfiguration) @@ -272,16 +262,6 @@ stages: artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk artifactFolder: Profiled-Aot - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Forms-Performance-Integration-Bundle - project: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj - testResultsFiles: TestResult-apkdiff-Xamarin.Forms_Performance_Integration-Signed-$(ApkTestConfiguration)-Bundle.xml - extraBuildArgs: /p:BundleAssemblies=true - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk - artifactFolder: Bundle - - template: yaml-templates/apk-instrumentation.yaml parameters: configuration: $(ApkTestConfiguration) diff --git a/build-tools/installers/create-installers.targets b/build-tools/installers/create-installers.targets index 3e589147ceb..bcd270f0ad8 100644 --- a/build-tools/installers/create-installers.targets +++ b/build-tools/installers/create-installers.targets @@ -249,7 +249,6 @@ <_MSBuildFiles Include="$(MicrosoftAndroidSdkOutDir)Microsoft.Android.Build.BaseTasks.pdb" /> <_MSBuildFiles Include="$(MicrosoftAndroidSdkOutDir)mkbundle.exe" ExcludeFromAndroidNETSdk="true" /> <_MSBuildFiles Include="$(MicrosoftAndroidSdkOutDir)mkbundle.pdb" ExcludeFromAndroidNETSdk="true" /> - <_MSBuildFiles Include="$(MicrosoftAndroidSdkOutDir)mkbundle-api.h" /> <_MSBuildFiles Include="$(MicrosoftAndroidSdkOutDir)mono-symbolicate.exe" ExcludeFromAndroidNETSdk="true" /> <_MSBuildFiles Include="$(MicrosoftAndroidSdkOutDir)mono-symbolicate.pdb" ExcludeFromAndroidNETSdk="true" /> <_MSBuildFiles Include="$(MicrosoftAndroidSdkOutDir)Mono.CompilerServices.SymbolWriter.dll" /> diff --git a/build-tools/scripts/RunTests.targets b/build-tools/scripts/RunTests.targets index 2ba159f9e9c..5445dab3a85 100644 --- a/build-tools/scripts/RunTests.targets +++ b/build-tools/scripts/RunTests.targets @@ -159,22 +159,6 @@ Condition=" '$(_CrossCompilerAvailable)' == 'True' " Properties="AndroidEnableProfiledAot=True;AotAssemblies=True" /> - - <_ApkTestProjectBundle> - <_BinLog>$(_XABinLogPrefix)-$([System.DateTime]::Now.ToString ("yyyyMMddTHHmmss"))-%(Filename)-Bundle.binlog" - - - - diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_PrepareLocal.cs b/build-tools/xaprepare/xaprepare/Steps/Step_PrepareLocal.cs index 37ff297ba7e..e9ec7ff5f5d 100644 --- a/build-tools/xaprepare/xaprepare/Steps/Step_PrepareLocal.cs +++ b/build-tools/xaprepare/xaprepare/Steps/Step_PrepareLocal.cs @@ -16,16 +16,7 @@ protected override async Task Execute(Context context) var msbuild = new MSBuildRunner (context); string xfTestPath = Path.Combine (BuildPaths.XamarinAndroidSourceRoot, "tests", "Xamarin.Forms-Performance-Integration", "Xamarin.Forms.Performance.Integration.csproj"); - if (!await msbuild.Restore (projectPath: xfTestPath, logTag: "xfperf", binlogName: "prepare-local")) - return false; - - // The Xamarin.Forms PackageReference version varies based on the value of $(BundleAssemblies) - return await msbuild.Restore ( - projectPath: xfTestPath, - logTag: "xfperfbundle", - arguments: new List { "-p:BundleAssemblies=true" }, - binlogName: "prepare-local-bundle" - ); + return await msbuild.Restore (projectPath: xfTestPath, logTag: "xfperf", binlogName: "prepare-local"); } } } diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Designer.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Designer.targets index e3192db607f..13c502141e8 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Designer.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Designer.targets @@ -135,7 +135,6 @@ Copyright (C) 2016 Xamarin. All rights reserved. Debug="$(AndroidIncludeDebugSymbols)" AndroidSequencePointsMode="$(_SequencePointsMode)" EnableSGenConcurrent="$(AndroidEnableSGenConcurrent)" - IsBundledApplication="$(BundleAssemblies)" SupportedAbis="$(_BuildTargetAbis)" AndroidPackageName="$(_AndroidPackage)" EnablePreloadAssembliesDefault="$(_AndroidEnablePreloadAssembliesDefault)" diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx index c36b272704b..174bb98247c 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx @@ -493,6 +493,10 @@ Please change the value to an assembly-qualifed type name which inherits from '{ The following are literal names and should not be translated: '_Microsoft.Android.Resource.Desinger', 'AndroidUseDesignerAssembly', 'true' {0} - The name of the assembly + + The 'BundleAssemblies' property is deprecated and it has no effect on the application build. Equivalent functionality is implemented by the 'AndroidUseAssemblyStore' and 'AndroidEnableAssemblyCompression' properties. + The following are literal names and should not be translated: 'BundleAssemblies', 'AndroidUseAssemblyStore', 'AndroidEnableAssemblyCompression' + Use of AppDomain.CreateDomain() detected in assembly: {0}. .NET 6 and higher will only support a single AppDomain, so this API will no longer be available in Xamarin.Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs b/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs index 28cca622f9b..e479b4ead3b 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/BuildApk.cs @@ -185,7 +185,7 @@ void ExecuteWithAbi (string [] supportedAbis, string apkInputPath, string apkOut AddFileToArchiveIfNewer (apk, dex.ItemSpec, DalvikPath + dexPath, compressionMethod: dexCompressionMethod); } - if (EmbedAssemblies && !BundleAssemblies) { + if (EmbedAssemblies) { AddAssemblies (apk, debug, compress, compressedAssembliesInfo, assemblyStoreApkName); apk.Flush (); } diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs index f9616ef190d..f4d82569e36 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs @@ -53,9 +53,6 @@ public class GeneratePackageManagerJava : AndroidTask [Required] public string Manifest { get; set; } - [Required] - public bool IsBundledApplication { get; set; } - [Required] public string [] SupportedAbis { get; set; } @@ -373,7 +370,6 @@ void AddEnvironment () var appConfState = BuildEngine4.GetRegisteredTaskObjectAssemblyLocal (ProjectSpecificTaskObjectKey (ApplicationConfigTaskState.RegisterTaskObjectKey), RegisteredTaskObjectLifetime.Build); var jniRemappingNativeCodeInfo = BuildEngine4.GetRegisteredTaskObjectAssemblyLocal (ProjectSpecificTaskObjectKey (GenerateJniRemappingNativeCode.JniRemappingNativeCodeInfoKey), RegisteredTaskObjectLifetime.Build); var appConfigAsmGen = new ApplicationConfigNativeAssemblyGenerator (environmentVariables, systemProperties, Log) { - IsBundledApp = IsBundledApplication, UsesMonoAOT = usesMonoAOT, UsesMonoLLVM = EnableLLVM, UsesAssemblyPreload = environmentParser.UsesAssemblyPreload, 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 37971f9a75f..44b3d43b536 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 @@ -56,7 +56,6 @@ public void InstallAndroidDependenciesTest () [TestCase ("AotAssemblies", false)] [TestCase ("AndroidEnableProfiledAot", false)] [TestCase ("EnableLLVM", true)] - [TestCase ("BundleAssemblies", true)] public void GetDependencyNdkRequiredConditions (string property, bool ndkRequired) { var proj = new XamarinAndroidApplicationProject (); 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 3f2ee58ed3a..4672c9a62bf 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 @@ -144,9 +144,7 @@ public void BuildAotApplicationWithNdkAndBundleAndÜmläüts (string supportedAb AotAssemblies = true, PackageName = "com.xamarin.buildaotappwithspecialchars", }; - if (!Builder.UseDotNet) { - proj.BundleAssemblies = true; - } + proj.SetProperty ("AndroidNdkDirectory", AndroidNdkPath); proj.SetAndroidSupportedAbis (supportedAbis); proj.SetProperty ("EnableLLVM", enableLLVM.ToString ()); 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 f27fa07ca22..1ac9ed252bf 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 @@ -1101,63 +1101,6 @@ public void CSharp8Features ([Values (true, false)] bool bindingProject) } } - [Test] - [Category ("SmokeTests"), Category ("MkBundle")] - public void BuildMkBundleApplicationRelease () - { - var proj = new XamarinAndroidApplicationProject () { IsRelease = true, BundleAssemblies = true }; - proj.SetProperty ("AndroidNdkDirectory", AndroidNdkPath); - using (var b = CreateApkBuilder ("temp/BuildMkBundleApplicationRelease", false)) { - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - var assemblies = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, - "bundles", "armeabi-v7a", "assemblies.o"); - Assert.IsTrue (File.Exists (assemblies), "assemblies.o does not exist"); - var libapp = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, - "bundles", "armeabi-v7a", "libmonodroid_bundle_app.so"); - Assert.IsTrue (File.Exists (libapp), "libmonodroid_bundle_app.so does not exist"); - var apk = Path.Combine (Root, b.ProjectDirectory, - proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - using (var zipFile = ZipHelper.OpenZip (apk)) { - Assert.IsNotNull (ZipHelper.ReadFileFromZip (zipFile, - "lib/armeabi-v7a/libmonodroid_bundle_app.so"), - $"lib/armeabi-v7a/libmonodroid_bundle_app.so should be in the {proj.PackageName}-Signed.apk"); - Assert.IsNull (ZipHelper.ReadFileFromZip (zipFile, - Path.Combine ("assemblies", "UnnamedProject.dll")), - $"UnnamedProject.dll should not be in the {proj.PackageName}-Signed.apk"); - } - } - } - - [Test] - [Category ("Minor"), Category ("MkBundle")] - public void BuildMkBundleApplicationReleaseAllAbi () - { - var proj = new XamarinAndroidApplicationProject () { IsRelease = true, BundleAssemblies = true }; - proj.SetProperty ("AndroidNdkDirectory", AndroidNdkPath); - proj.SetAndroidSupportedAbis ("armeabi-v7a", "x86"); - using (var b = CreateApkBuilder ("temp/BuildMkBundleApplicationReleaseAllAbi", false)) { - Assert.IsTrue (b.Build (proj), "Build should have succeeded."); - foreach (var abi in new string [] { "armeabi-v7a", "x86" }) { - var assemblies = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, - "bundles", abi, "assemblies.o"); - Assert.IsTrue (File.Exists (assemblies), abi + " assemblies.o does not exist"); - 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 apk = Path.Combine (Root, b.ProjectDirectory, - proj.OutputPath, $"{proj.PackageName}-Signed.apk"); - using (var zipFile = ZipHelper.OpenZip (apk)) { - Assert.IsNotNull (ZipHelper.ReadFileFromZip (zipFile, - "lib/" + abi + "/libmonodroid_bundle_app.so"), - $"lib/{0}/libmonodroid_bundle_app.so should be in the {proj.PackageName}-Signed.apk", abi); - Assert.IsNull (ZipHelper.ReadFileFromZip (zipFile, - Path.Combine ("assemblies", "UnnamedProject.dll")), - $"UnnamedProject.dll should not be in the {proj.PackageName}-Signed.apk"); - } - } - } - } - static readonly object [] BuildProguardEnabledProjectSource = new object [] { new object [] { /* isRelease */ false, 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 1c16ce4feb2..03647b88517 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 @@ -1090,7 +1090,6 @@ public void BuildIncrementalAot (string supportedAbis, string androidAotMode, bo var path = Path.Combine ("temp", $"BuildAotApplication_{supportedAbis}_{androidAotMode}_{aotAssemblies}_{expectedResult}"); var proj = new XamarinAndroidApplicationProject () { IsRelease = true, - BundleAssemblies = false, AotAssemblies = aotAssemblies, }; if (aotAssemblies) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/GeneratePackageManagerJavaTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/GeneratePackageManagerJavaTests.cs index 71d686ddabf..416e3598350 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/GeneratePackageManagerJavaTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/GeneratePackageManagerJavaTests.cs @@ -74,7 +74,6 @@ public void CheckPackageManagerAssemblyOrder (string[] resolvedUserAssemblies, s MainAssembly = "linked/HelloAndroid.dll", TargetFrameworkVersion = "v6.0", Manifest = Path.Combine (path, "AndroidManifest.xml"), - IsBundledApplication = false, SupportedAbis = new string [] { "x86" , "arm64-v8a" }, AndroidPackageName = "com.microsoft.net6.helloandroid", EnablePreloadAssembliesDefault = false, diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/EnvironmentHelper.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/EnvironmentHelper.cs index c3c30ebae39..5b79d0e8309 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/EnvironmentHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/EnvironmentHelper.cs @@ -43,7 +43,6 @@ public sealed class ApplicationConfig public bool uses_mono_aot; public bool aot_lazy_load; public bool uses_assembly_preload; - public bool is_a_bundled_app; public bool broken_exception_transitions; public bool instant_run_enabled; public bool jni_add_native_method_registration_attribute_present; @@ -67,7 +66,7 @@ public sealed class ApplicationConfig public string android_package_name = String.Empty; } - const uint ApplicationConfigFieldCount = 26; + const uint ApplicationConfigFieldCount = 25; const string ApplicationConfigSymbolName = "application_config"; const string AppEnvironmentVariablesSymbolName = "app_environment_variables"; @@ -226,112 +225,107 @@ static ApplicationConfig ReadApplicationConfig (EnvironmentFile envFile) ret.uses_assembly_preload = ConvertFieldToBool ("uses_assembly_preload", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 4: // is_a_bundled_app: bool / .byte - AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); - ret.is_a_bundled_app = ConvertFieldToBool ("is_a_bundled_app", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); - break; - - case 5: // broken_exception_transitions: bool / .byte + case 4: // broken_exception_transitions: bool / .byte AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); ret.broken_exception_transitions = ConvertFieldToBool ("broken_exception_transitions", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 6: // instant_run_enabled: bool / .byte + case 5: // instant_run_enabled: bool / .byte AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); ret.instant_run_enabled = ConvertFieldToBool ("instant_run_enabled", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 7: // jni_add_native_method_registration_attribute_present: bool / .byte + case 6: // jni_add_native_method_registration_attribute_present: bool / .byte AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); ret.jni_add_native_method_registration_attribute_present = ConvertFieldToBool ("jni_add_native_method_registration_attribute_present", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 8: // have_runtime_config_blob: bool / .byte + case 7: // have_runtime_config_blob: bool / .byte AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); ret.have_runtime_config_blob = ConvertFieldToBool ("have_runtime_config_blob", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 9: // have_assemblies_blob: bool / .byte + case 8: // have_assemblies_blob: bool / .byte AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); ret.have_assemblies_blob = ConvertFieldToBool ("have_assemblies_blob", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 10: // marshal_methods_enabled: bool / .byte + case 9: // marshal_methods_enabled: bool / .byte AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); ret.marshal_methods_enabled = ConvertFieldToBool ("marshal_methods_enabled", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 11: // bound_stream_io_exception_type: byte / .byte + case 10: // bound_stream_io_exception_type: byte / .byte AssertFieldType (envFile.Path, parser.SourceFilePath, ".byte", field [0], item.LineNumber); ret.bound_stream_io_exception_type = ConvertFieldToByte ("bound_stream_io_exception_type", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 12: // package_naming_policy: uint32_t / .word | .long + case 11: // package_naming_policy: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.package_naming_policy = ConvertFieldToUInt32 ("package_naming_policy", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 13: // environment_variable_count: uint32_t / .word | .long + case 12: // environment_variable_count: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.environment_variable_count = ConvertFieldToUInt32 ("environment_variable_count", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 14: // system_property_count: uint32_t / .word | .long + case 13: // system_property_count: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.system_property_count = ConvertFieldToUInt32 ("system_property_count", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 15: // number_of_assemblies_in_apk: uint32_t / .word | .long + case 14: // number_of_assemblies_in_apk: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.number_of_assemblies_in_apk = ConvertFieldToUInt32 ("number_of_assemblies_in_apk", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 16: // bundled_assembly_name_width: uint32_t / .word | .long + case 15: // bundled_assembly_name_width: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.bundled_assembly_name_width = ConvertFieldToUInt32 ("bundled_assembly_name_width", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 17: // number_of_assembly_store_files: uint32_t / .word | .long + case 16: // number_of_assembly_store_files: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.number_of_assembly_store_files = ConvertFieldToUInt32 ("number_of_assembly_store_files", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 18: // number_of_dso_cache_entries: uint32_t / .word | .long + case 17: // number_of_dso_cache_entries: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.number_of_dso_cache_entries = ConvertFieldToUInt32 ("number_of_dso_cache_entries", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 19: // android_runtime_jnienv_class_token: uint32_t / .word | .long + case 18: // android_runtime_jnienv_class_token: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.number_of_dso_cache_entries = ConvertFieldToUInt32 ("android_runtime_jnienv_class_token", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 20: // jnienv_initialize_method_token: uint32_t / .word | .long + case 19: // jnienv_initialize_method_token: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.number_of_dso_cache_entries = ConvertFieldToUInt32 ("jnienv_initialize_method_token", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 21: // jnienv_registerjninatives_method_token: uint32_t / .word | .long + case 20: // jnienv_registerjninatives_method_token: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.number_of_dso_cache_entries = ConvertFieldToUInt32 ("jnienv_registerjninatives_method_token", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 22: // jni_remapping_replacement_type_count: uint32_t / .word | .long + case 21: // jni_remapping_replacement_type_count: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.jni_remapping_replacement_type_count = ConvertFieldToUInt32 ("jni_remapping_replacement_type_count", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 23: // jni_remapping_replacement_method_index_entry_count: uint32_t / .word | .long + case 22: // jni_remapping_replacement_method_index_entry_count: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.jni_remapping_replacement_method_index_entry_count = ConvertFieldToUInt32 ("jni_remapping_replacement_method_index_entry_count", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 24: // mono_components_mask: uint32_t / .word | .long + case 23: // mono_components_mask: uint32_t / .word | .long Assert.IsTrue (expectedUInt32Types.Contains (field [0]), $"Unexpected uint32_t field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); ret.mono_components_mask = ConvertFieldToUInt32 ("mono_components_mask", envFile.Path, parser.SourceFilePath, item.LineNumber, field [1]); break; - case 25: // android_package_name: string / [pointer type] + case 24: // android_package_name: string / [pointer type] Assert.IsTrue (expectedPointerTypes.Contains (field [0]), $"Unexpected pointer field type in '{envFile.Path}:{item.LineNumber}': {field [0]}"); pointers.Add (field [1].Trim ()); break; @@ -434,7 +428,6 @@ static void AssertApplicationConfigIsIdentical (ApplicationConfig firstAppConfig { Assert.AreEqual (firstAppConfig.uses_mono_llvm, secondAppConfig.uses_mono_llvm, $"Field 'uses_mono_llvm' has different value in environment file '{secondEnvFile}' than in environment file '{firstEnvFile}'"); Assert.AreEqual (firstAppConfig.uses_mono_aot, secondAppConfig.uses_mono_aot, $"Field 'uses_mono_aot' has different value in environment file '{secondEnvFile}' than in environment file '{firstEnvFile}'"); - Assert.AreEqual (firstAppConfig.is_a_bundled_app, secondAppConfig.is_a_bundled_app, $"Field 'is_a_bundled_app' has different value in environment file '{secondEnvFile}' than in environment file '{firstEnvFile}'"); Assert.AreEqual (firstAppConfig.environment_variable_count, secondAppConfig.environment_variable_count, $"Field 'environment_variable_count' has different value in environment file '{secondEnvFile}' than in environment file '{firstEnvFile}'"); Assert.AreEqual (firstAppConfig.system_property_count, secondAppConfig.system_property_count, $"Field 'system_property_count' has different value in environment file '{secondEnvFile}' than in environment file '{firstEnvFile}'"); Assert.AreEqual (firstAppConfig.android_package_name, secondAppConfig.android_package_name, $"Field 'android_package_name' has different value in environment file '{secondEnvFile}' than in environment file '{firstEnvFile}'"); 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 f59a3c9cc75..d8b7b63fa51 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 @@ -21,7 +21,6 @@ public static class KnownProperties public const string SupportedOSPlatformVersion = "SupportedOSPlatformVersion"; public const string Deterministic = "Deterministic"; - public const string BundleAssemblies = "BundleAssemblies"; public const string AndroidEnableDesugar = "AndroidEnableDesugar"; public const string AndroidManifestMerger = "AndroidManifestMerger"; public const string AndroidLinkTool = "AndroidLinkTool"; @@ -39,4 +38,3 @@ public static class KnownProperties public const string ImplicitUsings = "ImplicitUsings"; } } - 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 7e462f5cc64..fde6e298fa1 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 @@ -103,11 +103,6 @@ public virtual string DefaultMainActivity { /// public string MinSdkVersion { get; set; } = "19"; - public bool BundleAssemblies { - get { return string.Equals (GetProperty (KnownProperties.BundleAssemblies), "True", StringComparison.OrdinalIgnoreCase); } - set { SetProperty (KnownProperties.BundleAssemblies, value.ToString ()); } - } - string AotAssembliesPropertyName => Builder.UseDotNet ? KnownProperties.RunAOTCompilation : KnownProperties.AotAssemblies; public bool AotAssemblies { diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs index e5a1405b127..25550eb3473 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfig.cs @@ -28,7 +28,6 @@ sealed class ApplicationConfig public bool uses_mono_aot; public bool aot_lazy_load; public bool uses_assembly_preload; - public bool is_a_bundled_app; public bool broken_exception_transitions; public bool instant_run_enabled ; public bool jni_add_native_method_registration_attribute_present; diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigNativeAssemblyGenerator.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigNativeAssemblyGenerator.cs index 16bc2daa34a..6802af86229 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigNativeAssemblyGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ApplicationConfigNativeAssemblyGenerator.cs @@ -149,7 +149,6 @@ sealed class XamarinAndroidBundledAssembly StructureInfo assemblyStoreSingleAssemblyRuntimeDataStructureinfo; StructureInfo assemblyStoreRuntimeDataStructureInfo; - public bool IsBundledApp { get; set; } public bool UsesMonoAOT { get; set; } public bool UsesMonoLLVM { get; set; } public bool UsesAssemblyPreload { get; set; } @@ -196,7 +195,6 @@ public override void Init () uses_mono_aot = UsesMonoAOT, aot_lazy_load = AotEnableLazyLoad, uses_assembly_preload = UsesAssemblyPreload, - is_a_bundled_app = IsBundledApp, broken_exception_transitions = BrokenExceptionTransitions, instant_run_enabled = InstantRunEnabled, jni_add_native_method_registration_attribute_present = JniAddNativeMethodRegistrationAttributePresent, diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj index dd902240461..ad980b06223 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Build.Tasks.csproj @@ -361,10 +361,6 @@ LayoutBinding.cs PreserveNewest - - mkbundle-api.h - PreserveNewest - PreserveNewest diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 8606402f9f1..e103610fad6 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -204,7 +204,6 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. True False - False False @@ -333,7 +332,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. <_AndroidAotStripLibraries Condition=" '$(_AndroidAotStripLibraries)' == '' And '$(AndroidIncludeDebugSymbols)' != 'true' ">True - false + false true True True @@ -560,6 +559,10 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. ResourceName="XA1026_dotnet" Condition=" '$(AndroidUseAapt2)' != 'true' and '$(UsingAndroidNETSdk)' == 'true' " /> + - <_PropertyCacheItems Include="BundleAssemblies=$(BundleAssemblies)" /> <_PropertyCacheItems Include="AotAssemblies=$(AotAssemblies)" /> <_PropertyCacheItems Include="AndroidAddKeepAlives=$(AndroidAddKeepAlives)" /> <_PropertyCacheItems Include="AndroidAotMode=$(AndroidAotMode)" /> @@ -1783,7 +1785,6 @@ because xbuild doesn't support framework reference assemblies. Debug="$(AndroidIncludeDebugSymbols)" AndroidSequencePointsMode="$(_SequencePointsMode)" EnableSGenConcurrent="$(AndroidEnableSGenConcurrent)" - IsBundledApplication="$(BundleAssemblies)" SupportedAbis="@(_BuildTargetAbis)" AndroidPackageName="$(_AndroidPackage)" EnablePreloadAssembliesDefault="$(_AndroidEnablePreloadAssembliesDefault)" @@ -2140,7 +2141,6 @@ because xbuild doesn't support framework reference assemblies. AndroidNdkDirectory="$(_AndroidNdkDirectory)" ApkInputPath="$(_PackagedResources)" ApkOutputPath="$(ApkFileIntermediate)" - BundleAssemblies="$(BundleAssemblies)" BundleNativeLibraries="$(_BundleResultNativeLibraries)" EmbedAssemblies="$(EmbedAssembliesIntoApk)" ResolvedUserAssemblies="@(_ShrunkUserAssemblies);@(_AndroidResolvedSatellitePaths)" @@ -2174,7 +2174,6 @@ because xbuild doesn't support framework reference assemblies. AndroidNdkDirectory="$(_AndroidNdkDirectory)" ApkInputPath="$(_PackagedResources)" ApkOutputPath="$(_BaseZipIntermediate)" - BundleAssemblies="$(BundleAssemblies)" BundleNativeLibraries="$(_BundleResultNativeLibraries)" EmbedAssemblies="$(EmbedAssembliesIntoApk)" ResolvedUserAssemblies="@(_ShrunkUserAssemblies);@(_AndroidResolvedSatellitePaths)" @@ -2759,7 +2758,7 @@ because xbuild doesn't support framework reference assemblies. <_ProjectAndroidManifest>$(ProjectDir)$(AndroidManifest) - <_NdkRequired Condition="'$(BundleAssemblies)' == 'True' Or '$(EnableLLVM)' == 'True'">true + <_NdkRequired Condition="'$(EnableLLVM)' == 'True'">true <_NdkRequired Condition="'$(_NdkRequired)' == ''">false diff --git a/src/monodroid/jni/application_dso_stub.cc b/src/monodroid/jni/application_dso_stub.cc index 5cbc623260a..8a59a03e51a 100644 --- a/src/monodroid/jni/application_dso_stub.cc +++ b/src/monodroid/jni/application_dso_stub.cc @@ -46,7 +46,6 @@ const ApplicationConfig application_config = { .uses_mono_aot = false, .aot_lazy_load = false, .uses_assembly_preload = false, - .is_a_bundled_app = false, .broken_exception_transitions = false, .instant_run_enabled = false, .jni_add_native_method_registration_attribute_present = false, diff --git a/src/monodroid/jni/logger.cc b/src/monodroid/jni/logger.cc index 7edd748b424..57f1ea79957 100644 --- a/src/monodroid/jni/logger.cc +++ b/src/monodroid/jni/logger.cc @@ -197,10 +197,6 @@ init_logging_categories (char*& mono_log_mask, char*& mono_log_level) continue; } - if (set_category ("bundle", param, LOG_BUNDLE)) { - continue; - } - if (set_category ("network", param, LOG_NET)) { continue; } diff --git a/src/monodroid/jni/mkbundle-api.h b/src/monodroid/jni/mkbundle-api.h deleted file mode 100644 index 586f5d26273..00000000000 --- a/src/monodroid/jni/mkbundle-api.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef __MKBUNDLE_API_H -#define __MKBUNDLE_API_H - -#ifdef __cplusplus -using namespace xamarin::android; -#endif - -typedef struct BundleMonoAPI -{ - void (*mono_register_bundled_assemblies) (const MonoBundledAssembly **assemblies); - void (*mono_register_config_for_assembly) (const char* assembly_name, const char* config_xml); - void (*mono_jit_set_aot_mode) (int mode); - void (*mono_aot_register_module) (void** aot_info); - void (*mono_config_parse_memory) (const char *buffer); - void (*mono_register_machine_config) (const char *config_xml); -} BundleMonoAPI; - -#if ANDROID -#include -#include - -#ifdef __cplusplus -[[maybe_unused]] -#endif -static void -mkbundle_log_error (const char *format, ...) -{ - va_list ap; - - va_start (ap, format); - __android_log_vprint (ANDROID_LOG_ERROR, "mkbundle", format, ap); - va_end (ap); -} -#endif // ANDROID -#endif // __MKBUNDLE_API_H diff --git a/src/monodroid/jni/monodroid-glue-internal.hh b/src/monodroid/jni/monodroid-glue-internal.hh index def9a263218..85128eb1915 100644 --- a/src/monodroid/jni/monodroid-glue-internal.hh +++ b/src/monodroid/jni/monodroid-glue-internal.hh @@ -304,7 +304,6 @@ namespace xamarin::android::internal void init_android_runtime (JNIEnv *env, jclass runtimeClass, jobject loader); #else //def NET void init_android_runtime (MonoDomain *domain, JNIEnv *env, jclass runtimeClass, jobject loader); - void setup_bundled_app (const char *dso_name); #endif // ndef NET void set_environment_variable_for_directory (const char *name, jstring_wrapper &value, bool createDirectory, mode_t mode); diff --git a/src/monodroid/jni/monodroid-glue.cc b/src/monodroid/jni/monodroid-glue.cc index 18e13c1a016..729afc50235 100644 --- a/src/monodroid/jni/monodroid-glue.cc +++ b/src/monodroid/jni/monodroid-glue.cc @@ -80,7 +80,6 @@ #include "debug.hh" #include "embedded-assemblies.hh" #include "monodroid-glue.hh" -#include "mkbundle-api.h" #include "monodroid-glue-internal.hh" #include "globals.hh" #include "xamarin-app.hh" @@ -104,10 +103,6 @@ using namespace microsoft::java_interop; using namespace xamarin::android; using namespace xamarin::android::internal; -// This is below the above because we don't want to modify the header with our internal -// implementation details as it would prevent mkbundle from working -#include "mkbundle-api.h" - #if !defined (NET) #include "config.include" #include "machine.config.include" @@ -171,58 +166,6 @@ setenv(const char *name, const char *value, int overwrite) } #endif // def WINDOWS -#if !defined (NET) -typedef void* (*mono_mkbundle_init_ptr) (void (*)(const MonoBundledAssembly **), void (*)(const char* assembly_name, const char* config_xml),void (*) (int mode)); -mono_mkbundle_init_ptr mono_mkbundle_init; - -typedef void (*mono_mkbundle_initialize_mono_api_ptr) (const BundleMonoAPI *info); -mono_mkbundle_initialize_mono_api_ptr mono_mkbundle_initialize_mono_api; - -void -MonodroidRuntime::setup_bundled_app (const char *dso_name) -{ - if (!application_config.is_a_bundled_app) - return; - - static unsigned int dlopen_flags = JAVA_INTEROP_LIB_LOAD_LOCALLY; - void *libapp = nullptr; - - if (androidSystem.is_embedded_dso_mode_enabled ()) { - log_info (LOG_DEFAULT, "bundle app: embedded DSO mode"); - libapp = androidSystem.load_dso_from_any_directories (dso_name, dlopen_flags); - } else { - log_info (LOG_DEFAULT, "bundle app: normal mode"); - dynamic_local_string bundle_path; - if (!androidSystem.get_full_dso_path_on_disk (dso_name, bundle_path)) { - log_info (LOG_DEFAULT, "bundle %s not found on filesystem", dso_name); - return; - } - log_info (LOG_BUNDLE, "Attempting to load bundled app from %s", bundle_path.get ()); - libapp = androidSystem.load_dso (bundle_path.get (), dlopen_flags, true); - } - - if (libapp == nullptr) { - log_info (LOG_DEFAULT, "No libapp!"); - if (!androidSystem.is_embedded_dso_mode_enabled ()) { - log_fatal (LOG_BUNDLE, "bundled app initialization error"); - Helpers::abort_application (); - } else { - log_info (LOG_BUNDLE, "bundled app not found in the APK, ignoring."); - return; - } - } - - mono_mkbundle_initialize_mono_api = reinterpret_cast (java_interop_lib_symbol (libapp, "initialize_mono_api", nullptr)); - if (mono_mkbundle_initialize_mono_api == nullptr) - log_error (LOG_BUNDLE, "Missing initialize_mono_api in the application"); - - mono_mkbundle_init = reinterpret_cast (java_interop_lib_symbol (libapp, "mono_mkbundle_init", nullptr)); - if (mono_mkbundle_init == nullptr) - log_error (LOG_BUNDLE, "Missing mono_mkbundle_init in the application"); - log_info (LOG_BUNDLE, "Bundled app loaded: %s", dso_name); -} -#endif - void MonodroidRuntime::thread_start ([[maybe_unused]] MonoProfiler *prof, [[maybe_unused]] uintptr_t tid) { @@ -850,24 +793,6 @@ MonodroidRuntime::mono_runtime_init ([[maybe_unused]] dynamic_local_string(mono_jit_set_aot_mode), - .mono_aot_register_module = mono_aot_register_module, - .mono_config_parse_memory = mono_config_parse_memory, - .mono_register_machine_config = reinterpret_cast(mono_register_machine_config), - }; - - /* The initialization function copies the struct */ - mono_mkbundle_initialize_mono_api (&bundle_mono_api); - } - - if (mono_mkbundle_init) - mono_mkbundle_init (mono_register_bundled_assemblies, mono_register_config_for_assembly, reinterpret_cast(mono_jit_set_aot_mode)); -#endif // ndef NET /* * Assembly preload hooks are invoked in _reverse_ registration order. * Looking for assemblies from the update dir takes precedence over @@ -901,11 +826,6 @@ MonoDomain* MonodroidRuntime::create_domain (JNIEnv *env, jstring_array_wrapper &runtimeApks, bool is_root_domain, bool have_split_apks) { size_t user_assemblies_count = 0; -#if defined (NET) - constexpr bool have_mono_mkbundle_init = false; -#else // def NET - bool have_mono_mkbundle_init = mono_mkbundle_init != nullptr; -#endif // ndef NET gather_bundled_assemblies (runtimeApks, &user_assemblies_count, have_split_apks); @@ -926,7 +846,7 @@ MonodroidRuntime::create_domain (JNIEnv *env, jstring_array_wrapper &runtimeApks } #endif // def NET - if (!have_mono_mkbundle_init && user_assemblies_count == 0 && androidSystem.count_override_assemblies () == 0 && !is_running_on_desktop) { + if (user_assemblies_count == 0 && androidSystem.count_override_assemblies () == 0 && !is_running_on_desktop) { #if defined (DEBUG) log_fatal (LOG_DEFAULT, "No assemblies found in '%s' or '%s'. Assuming this is part of Fast Deployment. Exiting...", androidSystem.get_override_dir (0), @@ -2240,10 +2160,6 @@ MonodroidRuntime::Java_mono_android_Runtime_initInternal (JNIEnv *env, jclass kl set_debug_env_vars (); #endif -#if !defined (NET) - setup_bundled_app ("libmonodroid_bundle_app.so"); -#endif - #if defined (ANDROID) bool have_log_assembly = (log_categories & LOG_ASSEMBLY) != 0; bool have_log_gc = (log_categories & LOG_GC) != 0; diff --git a/src/monodroid/jni/xamarin-app.hh b/src/monodroid/jni/xamarin-app.hh index 0843a17d270..3dbc037407b 100644 --- a/src/monodroid/jni/xamarin-app.hh +++ b/src/monodroid/jni/xamarin-app.hh @@ -205,7 +205,6 @@ struct ApplicationConfig bool uses_mono_aot; bool aot_lazy_load; bool uses_assembly_preload; - bool is_a_bundled_app; bool broken_exception_transitions; bool instant_run_enabled; bool jni_add_native_method_registration_attribute_present; diff --git a/tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj b/tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj index 18505d4c067..6d3fbc7f627 100644 --- a/tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj +++ b/tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj @@ -60,8 +60,7 @@ {195BE9C2-1F91-40DC-BD6D-DE860BF083FB} - - + diff --git a/tests/Xamarin.Forms-Performance-Integration/Xamarin.Forms.Performance.Integration.csproj b/tests/Xamarin.Forms-Performance-Integration/Xamarin.Forms.Performance.Integration.csproj index 6d83bbd37ff..a3ca49e47b0 100644 --- a/tests/Xamarin.Forms-Performance-Integration/Xamarin.Forms.Performance.Integration.csproj +++ b/tests/Xamarin.Forms-Performance-Integration/Xamarin.Forms.Performance.Integration.csproj @@ -10,7 +10,6 @@ - - + - \ No newline at end of file + From b1e27d07b308a00c210fede93f75d339a1e615a9 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 7 Feb 2023 00:03:07 +0100 Subject: [PATCH 2/9] Address reviews --- .../Xamarin.Android.Build.Tests/AotTests.cs | 7 +- .../MakeBundleTests.cs | 320 ------------------ 2 files changed, 1 insertion(+), 326 deletions(-) delete mode 100644 src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MakeBundleTests.cs 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 4672c9a62bf..4244e4c8529 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 @@ -192,12 +192,7 @@ public void BuildAotApplicationWithNdkAndBundleAndÜmläüts (string supportedAb proj.OutputPath, $"{proj.PackageName}-Signed.apk"); var helper = new ArchiveAssemblyHelper (apk, usesAssemblyBlobs); - if (!Builder.UseDotNet) { - // BundleAssemblies=true - Assert.IsFalse (helper.Exists ("assemblies/UnnamedProject.dll"), $"UnnamedProject.dll should not be in the {proj.PackageName}-Signed.apk"); - } else { - Assert.IsTrue (helper.Exists ("assemblies/UnnamedProject.dll"), $"UnnamedProject.dll should be in the {proj.PackageName}-Signed.apk"); - } + Assert.IsTrue (helper.Exists ("assemblies/UnnamedProject.dll"), $"UnnamedProject.dll should be in the {proj.PackageName}-Signed.apk"); using (var zipFile = ZipHelper.OpenZip (apk)) { Assert.IsNotNull (ZipHelper.ReadFileFromZip (zipFile, string.Format ("lib/{0}/libaot-UnnamedProject.dll.so", abi)), diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MakeBundleTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MakeBundleTests.cs deleted file mode 100644 index 3ddb6596501..00000000000 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/MakeBundleTests.cs +++ /dev/null @@ -1,320 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Xml; -using System.Xml.XPath; - -using Microsoft.Build.Framework; -using NUnit.Framework; -using Xamarin.ProjectTools; -using Xamarin.Tools.Zip; - -namespace Xamarin.Android.Build.Tests -{ - [Category ("Node-2"), Category ("MkBundle"), Category ("StaticProject")] - [Parallelizable (ParallelScope.Children)] - public class MakeBundleTests : BaseTest - { - sealed class LocalBuilder : Builder - { - public LocalBuilder () - { - BuildingInsideVisualStudio = false; - } - - public bool Build (string projectOrSolution, string target, string[] parameters = null, Dictionary environmentVariables = null) - { - return BuildInternal (projectOrSolution, target, parameters, environmentVariables); - } - } - - const string ProjectName = "Xamarin.Android.MakeBundle-Tests"; - const string ProjectAssemblyName = "Xamarin.Android.MakeBundle-Tests"; - const string ProjectPackageName = "Xamarin.Android.MakeBundle_Tests"; - - static readonly string hostArch = TestEnvironment.IsWindows ? "windows-x86_64" : (TestEnvironment.IsMacOS ? "darwin-x86_64" : "linux-x86_64"); - static readonly string executableExtension = TestEnvironment.IsWindows ? ".exe" : string.Empty; - static readonly string LlvmReadobj = Path.Combine (AndroidSdkResolver.GetAndroidNdkPath(), "toolchains", "llvm", "prebuilt", hostArch, "bin", $"llvm-readobj{executableExtension}"); - static readonly string GccReadelf = Path.Combine (AndroidSdkResolver.GetAndroidNdkPath (), "toolchains", "x86_64-4.9", "prebuilt", hostArch, "bin", $"x86_64-linux-android-readelf{executableExtension}"); - - static readonly char[] ElfDynamicFieldSep = new [] { ' ', '\t' }; - static readonly string TestProjectRootDirectory; - static readonly string TestOutputDir; - - static readonly List produced_binaries = new List { - $"{ProjectAssemblyName}.dll", - $"{ProjectPackageName}-Signed.apk", - $"{ProjectPackageName}.apk", - }; - - static readonly List log_files = new List { - "process.log", - "msbuild.binlog", - }; - - static readonly string[] bundles = new [] { - "lib/x86/libmonodroid_bundle_app.so", - "lib/armeabi-v7a/libmonodroid_bundle_app.so", - }; - - string elfReaderPath; - bool elfReaderLlvm; - string testProjectPath; - string apk; - - static MakeBundleTests () - { - TestProjectRootDirectory = Path.GetFullPath (Path.Combine (XABuildPaths.TopDirectory, "tests", "CodeGen-MkBundle", "Xamarin.Android.MakeBundle-Tests")); - TestOutputDir = Path.Combine (SetUp.TestDirectoryRoot, "temp", "CodeGen-MkBundle"); - } - - [OneTimeSetUp] - public void BuildProject () - { - if (File.Exists (LlvmReadobj)) { - elfReaderPath = LlvmReadobj; - elfReaderLlvm = true; - } else if (File.Exists (GccReadelf)) { - elfReaderPath = GccReadelf; - elfReaderLlvm = false; - } else - Assert.Fail ($"No ELF reader found. Tried '{LlvmReadobj}' and '{GccReadelf}'"); - - Console.WriteLine ($"Will use the following ELF reader: {elfReaderPath}"); - - testProjectPath = PrepareProject (ProjectName); - apk = Path.Combine (testProjectPath, "bin", XABuildPaths.Configuration, $"{ProjectPackageName}-Signed.apk"); - string projectPath = Path.Combine (testProjectPath, $"{ProjectName}.csproj"); - LocalBuilder builder = GetBuilder ("Xamarin.Android.MakeBundle-Tests"); - bool success = builder.Build (projectPath, "SignAndroidPackage", new [] { "UnitTestsMode=true", $"Configuration={XABuildPaths.Configuration}" }); - - Assert.That (success, Is.True, "Should have been built"); - } - - [OneTimeTearDown] - public void CleanUp () - { - if (TestContext.CurrentContext.Result.FailCount == 0) { - FileSystemUtils.SetDirectoryWriteable (TestOutputDir); - Directory.Delete (TestOutputDir, recursive: true); - } - } - - [Test] - public void BinariesExist () - { - foreach (string binary in produced_binaries) { - string fp = Path.Combine (testProjectPath, "bin", XABuildPaths.Configuration, binary); - - Assert.That (new FileInfo (fp), Does.Exist, $"File {fp} should exist"); - } - } - - [Test] - public void PackageIsBundled () - { - Assert.That (new FileInfo (apk), Does.Exist, $"File {apk} should exist"); - - using (ZipArchive zip = ZipArchive.Open (apk, FileMode.Open)) { - Assert.That (zip, Is.Not.Null, $"{apk} couldn't be opened as a zip archive"); - - foreach (string bundle in bundles) { - Assert.That (zip.ContainsEntry (bundle), Is.True, $"`{bundle}` file not found in {apk}"); - } - } - } - - [Test] - public void BundleHasSoname () - { - Assert.That (new FileInfo (apk), Does.Exist, $"File {apk} should exist"); - - using (ZipArchive zip = ZipArchive.Open (apk, FileMode.Open)) { - Assert.That (zip, Is.Not.Null, $"{apk} couldn't be opened as a zip archive"); - - foreach (string bundle in bundles) { - Assert.That (zip.ContainsEntry (bundle), Is.True, $"`{bundle}` file not found in {apk}"); - CheckBundleForSoname (zip, bundle); - } - } - } - - void CheckBundleForSoname (ZipArchive zip, string bundlePath) - { - string tempFile = Path.GetTempFileName (); - using (Stream fs = File.Open (tempFile, FileMode.Create)) { - ZipEntry entry = zip.FirstOrDefault (e => String.Compare (e.FullName, bundlePath, StringComparison.Ordinal) == 0); - Assert.That (entry, Is.Not.Null, $"Unable to open the `{bundlePath}` entry in {apk}"); - - entry.Extract (fs); - } - - var stdout = new List (); - string arguments; - string sonameField; - - if (elfReaderLlvm) { - arguments = "--dynamic-table"; - sonameField = "SONAME"; - } else { - arguments = "-d"; - sonameField = "(SONAME)"; - } - bool success; - - try { - Console.WriteLine ($"Checking bundle {bundlePath} in {tempFile}"); - success = RunCommand (elfReaderPath, $"{arguments} \"{tempFile}\"", stdout); - } finally { - File.Delete (tempFile); - } - - Assert.That (success, Is.True, $"Command {elfReaderPath} failed"); - - string soname = null; - foreach (string l in stdout) { - string line = l?.Trim (); - if (String.IsNullOrEmpty (line)) - continue; - - string[] parts = line.Split (ElfDynamicFieldSep, StringSplitOptions.RemoveEmptyEntries); - if (parts.Length < 3) - continue; - - if (String.Compare (sonameField, parts [1], StringComparison.Ordinal) != 0) - continue; - - if (parts.Length > 3) - soname = String.Join (" ", parts, 3, parts.Length - 3); - else - soname = String.Empty; - break; - } - - const string expectedSoname = "libmonodroid_bundle_app.so"; - Assert.That (soname, Is.Not.Null, $"Bundle {bundlePath} doesn't have DT_SONAME in ELF header"); - Assert.That (soname.Length, Is.GreaterThanOrEqualTo (0), $"Unknown DT_SONAME field format in {bundlePath}"); - Assert.That (soname.IndexOf (expectedSoname, StringComparison.Ordinal), Is.GreaterThanOrEqualTo (0), $"Unexpected bundle {bundlePath} SONAME (expected {expectedSoname}"); - } - - bool RunCommand (string command, string arguments, List stdout) - { - var psi = new ProcessStartInfo () { - FileName = command, - Arguments = arguments, - UseShellExecute = false, - RedirectStandardInput = false, - RedirectStandardOutput = true, - RedirectStandardError = true, - CreateNoWindow = true, - WindowStyle = ProcessWindowStyle.Hidden, - }; - - var stderr_completed = new ManualResetEvent (false); - var stdout_completed = new ManualResetEvent (false); - - var p = new Process () { - StartInfo = psi, - }; - - p.ErrorDataReceived += (sender, e) => { - if (e.Data == null) - stderr_completed.Set (); - else - Console.WriteLine ($"stderr: {e.Data}"); - }; - - p.OutputDataReceived += (sender, e) => { - if (e.Data == null) - stdout_completed.Set (); - else { - stdout.Add (e.Data); - Console.WriteLine ($"stdout: {e.Data}"); - } - }; - - using (p) { - p.StartInfo = psi; - p.Start (); - p.BeginOutputReadLine (); - p.BeginErrorReadLine (); - - bool success = p.WaitForExit (60000); - - // We need to call the parameter-less WaitForExit only if any of the standard - // streams have been redirected (see - // https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.waitforexit?view=netframework-4.7.2#System_Diagnostics_Process_WaitForExit) - // - p.WaitForExit (); - stderr_completed.WaitOne (TimeSpan.FromSeconds (60)); - stdout_completed.WaitOne (TimeSpan.FromSeconds (60)); - - if (!success || p.ExitCode != 0) { - Console.Error.WriteLine ($"Process `{command} {arguments}` exited with value {p.ExitCode}."); - return false; - } - - return true; - } - } - - string PrepareProject (string testName) - { - string tempRoot = Path.Combine (TestOutputDir, $"{testName}.build", XABuildPaths.Configuration); - string temporaryProjectPath = Path.Combine (tempRoot, "project"); - - var ignore = new HashSet { - Path.Combine (TestProjectRootDirectory, "bin"), - Path.Combine (TestProjectRootDirectory, "obj"), - }; - - CopyRecursively (TestProjectRootDirectory, temporaryProjectPath, ignore); - return temporaryProjectPath; - } - - void CopyRecursively (string fromDir, string toDir, HashSet ignoreDirs) - { - if (String.IsNullOrEmpty (fromDir)) - throw new ArgumentException ($"{nameof (fromDir)} is must have a non-empty value"); - if (String.IsNullOrEmpty (toDir)) - throw new ArgumentException ($"{nameof (toDir)} is must have a non-empty value"); - - if (ignoreDirs.Contains (fromDir)) - return; - - var fdi = new DirectoryInfo (fromDir); - if (!fdi.Exists) - throw new InvalidOperationException ($"Source directory '{fromDir}' does not exist"); - - if (Directory.Exists (toDir)) - Directory.Delete (toDir, true); - - foreach (FileSystemInfo fsi in fdi.EnumerateFileSystemInfos ("*", SearchOption.TopDirectoryOnly)) { - if (fsi is FileInfo finfo) - CopyFile (fsi.FullName, Path.Combine (toDir, finfo.Name)); - else - CopyRecursively (fsi.FullName, Path.Combine (toDir, fsi.Name), ignoreDirs); - } - } - - void CopyFile (string from, string to) - { - string dir = Path.GetDirectoryName (to); - if (!Directory.Exists (dir)) - Directory.CreateDirectory (dir); - File.Copy (from, to, true); - } - - LocalBuilder GetBuilder (string baseLogFileName) - { - return new LocalBuilder { - BuildLogFile = $"{baseLogFileName}.log" - }; - } - } -} From ff4ee5f20aba8a26b710b9426be1d860733f78cf Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 7 Feb 2023 11:52:38 +0100 Subject: [PATCH 3/9] Restore `` definition to avoid MSBuild errors --- src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index e103610fad6..19b9a1db130 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -204,6 +204,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. True False + False False From 839846bead612073e48766e4cc19ca811d920e0e Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 7 Feb 2023 22:43:27 +0100 Subject: [PATCH 4/9] Add documentation for XA1035 --- Documentation/guides/messages/xa1035.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Documentation/guides/messages/xa1035.md diff --git a/Documentation/guides/messages/xa1035.md b/Documentation/guides/messages/xa1035.md new file mode 100644 index 00000000000..0f5299a2288 --- /dev/null +++ b/Documentation/guides/messages/xa1035.md @@ -0,0 +1,19 @@ +--- +title: Xamarin.Android warning XA1035 +description: XA1034 warning code +ms.date: 13/12/2022 +--- +# Xamarin.Android warning XA1035 + +## Example messages + +``` +The 'BundleAssemblies' property is deprecated and it has no effect on the application build. Equivalent functionality is implemented by the 'AndroidUseAssemblyStore' and 'AndroidEnableAssemblyCompression' properties. +``` + +## Solution + +Edit your csproj directly and remove the 'BundleAssemblies' property. +`AndroidUseAssemblyStore` and `AndroidEnableAssemblyCompression` are +both enabled by default and, together, they implement behavior +equivalent to that of `BundleAssemblies`. From fb54d65a8e93ea2c66ba04d533e19e1f040483ad Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 7 Feb 2023 22:54:17 +0100 Subject: [PATCH 5/9] Add a link to docs --- Documentation/guides/messages/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Documentation/guides/messages/README.md b/Documentation/guides/messages/README.md index c31c84e89dc..69c406f4325 100644 --- a/Documentation/guides/messages/README.md +++ b/Documentation/guides/messages/README.md @@ -133,6 +133,7 @@ or 'Help->Report a Problem' in Visual Studio for Mac. + [XA1031](xa1031.md): The 'AndroidHttpClientHandlerType' has an invalid value. + [XA1032](xa1032.md):Failed to resolve '{0}' from '{1}'. Please check your `AndroidHttpClientHandlerType` setting. + [XA1033](xa1033.md): Could not resolve '{0}'. Please check your `AndroidHttpClientHandlerType` setting. ++ [XA1035](xa1035.md): The 'BundleAssemblies' property is deprecated and it has no effect on the application build. Equivalent functionality is implemented by the 'AndroidUseAssemblyStore' and 'AndroidEnableAssemblyCompression' properties. ## XA2xxx: Linker From b393967663f724122803eb5ce9b76d78e059b3ee Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Wed, 8 Feb 2023 11:55:22 +0100 Subject: [PATCH 6/9] Remove mac and Windows legacy tests from CI --- build-tools/automation/azure-pipelines.yaml | 76 --------------------- 1 file changed, 76 deletions(-) diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index fdb8fd39014..6a15f30efca 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -554,82 +554,6 @@ stages: - template: yaml-templates/fail-on-issue.yaml -- stage: msbuild_legacy - displayName: Legacy Tests - dependsOn: mac_build - # Disabled on .NET release branches - condition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False'), or(eq(variables['RunAllTests'], true), contains(dependencies.mac_build.outputs['mac_build_create_installers.TestConditions.TestAreas'], 'MSBuild'))) - jobs: - # Xamarin.Android (Test MSBuild Legacy - macOS) - - template: yaml-templates\run-msbuild-mac-tests.yaml - parameters: - node_id: 1 - job_name: mac_msbuild_tests_1 - job_suffix: Legacy - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates\run-msbuild-mac-tests.yaml - parameters: - node_id: 2 - job_name: mac_msbuild_tests_2 - job_suffix: Legacy - run_extra_tests: true - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates\run-msbuild-mac-tests.yaml - parameters: - node_id: 3 - job_name: mac_msbuild_tests_3 - job_suffix: Legacy - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates\run-msbuild-mac-tests.yaml - parameters: - node_id: 4 - job_name: mac_msbuild_tests_4 - job_suffix: Legacy - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates\run-msbuild-mac-tests.yaml - parameters: - node_id: 5 - job_name: mac_msbuild_tests_5 - job_suffix: Legacy - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates\run-msbuild-mac-tests.yaml - parameters: - node_id: 6 - job_name: mac_msbuild_tests_6 - job_suffix: Legacy - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - # Xamarin.Android (Test MSBuild Legacy - Windows) - - template: yaml-templates\run-msbuild-win-tests.yaml - parameters: - node_id: 1 - additional_node_id: 4 - job_name: win_msbuild_tests_1 - job_suffix: Legacy - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates\run-msbuild-win-tests.yaml - parameters: - node_id: 2 - additional_node_id: 5 - job_name: win_msbuild_tests_2 - job_suffix: Legacy - run_extra_tests: true - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates\run-msbuild-win-tests.yaml - parameters: - node_id: 3 - additional_node_id: 6 - job_name: win_msbuild_tests_3 - job_suffix: Legacy - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - stage: msbuild_dotnet displayName: One .NET Tests dependsOn: mac_build From 58ccdaf672de5e79874e2925c25893323fc43a6c Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Wed, 8 Feb 2023 11:57:55 +0100 Subject: [PATCH 7/9] Remove other legacy tests from CI --- build-tools/automation/azure-pipelines.yaml | 231 -------------------- 1 file changed, 231 deletions(-) diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 6a15f30efca..8947ad72a82 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -99,199 +99,6 @@ stages: displayName: Smoke Tests dependsOn: mac_build jobs: - # Check - "Xamarin.Android (macOS > Tests > APKs Classic)" - - job: mac_apk_tests_legacy - displayName: macOS > Tests > APKs Classic - # Disabled on .NET release branches - condition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) - pool: - vmImage: $(HostedMacImage) - timeoutInMinutes: 180 - workspace: - clean: all - variables: - ApkTestConfiguration: Release - steps: - - template: yaml-templates/setup-test-environment.yaml - parameters: - configuration: $(ApkTestConfiguration) - provisionatorChannel: ${{ parameters.provisionatorChannel }} - - - template: yaml-templates/run-xaprepare.yaml - parameters: - displayName: install emulator - arguments: --s=EmulatorTestDependencies - - - template: yaml-templates/run-dotnet-preview.yaml - parameters: - project: Xamarin.Android.sln - arguments: -t:PrepareJavaInterop -c $(XA.Build.Configuration) -m:1 -v:n - displayName: prepare java.interop $(XA.Build.Configuration) - continueOnError: false - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Android.JcwGen_Tests - project: tests/CodeGen-Binding/Xamarin.Android.JcwGen-Tests/Xamarin.Android.JcwGen-Tests.csproj - testResultsFiles: TestResult-Xamarin.Android.JcwGen_Tests-$(ApkTestConfiguration).xml - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.JcwGen_Tests-Signed.apk - artifactFolder: Default - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Android.JcwGen_Tests_FastDev - project: tests/CodeGen-Binding/Xamarin.Android.JcwGen-Tests/Xamarin.Android.JcwGen-Tests.csproj - testResultsFiles: TestResult-Xamarin.Android.JcwGen_Tests-$(ApkTestConfiguration).xml - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.JcwGen_Tests-Signed.apk - artifactFolder: FastDev_Assemblies_Dexes - extraBuildArgs: /p:AndroidFastDeploymentType=Assemblies:Dexes - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Android.Locale_Tests - project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj - testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration).xml - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.Locale_Tests-Signed.apk - artifactFolder: Default - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Android.Locale_Tests-Aot - project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj - testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration)-Aot.xml - extraBuildArgs: /p:AotAssemblies=True - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.Locale_Tests-Signed.apk - artifactFolder: Aot - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Android.Locale_Tests-Profiled-Aot - project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj - testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration)-Profiled-Aot.xml - extraBuildArgs: /p:AotAssemblies=True /p:AndroidEnableProfiledAot=true - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.Locale_Tests-Signed.apk - artifactFolder: Profiled-Aot - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Android.EmbeddedDSO_Test - project: tests/EmbeddedDSOs/EmbeddedDSO/EmbeddedDSO.csproj - testResultsFiles: TestResult-Xamarin.Android.EmbeddedDSO_Test.nunit-$(ApkTestConfiguration).xml - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.EmbeddedDSO_Test-Signed.apk - artifactFolder: Default - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Forms-Performance-Integration - project: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj - testResultsFiles: TestResult-apkdiff-Xamarin.Forms_Performance_Integration-Signed-$(ApkTestConfiguration).xml - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk - artifactFolder: Default - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Forms-Performance-Integration-Aot - project: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj - testResultsFiles: TestResult-apkdiff-Xamarin.Forms_Performance_Integration-Signed-$(ApkTestConfiguration)-Aot.xml - extraBuildArgs: /p:AotAssemblies=true - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk - artifactFolder: Aot - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: Xamarin.Forms-Performance-Integration-Profiled-Aot - project: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj - testResultsFiles: TestResult-apkdiff-Xamarin.Forms_Performance_Integration-Signed-$(ApkTestConfiguration)-Profiled-Aot.xml - extraBuildArgs: /p:AotAssemblies=True /p:AndroidEnableProfiledAot=true - artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk - artifactFolder: Profiled-Aot - - - template: yaml-templates/apk-instrumentation.yaml - parameters: - configuration: $(ApkTestConfiguration) - testName: VSAndroidApp - project: samples/VSAndroidAppProxy.csproj - testResultsFiles: TestResult-apkdiff-com.companyname.vsandroidapp-Signed-$(ApkTestConfiguration).xml - artifactSource: bin/Test$(ApkTestConfiguration)/com.companyname.vsandroidapp-Signed.apk - artifactFolder: Default - - - task: MSBuild@1 - displayName: shut down emulator - inputs: - solution: tests/Mono.Android-Tests/Mono.Android-Tests.csproj - configuration: $(ApkTestConfiguration) - msbuildArguments: >- - /t:AcquireAndroidTarget,ReleaseAndroidTarget - /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/shutdown-emulator.binlog - condition: always() - - - template: yaml-templates/upload-results.yaml - parameters: - configuration: $(ApkTestConfiguration) - artifactName: Test Results - APKs Legacy - macOS - - # Plots: Utilize command-line utility built here to send plot information contained in CSV files to AppInsights - - task: MSBuild@1 - displayName: build plots-to-appinsights - inputs: - solution: build-tools/plots-to-appinsights/ProcessPlotCSVFile.csproj - configuration: $(ApkTestConfiguration) - msbuildArguments: >- - /restore - /t:Build - /v:normal - /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/plots-to-appinsights.binlog - continueOnError: true - condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) - - # Process Plot CSV files and send results to AppInsights - # XamarinAndroidMetrics: https://ms.portal.azure.com/#@microsoft.onmicrosoft.com/resource/subscriptions/64e11c84-c922-4ffd-bea9-67ab39354edd/resourceGroups/XamarinMetrics/providers/microsoft.insights/components/XamarinAndroidMetrics/overview - # UNDONE: Need plot definitions for the following files: - # TestResult-Xamarin.Android.EmbeddedDSO_Test-times.csv - - - template: yaml-templates/plots-to-appinsights.yaml - parameters: - condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) - configuration: $(ApkTestConfiguration) - plotGroup: Test times - plotTitle: Runtime merged - plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Mono.Android_Tests-times.csv - - - template: yaml-templates/plots-to-appinsights.yaml - parameters: - condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) - configuration: $(ApkTestConfiguration) - plotGroup: Test times - plotTitle: Jcw - plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Xamarin.Android.JcwGen_Tests-times.csv - - - template: yaml-templates/plots-to-appinsights.yaml - parameters: - condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) - configuration: $(ApkTestConfiguration) - plotGroup: Test times - plotTitle: Locale - plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Xamarin.Android.Locale_Tests-times.csv - - - template: yaml-templates/plots-to-appinsights.yaml - parameters: - condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) - configuration: $(ApkTestConfiguration) - plotGroup: Test times - plotTitle: Xamarin.Forms app startup - plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Xamarin.Forms_Test-times.csv - - - template: yaml-templates/fail-on-issue.yaml - # Check - "Xamarin.Android (macOS > Tests > APKs .NET)" - job: mac_apk_tests_net displayName: macOS > Tests > APKs .NET @@ -650,44 +457,6 @@ stages: dependsOn: mac_build condition: and(succeeded(), or(eq(variables['RunAllTests'], true), contains(dependencies.mac_build.outputs['mac_build_create_installers.TestConditions.TestAreas'], 'MSBuildDevice'))) jobs: - # Check - "Xamarin.Android (macOS > Tests > MSBuild+Emulator Legacy #N)" - - template: yaml-templates/run-msbuild-device-tests.yaml - parameters: - node_id: 1 - job_name: mac_msbuilddevice_tests_1 - job_suffix: Legacy - nunit_categories: '&& cat != Debugger' - provisionatorChannel: ${{ parameters.provisionatorChannel }} - jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) - - - template: yaml-templates/run-msbuild-device-tests.yaml - parameters: - node_id: 2 - job_name: mac_msbuilddevice_tests_2 - job_suffix: Legacy - nunit_categories: '&& cat != Debugger' - provisionatorChannel: ${{ parameters.provisionatorChannel }} - jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) - - - template: yaml-templates/run-msbuild-device-tests.yaml - parameters: - node_id: 3 - job_name: mac_msbuilddevice_tests_3 - job_suffix: Legacy - nunit_categories: '&& cat != Debugger' - provisionatorChannel: ${{ parameters.provisionatorChannel }} - jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) - - - template: yaml-templates/run-msbuild-device-tests.yaml - parameters: - node_id: 4 - job_name: mac_msbuilddevice_tests_with_debugger - job_suffix: Legacy - jdkTestFolder: $(XA.Jdk11.Folder) - nunit_categories: '&& cat == Debugger' - provisionatorChannel: ${{ parameters.provisionatorChannel }} - jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) - # Check - "Xamarin.Android (macOS > Tests > MSBuild+Emulator One .NET #N)" - template: yaml-templates/run-msbuild-device-tests.yaml parameters: From 6c0510beef14c065fe0ef375b850a5805b374686 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Wed, 8 Feb 2023 16:21:13 +0100 Subject: [PATCH 8/9] Update apkdesc --- .../BuildReleaseArm64XFormsLegacy.apkdesc | 934 +++++++++--------- 1 file changed, 467 insertions(+), 467 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc index e1f72ba5de2..46a641e6ea7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Resources/Base/BuildReleaseArm64XFormsLegacy.apkdesc @@ -5,125 +5,125 @@ "Size": 3140 }, "assemblies/FormsViewGroup.dll": { - "Size": 7215 + "Size": 7207 }, "assemblies/Java.Interop.dll": { - "Size": 69955 + "Size": 69945 }, "assemblies/Mono.Android.dll": { - "Size": 572710 + "Size": 571971 }, "assemblies/Mono.Security.dll": { - "Size": 68432 + "Size": 68430 }, "assemblies/mscorlib.dll": { - "Size": 915407 + "Size": 915392 }, "assemblies/System.Core.dll": { - "Size": 164046 + "Size": 164045 }, "assemblies/System.dll": { - "Size": 388865 + "Size": 388862 }, "assemblies/System.Drawing.Common.dll": { - "Size": 12365 + "Size": 12356 }, "assemblies/System.Net.Http.dll": { "Size": 110693 }, "assemblies/System.Numerics.dll": { - "Size": 15683 + "Size": 15681 }, "assemblies/System.Runtime.Serialization.dll": { - "Size": 186660 + "Size": 186653 }, "assemblies/System.ServiceModel.Internals.dll": { - "Size": 26593 + "Size": 26585 }, "assemblies/System.Xml.dll": { - "Size": 395657 + "Size": 395652 }, "assemblies/UnnamedProject.dll": { - "Size": 116986 + "Size": 116978 }, "assemblies/Xamarin.AndroidX.Activity.dll": { - "Size": 7697 + "Size": 7689 }, "assemblies/Xamarin.AndroidX.AppCompat.AppCompatResources.dll": { - "Size": 6648 + "Size": 6640 }, "assemblies/Xamarin.AndroidX.AppCompat.dll": { - "Size": 125328 + "Size": 125325 }, "assemblies/Xamarin.AndroidX.CardView.dll": { - "Size": 7366 + "Size": 7357 }, "assemblies/Xamarin.AndroidX.CoordinatorLayout.dll": { - "Size": 18272 + "Size": 18264 }, "assemblies/Xamarin.AndroidX.Core.dll": { - "Size": 131930 + "Size": 131924 }, "assemblies/Xamarin.AndroidX.DrawerLayout.dll": { - "Size": 15426 + "Size": 15422 }, "assemblies/Xamarin.AndroidX.Fragment.dll": { - "Size": 43135 + "Size": 43130 }, "assemblies/Xamarin.AndroidX.Legacy.Support.Core.UI.dll": { - "Size": 6715 + "Size": 6708 }, "assemblies/Xamarin.AndroidX.Lifecycle.Common.dll": { - "Size": 7062 + "Size": 7055 }, "assemblies/Xamarin.AndroidX.Lifecycle.LiveData.Core.dll": { - "Size": 7194 + "Size": 7186 }, "assemblies/Xamarin.AndroidX.Lifecycle.ViewModel.dll": { - "Size": 4873 + "Size": 4861 }, "assemblies/Xamarin.AndroidX.Loader.dll": { - "Size": 13585 + "Size": 13578 }, "assemblies/Xamarin.AndroidX.RecyclerView.dll": { - "Size": 102326 + "Size": 102322 }, "assemblies/Xamarin.AndroidX.SavedState.dll": { - "Size": 6268 + "Size": 6265 }, "assemblies/Xamarin.AndroidX.SwipeRefreshLayout.dll": { - "Size": 11272 + "Size": 11261 }, "assemblies/Xamarin.AndroidX.ViewPager.dll": { - "Size": 19424 + "Size": 19416 }, "assemblies/Xamarin.Forms.Core.dll": { - "Size": 524736 + "Size": 524728 }, "assemblies/Xamarin.Forms.Platform.Android.dll": { - "Size": 384872 + "Size": 384861 }, "assemblies/Xamarin.Forms.Platform.dll": { "Size": 56878 }, "assemblies/Xamarin.Forms.Xaml.dll": { - "Size": 55801 + "Size": 55795 }, "assemblies/Xamarin.Google.Android.Material.dll": { - "Size": 43497 + "Size": 43489 }, "classes.dex": { - "Size": 3533252 + "Size": 3518696 }, "lib/arm64-v8a/libmono-btls-shared.so": { "Size": 1613872 }, + "lib/arm64-v8a/libmonodroid.so": { + "Size": 275048 + }, "lib/arm64-v8a/libmono-native.so": { "Size": 750976 }, - "lib/arm64-v8a/libmonodroid.so": { - "Size": 277744 - }, "lib/arm64-v8a/libmonosgen-2.0.so": { "Size": 4039176 }, @@ -145,10 +145,10 @@ "META-INF/androidx.activity_activity.version": { "Size": 6 }, - "META-INF/androidx.appcompat_appcompat-resources.version": { + "META-INF/androidx.appcompat_appcompat.version": { "Size": 6 }, - "META-INF/androidx.appcompat_appcompat.version": { + "META-INF/androidx.appcompat_appcompat-resources.version": { "Size": 6 }, "META-INF/androidx.arch.core_core-runtime.version": { @@ -196,10 +196,10 @@ "META-INF/androidx.legacy_legacy-support-v4.version": { "Size": 6 }, - "META-INF/androidx.lifecycle_lifecycle-livedata-core.version": { + "META-INF/androidx.lifecycle_lifecycle-livedata.version": { "Size": 6 }, - "META-INF/androidx.lifecycle_lifecycle-livedata.version": { + "META-INF/androidx.lifecycle_lifecycle-livedata-core.version": { "Size": 6 }, "META-INF/androidx.lifecycle_lifecycle-runtime.version": { @@ -235,10 +235,10 @@ "META-INF/androidx.transition_transition.version": { "Size": 6 }, - "META-INF/androidx.vectordrawable_vectordrawable-animated.version": { + "META-INF/androidx.vectordrawable_vectordrawable.version": { "Size": 6 }, - "META-INF/androidx.vectordrawable_vectordrawable.version": { + "META-INF/androidx.vectordrawable_vectordrawable-animated.version": { "Size": 6 }, "META-INF/androidx.versionedparcelable_versionedparcelable.version": { @@ -256,12 +256,6 @@ "META-INF/proguard/androidx-annotations.pro": { "Size": 339 }, - "res/anim-v21/design_bottom_sheet_slide_in.xml": { - "Size": 616 - }, - "res/anim-v21/design_bottom_sheet_slide_out.xml": { - "Size": 616 - }, "res/anim/abc_fade_in.xml": { "Size": 388 }, @@ -358,9 +352,6 @@ "res/anim/exittoright.xml": { "Size": 468 }, - "res/animator-v21/design_appbar_state_list_animator.xml": { - "Size": 1216 - }, "res/animator/design_fab_hide_motion_spec.xml": { "Size": 796 }, @@ -388,38 +379,14 @@ "res/animator/mtrl_fab_transformation_sheet_expand_spec.xml": { "Size": 1888 }, - "res/color-v21/abc_btn_colored_borderless_text_material.xml": { - "Size": 464 - }, - "res/color-v23/abc_btn_colored_borderless_text_material.xml": { - "Size": 500 - }, - "res/color-v23/abc_btn_colored_text_material.xml": { - "Size": 500 - }, - "res/color-v23/abc_color_highlight_material.xml": { - "Size": 544 - }, - "res/color-v23/abc_tint_btn_checkable.xml": { - "Size": 624 - }, - "res/color-v23/abc_tint_default.xml": { - "Size": 1120 - }, - "res/color-v23/abc_tint_edittext.xml": { - "Size": 668 - }, - "res/color-v23/abc_tint_seek_thumb.xml": { - "Size": 500 - }, - "res/color-v23/abc_tint_spinner.xml": { - "Size": 668 + "res/animator-v21/design_appbar_state_list_animator.xml": { + "Size": 1216 }, - "res/color-v23/abc_tint_switch_track.xml": { - "Size": 664 + "res/anim-v21/design_bottom_sheet_slide_in.xml": { + "Size": 616 }, - "res/color-v23/design_tint_password_toggle.xml": { - "Size": 376 + "res/anim-v21/design_bottom_sheet_slide_out.xml": { + "Size": 616 }, "res/color/abc_background_cache_hint_selector_material_dark.xml": { "Size": 468 @@ -523,10 +490,10 @@ "res/color/mtrl_tabs_colored_ripple_color.xml": { "Size": 948 }, - "res/color/mtrl_tabs_icon_color_selector_colored.xml": { + "res/color/mtrl_tabs_icon_color_selector.xml": { "Size": 464 }, - "res/color/mtrl_tabs_icon_color_selector.xml": { + "res/color/mtrl_tabs_icon_color_selector_colored.xml": { "Size": 464 }, "res/color/mtrl_tabs_legacy_text_color_selector.xml": { @@ -544,159 +511,375 @@ "res/color/switch_thumb_material_light.xml": { "Size": 464 }, - "res/drawable-anydpi-v21/design_ic_visibility_off.xml": { - "Size": 1144 - }, - "res/drawable-anydpi-v21/design_ic_visibility.xml": { - "Size": 540 + "res/color-v21/abc_btn_colored_borderless_text_material.xml": { + "Size": 464 }, - "res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { - "Size": 272 + "res/color-v23/abc_btn_colored_borderless_text_material.xml": { + "Size": 500 }, - "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png": { - "Size": 227 + "res/color-v23/abc_btn_colored_text_material.xml": { + "Size": 500 }, - "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png": { - "Size": 404 + "res/color-v23/abc_color_highlight_material.xml": { + "Size": 544 }, - "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png": { - "Size": 464 + "res/color-v23/abc_tint_btn_checkable.xml": { + "Size": 624 }, - "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png": { - "Size": 563 + "res/color-v23/abc_tint_default.xml": { + "Size": 1120 }, - "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png": { - "Size": 1096 + "res/color-v23/abc_tint_edittext.xml": { + "Size": 668 }, - "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png": { - "Size": 1243 + "res/color-v23/abc_tint_seek_thumb.xml": { + "Size": 500 }, - "res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png": { - "Size": 226 + "res/color-v23/abc_tint_spinner.xml": { + "Size": 668 }, - "res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png": { - "Size": 171 + "res/color-v23/abc_tint_switch_track.xml": { + "Size": 664 }, - "res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png": { - "Size": 202 + "res/color-v23/design_tint_password_toggle.xml": { + "Size": 376 }, - "res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png": { - "Size": 404 + "res/drawable/abc_btn_borderless_material.xml": { + "Size": 588 }, - "res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png": { - "Size": 226 + "res/drawable/abc_btn_check_material.xml": { + "Size": 464 }, - "res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png": { - "Size": 215 + "res/drawable/abc_btn_check_material_anim.xml": { + "Size": 816 }, - "res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png": { - "Size": 389 + "res/drawable/abc_btn_colored_material.xml": { + "Size": 344 }, - "res/drawable-hdpi-v4/abc_ic_star_black_16dp.png": { - "Size": 263 + "res/drawable/abc_btn_default_mtrl_shape.xml": { + "Size": 932 }, - "res/drawable-hdpi-v4/abc_ic_star_black_36dp.png": { - "Size": 522 + "res/drawable/abc_btn_radio_material.xml": { + "Size": 464 }, - "res/drawable-hdpi-v4/abc_ic_star_black_48dp.png": { - "Size": 668 + "res/drawable/abc_btn_radio_material_anim.xml": { + "Size": 816 }, - "res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png": { - "Size": 197 + "res/drawable/abc_cab_background_internal_bg.xml": { + "Size": 372 }, - "res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png": { - "Size": 328 + "res/drawable/abc_cab_background_top_material.xml": { + "Size": 336 }, - "res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png": { - "Size": 431 + "res/drawable/abc_dialog_material_background.xml": { + "Size": 716 }, - "res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png": { - "Size": 167 + "res/drawable/abc_edit_text_material.xml": { + "Size": 868 }, - "res/drawable-hdpi-v4/abc_list_focused_holo.9.png": { - "Size": 244 + "res/drawable/abc_ic_ab_back_material.xml": { + "Size": 692 }, - "res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png": { - "Size": 212 + "res/drawable/abc_ic_arrow_drop_right_black_24dp.xml": { + "Size": 1000 }, - "res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png": { - "Size": 208 + "res/drawable/abc_ic_clear_material.xml": { + "Size": 684 }, - "res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png": { - "Size": 208 + "res/drawable/abc_ic_go_search_api_material.xml": { + "Size": 640 }, - "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png": { - "Size": 228 + "res/drawable/abc_ic_menu_overflow_material.xml": { + "Size": 792 }, - "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png": { - "Size": 229 + "res/drawable/abc_ic_search_api_material.xml": { + "Size": 812 }, - "res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png": { - "Size": 738 + "res/drawable/abc_ic_voice_search_api_material.xml": { + "Size": 828 }, - "res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png": { - "Size": 1098 + "res/drawable/abc_item_background_holo_dark.xml": { + "Size": 1012 }, - "res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png": { - "Size": 201 + "res/drawable/abc_item_background_holo_light.xml": { + "Size": 1012 }, - "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png": { - "Size": 196 + "res/drawable/abc_list_divider_material.xml": { + "Size": 480 }, - "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png": { - "Size": 272 + "res/drawable/abc_list_selector_background_transition_holo_dark.xml": { + "Size": 424 }, - "res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png": { - "Size": 205 + "res/drawable/abc_list_selector_background_transition_holo_light.xml": { + "Size": 424 }, - "res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png": { - "Size": 196 + "res/drawable/abc_list_selector_holo_dark.xml": { + "Size": 1064 }, - "res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png": { - "Size": 345 + "res/drawable/abc_list_selector_holo_light.xml": { + "Size": 1064 }, - "res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png": { - "Size": 484 + "res/drawable/abc_ratingbar_indicator_material.xml": { + "Size": 664 }, - "res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png": { - "Size": 190 + "res/drawable/abc_ratingbar_material.xml": { + "Size": 664 }, - "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png": { - "Size": 278 + "res/drawable/abc_ratingbar_small_material.xml": { + "Size": 664 }, - "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png": { - "Size": 278 + "res/drawable/abc_seekbar_thumb_material.xml": { + "Size": 1100 }, - "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png": { - "Size": 398 + "res/drawable/abc_seekbar_tick_mark_material.xml": { + "Size": 516 }, - "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.png": { - "Size": 396 + "res/drawable/abc_seekbar_track_material.xml": { + "Size": 1408 }, - "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png": { - "Size": 263 + "res/drawable/abc_spinner_textfield_background_material.xml": { + "Size": 1160 }, - "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png": { - "Size": 262 + "res/drawable/abc_switch_thumb_material.xml": { + "Size": 464 }, - "res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png": { - "Size": 186 + "res/drawable/abc_tab_indicator_material.xml": { + "Size": 468 }, - "res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png": { - "Size": 192 + "res/drawable/abc_text_cursor_material.xml": { + "Size": 516 }, - "res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png": { - "Size": 178 + "res/drawable/abc_textfield_search_material.xml": { + "Size": 756 }, - "res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { + "res/drawable/abc_vector_test.xml": { + "Size": 612 + }, + "res/drawable/btn_checkbox_checked_mtrl.xml": { + "Size": 2688 + }, + "res/drawable/btn_checkbox_checked_to_unchecked_mtrl_animation.xml": { + "Size": 688 + }, + "res/drawable/btn_checkbox_unchecked_mtrl.xml": { + "Size": 2660 + }, + "res/drawable/btn_checkbox_unchecked_to_checked_mtrl_animation.xml": { + "Size": 688 + }, + "res/drawable/btn_radio_off_mtrl.xml": { + "Size": 1728 + }, + "res/drawable/btn_radio_off_to_on_mtrl_animation.xml": { + "Size": 680 + }, + "res/drawable/btn_radio_on_mtrl.xml": { + "Size": 1656 + }, + "res/drawable/btn_radio_on_to_off_mtrl_animation.xml": { + "Size": 680 + }, + "res/drawable/design_bottom_navigation_item_background.xml": { + "Size": 784 + }, + "res/drawable/design_fab_background.xml": { + "Size": 372 + }, + "res/drawable/design_password_eye.xml": { + "Size": 464 + }, + "res/drawable/design_snackbar_background.xml": { + "Size": 484 + }, + "res/drawable/ic_mtrl_chip_checked_black.xml": { + "Size": 600 + }, + "res/drawable/ic_mtrl_chip_checked_circle.xml": { + "Size": 940 + }, + "res/drawable/ic_mtrl_chip_close_circle.xml": { + "Size": 808 + }, + "res/drawable/mtrl_snackbar_background.xml": { + "Size": 484 + }, + "res/drawable/mtrl_tabs_default_indicator.xml": { + "Size": 628 + }, + "res/drawable/navigation_empty_icon.xml": { + "Size": 516 + }, + "res/drawable/notification_bg.xml": { + "Size": 532 + }, + "res/drawable/notification_bg_low.xml": { + "Size": 532 + }, + "res/drawable/notification_icon_background.xml": { + "Size": 372 + }, + "res/drawable/notification_tile_bg.xml": { + "Size": 304 + }, + "res/drawable/tooltip_frame_dark.xml": { + "Size": 484 + }, + "res/drawable/tooltip_frame_light.xml": { + "Size": 484 + }, + "res/drawable-anydpi-v21/design_ic_visibility.xml": { + "Size": 540 + }, + "res/drawable-anydpi-v21/design_ic_visibility_off.xml": { + "Size": 1144 + }, + "res/drawable-hdpi-v4/abc_ab_share_pack_mtrl_alpha.9.png": { + "Size": 272 + }, + "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_000.png": { + "Size": 227 + }, + "res/drawable-hdpi-v4/abc_btn_check_to_on_mtrl_015.png": { + "Size": 404 + }, + "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_000.png": { + "Size": 464 + }, + "res/drawable-hdpi-v4/abc_btn_radio_to_on_mtrl_015.png": { + "Size": 563 + }, + "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00001.9.png": { + "Size": 1096 + }, + "res/drawable-hdpi-v4/abc_btn_switch_to_on_mtrl_00012.9.png": { + "Size": 1243 + }, + "res/drawable-hdpi-v4/abc_cab_background_top_mtrl_alpha.9.png": { + "Size": 226 + }, + "res/drawable-hdpi-v4/abc_ic_commit_search_api_mtrl_alpha.png": { + "Size": 171 + }, + "res/drawable-hdpi-v4/abc_ic_menu_copy_mtrl_am_alpha.png": { + "Size": 202 + }, + "res/drawable-hdpi-v4/abc_ic_menu_cut_mtrl_alpha.png": { + "Size": 404 + }, + "res/drawable-hdpi-v4/abc_ic_menu_paste_mtrl_am_alpha.png": { + "Size": 226 + }, + "res/drawable-hdpi-v4/abc_ic_menu_selectall_mtrl_alpha.png": { + "Size": 215 + }, + "res/drawable-hdpi-v4/abc_ic_menu_share_mtrl_alpha.png": { + "Size": 389 + }, + "res/drawable-hdpi-v4/abc_ic_star_black_16dp.png": { + "Size": 263 + }, + "res/drawable-hdpi-v4/abc_ic_star_black_36dp.png": { + "Size": 522 + }, + "res/drawable-hdpi-v4/abc_ic_star_black_48dp.png": { + "Size": 668 + }, + "res/drawable-hdpi-v4/abc_ic_star_half_black_16dp.png": { + "Size": 197 + }, + "res/drawable-hdpi-v4/abc_ic_star_half_black_36dp.png": { + "Size": 328 + }, + "res/drawable-hdpi-v4/abc_ic_star_half_black_48dp.png": { + "Size": 431 + }, + "res/drawable-hdpi-v4/abc_list_divider_mtrl_alpha.9.png": { + "Size": 167 + }, + "res/drawable-hdpi-v4/abc_list_focused_holo.9.png": { + "Size": 244 + }, + "res/drawable-hdpi-v4/abc_list_longpressed_holo.9.png": { + "Size": 212 + }, + "res/drawable-hdpi-v4/abc_list_pressed_holo_dark.9.png": { + "Size": 208 + }, + "res/drawable-hdpi-v4/abc_list_pressed_holo_light.9.png": { + "Size": 208 + }, + "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_dark.9.png": { + "Size": 228 + }, + "res/drawable-hdpi-v4/abc_list_selector_disabled_holo_light.9.png": { + "Size": 229 + }, + "res/drawable-hdpi-v4/abc_menu_hardkey_panel_mtrl_mult.9.png": { + "Size": 738 + }, + "res/drawable-hdpi-v4/abc_popup_background_mtrl_mult.9.png": { + "Size": 1098 + }, + "res/drawable-hdpi-v4/abc_scrubber_control_off_mtrl_alpha.png": { + "Size": 201 + }, + "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_000.png": { + "Size": 196 + }, + "res/drawable-hdpi-v4/abc_scrubber_control_to_pressed_mtrl_005.png": { + "Size": 272 + }, + "res/drawable-hdpi-v4/abc_scrubber_primary_mtrl_alpha.9.png": { + "Size": 205 + }, + "res/drawable-hdpi-v4/abc_scrubber_track_mtrl_alpha.9.png": { + "Size": 196 + }, + "res/drawable-hdpi-v4/abc_spinner_mtrl_am_alpha.9.png": { + "Size": 345 + }, + "res/drawable-hdpi-v4/abc_switch_track_mtrl_alpha.9.png": { + "Size": 484 + }, + "res/drawable-hdpi-v4/abc_tab_indicator_mtrl_alpha.9.png": { + "Size": 190 + }, + "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_dark.png": { + "Size": 278 + }, + "res/drawable-hdpi-v4/abc_text_select_handle_left_mtrl_light.png": { + "Size": 278 + }, + "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_dark.png": { + "Size": 398 + }, + "res/drawable-hdpi-v4/abc_text_select_handle_middle_mtrl_light.png": { + "Size": 396 + }, + "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_dark.png": { + "Size": 263 + }, + "res/drawable-hdpi-v4/abc_text_select_handle_right_mtrl_light.png": { + "Size": 262 + }, + "res/drawable-hdpi-v4/abc_textfield_activated_mtrl_alpha.9.png": { + "Size": 186 + }, + "res/drawable-hdpi-v4/abc_textfield_default_mtrl_alpha.9.png": { + "Size": 192 + }, + "res/drawable-hdpi-v4/abc_textfield_search_activated_mtrl_alpha.9.png": { "Size": 178 }, - "res/drawable-hdpi-v4/design_ic_visibility_off.png": { - "Size": 507 + "res/drawable-hdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { + "Size": 178 }, "res/drawable-hdpi-v4/design_ic_visibility.png": { "Size": 470 }, + "res/drawable-hdpi-v4/design_ic_visibility_off.png": { + "Size": 507 + }, "res/drawable-hdpi-v4/icon.png": { "Size": 2178 }, @@ -706,12 +889,12 @@ "res/drawable-hdpi-v4/notification_bg_low_pressed.9.png": { "Size": 225 }, - "res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png": { - "Size": 225 - }, "res/drawable-hdpi-v4/notification_bg_normal.9.png": { "Size": 212 }, + "res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png": { + "Size": 225 + }, "res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png": { "Size": 107 }, @@ -901,12 +1084,12 @@ "res/drawable-mdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { "Size": 178 }, - "res/drawable-mdpi-v4/design_ic_visibility_off.png": { - "Size": 351 - }, "res/drawable-mdpi-v4/design_ic_visibility.png": { "Size": 309 }, + "res/drawable-mdpi-v4/design_ic_visibility_off.png": { + "Size": 351 + }, "res/drawable-mdpi-v4/icon.png": { "Size": 1490 }, @@ -916,12 +1099,12 @@ "res/drawable-mdpi-v4/notification_bg_low_pressed.9.png": { "Size": 223 }, - "res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png": { - "Size": 223 - }, "res/drawable-mdpi-v4/notification_bg_normal.9.png": { "Size": 215 }, + "res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png": { + "Size": 223 + }, "res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png": { "Size": 98 }, @@ -1129,12 +1312,12 @@ "res/drawable-xhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { "Size": 182 }, - "res/drawable-xhdpi-v4/design_ic_visibility_off.png": { - "Size": 629 - }, "res/drawable-xhdpi-v4/design_ic_visibility.png": { "Size": 593 }, + "res/drawable-xhdpi-v4/design_ic_visibility_off.png": { + "Size": 629 + }, "res/drawable-xhdpi-v4/icon.png": { "Size": 3098 }, @@ -1144,12 +1327,12 @@ "res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png": { "Size": 252 }, - "res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png": { - "Size": 247 - }, "res/drawable-xhdpi-v4/notification_bg_normal.9.png": { "Size": 221 }, + "res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png": { + "Size": 247 + }, "res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png": { "Size": 138 }, @@ -1294,12 +1477,12 @@ "res/drawable-xxhdpi-v4/abc_textfield_search_default_mtrl_alpha.9.png": { "Size": 186 }, - "res/drawable-xxhdpi-v4/design_ic_visibility_off.png": { - "Size": 884 - }, "res/drawable-xxhdpi-v4/design_ic_visibility.png": { "Size": 868 }, + "res/drawable-xxhdpi-v4/design_ic_visibility_off.png": { + "Size": 884 + }, "res/drawable-xxhdpi-v4/icon.png": { "Size": 4674 }, @@ -1381,207 +1564,15 @@ "res/drawable-xxxhdpi-v4/abc_text_select_handle_right_mtrl_light.png": { "Size": 513 }, - "res/drawable-xxxhdpi-v4/design_ic_visibility_off.png": { - "Size": 1201 - }, "res/drawable-xxxhdpi-v4/design_ic_visibility.png": { "Size": 1155 }, + "res/drawable-xxxhdpi-v4/design_ic_visibility_off.png": { + "Size": 1201 + }, "res/drawable-xxxhdpi-v4/icon.png": { "Size": 6832 }, - "res/drawable/abc_btn_borderless_material.xml": { - "Size": 588 - }, - "res/drawable/abc_btn_check_material_anim.xml": { - "Size": 816 - }, - "res/drawable/abc_btn_check_material.xml": { - "Size": 464 - }, - "res/drawable/abc_btn_colored_material.xml": { - "Size": 344 - }, - "res/drawable/abc_btn_default_mtrl_shape.xml": { - "Size": 932 - }, - "res/drawable/abc_btn_radio_material_anim.xml": { - "Size": 816 - }, - "res/drawable/abc_btn_radio_material.xml": { - "Size": 464 - }, - "res/drawable/abc_cab_background_internal_bg.xml": { - "Size": 372 - }, - "res/drawable/abc_cab_background_top_material.xml": { - "Size": 336 - }, - "res/drawable/abc_dialog_material_background.xml": { - "Size": 716 - }, - "res/drawable/abc_edit_text_material.xml": { - "Size": 868 - }, - "res/drawable/abc_ic_ab_back_material.xml": { - "Size": 692 - }, - "res/drawable/abc_ic_arrow_drop_right_black_24dp.xml": { - "Size": 1000 - }, - "res/drawable/abc_ic_clear_material.xml": { - "Size": 684 - }, - "res/drawable/abc_ic_go_search_api_material.xml": { - "Size": 640 - }, - "res/drawable/abc_ic_menu_overflow_material.xml": { - "Size": 792 - }, - "res/drawable/abc_ic_search_api_material.xml": { - "Size": 812 - }, - "res/drawable/abc_ic_voice_search_api_material.xml": { - "Size": 828 - }, - "res/drawable/abc_item_background_holo_dark.xml": { - "Size": 1012 - }, - "res/drawable/abc_item_background_holo_light.xml": { - "Size": 1012 - }, - "res/drawable/abc_list_divider_material.xml": { - "Size": 480 - }, - "res/drawable/abc_list_selector_background_transition_holo_dark.xml": { - "Size": 424 - }, - "res/drawable/abc_list_selector_background_transition_holo_light.xml": { - "Size": 424 - }, - "res/drawable/abc_list_selector_holo_dark.xml": { - "Size": 1064 - }, - "res/drawable/abc_list_selector_holo_light.xml": { - "Size": 1064 - }, - "res/drawable/abc_ratingbar_indicator_material.xml": { - "Size": 664 - }, - "res/drawable/abc_ratingbar_material.xml": { - "Size": 664 - }, - "res/drawable/abc_ratingbar_small_material.xml": { - "Size": 664 - }, - "res/drawable/abc_seekbar_thumb_material.xml": { - "Size": 1100 - }, - "res/drawable/abc_seekbar_tick_mark_material.xml": { - "Size": 516 - }, - "res/drawable/abc_seekbar_track_material.xml": { - "Size": 1408 - }, - "res/drawable/abc_spinner_textfield_background_material.xml": { - "Size": 1160 - }, - "res/drawable/abc_switch_thumb_material.xml": { - "Size": 464 - }, - "res/drawable/abc_tab_indicator_material.xml": { - "Size": 468 - }, - "res/drawable/abc_text_cursor_material.xml": { - "Size": 516 - }, - "res/drawable/abc_textfield_search_material.xml": { - "Size": 756 - }, - "res/drawable/abc_vector_test.xml": { - "Size": 612 - }, - "res/drawable/btn_checkbox_checked_mtrl.xml": { - "Size": 2688 - }, - "res/drawable/btn_checkbox_checked_to_unchecked_mtrl_animation.xml": { - "Size": 688 - }, - "res/drawable/btn_checkbox_unchecked_mtrl.xml": { - "Size": 2660 - }, - "res/drawable/btn_checkbox_unchecked_to_checked_mtrl_animation.xml": { - "Size": 688 - }, - "res/drawable/btn_radio_off_mtrl.xml": { - "Size": 1728 - }, - "res/drawable/btn_radio_off_to_on_mtrl_animation.xml": { - "Size": 680 - }, - "res/drawable/btn_radio_on_mtrl.xml": { - "Size": 1656 - }, - "res/drawable/btn_radio_on_to_off_mtrl_animation.xml": { - "Size": 680 - }, - "res/drawable/design_bottom_navigation_item_background.xml": { - "Size": 784 - }, - "res/drawable/design_fab_background.xml": { - "Size": 372 - }, - "res/drawable/design_password_eye.xml": { - "Size": 464 - }, - "res/drawable/design_snackbar_background.xml": { - "Size": 484 - }, - "res/drawable/ic_mtrl_chip_checked_black.xml": { - "Size": 600 - }, - "res/drawable/ic_mtrl_chip_checked_circle.xml": { - "Size": 940 - }, - "res/drawable/ic_mtrl_chip_close_circle.xml": { - "Size": 808 - }, - "res/drawable/mtrl_snackbar_background.xml": { - "Size": 484 - }, - "res/drawable/mtrl_tabs_default_indicator.xml": { - "Size": 628 - }, - "res/drawable/navigation_empty_icon.xml": { - "Size": 516 - }, - "res/drawable/notification_bg_low.xml": { - "Size": 532 - }, - "res/drawable/notification_bg.xml": { - "Size": 532 - }, - "res/drawable/notification_icon_background.xml": { - "Size": 372 - }, - "res/drawable/notification_tile_bg.xml": { - "Size": 304 - }, - "res/drawable/tooltip_frame_dark.xml": { - "Size": 484 - }, - "res/drawable/tooltip_frame_light.xml": { - "Size": 484 - }, - "res/interpolator-v21/mtrl_fast_out_linear_in.xml": { - "Size": 400 - }, - "res/interpolator-v21/mtrl_fast_out_slow_in.xml": { - "Size": 400 - }, - "res/interpolator-v21/mtrl_linear_out_slow_in.xml": { - "Size": 400 - }, "res/interpolator/btn_checkbox_checked_mtrl_animation_interpolator_0.xml": { "Size": 316 }, @@ -1609,53 +1600,20 @@ "res/interpolator/mtrl_fast_out_slow_in.xml": { "Size": 144 }, - "res/interpolator/mtrl_linear_out_slow_in.xml": { - "Size": 136 - }, "res/interpolator/mtrl_linear.xml": { "Size": 132 }, - "res/layout-sw600dp-v13/design_layout_snackbar.xml": { - "Size": 528 - }, - "res/layout-sw600dp-v13/mtrl_layout_snackbar.xml": { - "Size": 528 - }, - "res/layout-v16/notification_template_custom_big.xml": { - "Size": 3208 - }, - "res/layout-v21/abc_screen_toolbar.xml": { - "Size": 1504 - }, - "res/layout-v21/fallbacktoolbardonotuse.xml": { - "Size": 496 - }, - "res/layout-v21/notification_action_tombstone.xml": { - "Size": 1228 - }, - "res/layout-v21/notification_action.xml": { - "Size": 1052 - }, - "res/layout-v21/notification_template_custom_big.xml": { - "Size": 2456 - }, - "res/layout-v21/notification_template_icon_group.xml": { - "Size": 988 - }, - "res/layout-v21/toolbar.xml": { - "Size": 496 - }, - "res/layout-v22/abc_alert_dialog_button_bar_material.xml": { - "Size": 1584 + "res/interpolator/mtrl_linear_out_slow_in.xml": { + "Size": 136 }, - "res/layout-v26/abc_screen_toolbar.xml": { - "Size": 1560 + "res/interpolator-v21/mtrl_fast_out_linear_in.xml": { + "Size": 400 }, - "res/layout-watch-v20/abc_alert_dialog_button_bar_material.xml": { - "Size": 1208 + "res/interpolator-v21/mtrl_fast_out_slow_in.xml": { + "Size": 400 }, - "res/layout-watch-v20/abc_alert_dialog_title_material.xml": { - "Size": 1352 + "res/interpolator-v21/mtrl_linear_out_slow_in.xml": { + "Size": 400 }, "res/layout/abc_action_bar_title_item.xml": { "Size": 872 @@ -1675,12 +1633,12 @@ "res/layout/abc_action_mode_close_item_material.xml": { "Size": 840 }, - "res/layout/abc_activity_chooser_view_list_item.xml": { - "Size": 1304 - }, "res/layout/abc_activity_chooser_view.xml": { "Size": 1684 }, + "res/layout/abc_activity_chooser_view_list_item.xml": { + "Size": 1304 + }, "res/layout/abc_alert_dialog_button_bar_material.xml": { "Size": 1536 }, @@ -1720,12 +1678,12 @@ "res/layout/abc_screen_content_include.xml": { "Size": 548 }, - "res/layout/abc_screen_simple_overlay_action_mode.xml": { - "Size": 792 - }, "res/layout/abc_screen_simple.xml": { "Size": 832 }, + "res/layout/abc_screen_simple_overlay_action_mode.xml": { + "Size": 792 + }, "res/layout/abc_screen_toolbar.xml": { "Size": 1452 }, @@ -1759,12 +1717,12 @@ "res/layout/design_bottom_sheet_dialog.xml": { "Size": 1184 }, - "res/layout/design_layout_snackbar_include.xml": { - "Size": 1444 - }, "res/layout/design_layout_snackbar.xml": { "Size": 528 }, + "res/layout/design_layout_snackbar_include.xml": { + "Size": 1444 + }, "res/layout/design_layout_tab_icon.xml": { "Size": 408 }, @@ -1774,6 +1732,9 @@ "res/layout/design_menu_item_action_area.xml": { "Size": 320 }, + "res/layout/design_navigation_item.xml": { + "Size": 536 + }, "res/layout/design_navigation_item_header.xml": { "Size": 440 }, @@ -1783,15 +1744,12 @@ "res/layout/design_navigation_item_subheader.xml": { "Size": 564 }, - "res/layout/design_navigation_item.xml": { - "Size": 536 + "res/layout/design_navigation_menu.xml": { + "Size": 528 }, "res/layout/design_navigation_menu_item.xml": { "Size": 856 }, - "res/layout/design_navigation_menu.xml": { - "Size": 528 - }, "res/layout/design_text_input_password_icon.xml": { "Size": 564 }, @@ -1807,35 +1765,35 @@ "res/layout/main.xml": { "Size": 544 }, - "res/layout/mtrl_layout_snackbar_include.xml": { - "Size": 1404 - }, "res/layout/mtrl_layout_snackbar.xml": { "Size": 528 }, - "res/layout/notification_action_tombstone.xml": { - "Size": 1332 + "res/layout/mtrl_layout_snackbar_include.xml": { + "Size": 1404 }, "res/layout/notification_action.xml": { "Size": 1156 }, + "res/layout/notification_action_tombstone.xml": { + "Size": 1332 + }, "res/layout/notification_media_action.xml": { "Size": 564 }, "res/layout/notification_media_cancel_action.xml": { "Size": 744 }, + "res/layout/notification_template_big_media.xml": { + "Size": 1696 + }, "res/layout/notification_template_big_media_custom.xml": { "Size": 3044 }, - "res/layout/notification_template_big_media_narrow_custom.xml": { - "Size": 3216 - }, "res/layout/notification_template_big_media_narrow.xml": { "Size": 1824 }, - "res/layout/notification_template_big_media.xml": { - "Size": 1696 + "res/layout/notification_template_big_media_narrow_custom.xml": { + "Size": 3216 }, "res/layout/notification_template_icon_group.xml": { "Size": 392 @@ -1843,12 +1801,12 @@ "res/layout/notification_template_lines_media.xml": { "Size": 2872 }, - "res/layout/notification_template_media_custom.xml": { - "Size": 2756 - }, "res/layout/notification_template_media.xml": { "Size": 1292 }, + "res/layout/notification_template_media_custom.xml": { + "Size": 2756 + }, "res/layout/notification_template_part_chronometer.xml": { "Size": 440 }, @@ -1879,9 +1837,51 @@ "res/layout/toolbar.xml": { "Size": 452 }, + "res/layout-sw600dp-v13/design_layout_snackbar.xml": { + "Size": 528 + }, + "res/layout-sw600dp-v13/mtrl_layout_snackbar.xml": { + "Size": 528 + }, + "res/layout-v16/notification_template_custom_big.xml": { + "Size": 3208 + }, + "res/layout-v21/abc_screen_toolbar.xml": { + "Size": 1504 + }, + "res/layout-v21/fallbacktoolbardonotuse.xml": { + "Size": 496 + }, + "res/layout-v21/notification_action.xml": { + "Size": 1052 + }, + "res/layout-v21/notification_action_tombstone.xml": { + "Size": 1228 + }, + "res/layout-v21/notification_template_custom_big.xml": { + "Size": 2456 + }, + "res/layout-v21/notification_template_icon_group.xml": { + "Size": 988 + }, + "res/layout-v21/toolbar.xml": { + "Size": 496 + }, + "res/layout-v22/abc_alert_dialog_button_bar_material.xml": { + "Size": 1584 + }, + "res/layout-v26/abc_screen_toolbar.xml": { + "Size": 1560 + }, + "res/layout-watch-v20/abc_alert_dialog_button_bar_material.xml": { + "Size": 1208 + }, + "res/layout-watch-v20/abc_alert_dialog_title_material.xml": { + "Size": 1352 + }, "resources.arsc": { "Size": 341040 } }, - "PackageSize": 9521310 + "PackageSize": 9513118 } \ No newline at end of file From a3d3cfe9b8cf83ba0737e4b360927800bb1379cf Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Fri, 10 Feb 2023 09:21:17 +0100 Subject: [PATCH 9/9] Revert "Remove other legacy tests from CI" This reverts commit 58ccdaf672de5e79874e2925c25893323fc43a6c. --- build-tools/automation/azure-pipelines.yaml | 231 ++++++++++++++++++++ 1 file changed, 231 insertions(+) diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 8947ad72a82..6a15f30efca 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -99,6 +99,199 @@ stages: displayName: Smoke Tests dependsOn: mac_build jobs: + # Check - "Xamarin.Android (macOS > Tests > APKs Classic)" + - job: mac_apk_tests_legacy + displayName: macOS > Tests > APKs Classic + # Disabled on .NET release branches + condition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) + pool: + vmImage: $(HostedMacImage) + timeoutInMinutes: 180 + workspace: + clean: all + variables: + ApkTestConfiguration: Release + steps: + - template: yaml-templates/setup-test-environment.yaml + parameters: + configuration: $(ApkTestConfiguration) + provisionatorChannel: ${{ parameters.provisionatorChannel }} + + - template: yaml-templates/run-xaprepare.yaml + parameters: + displayName: install emulator + arguments: --s=EmulatorTestDependencies + + - template: yaml-templates/run-dotnet-preview.yaml + parameters: + project: Xamarin.Android.sln + arguments: -t:PrepareJavaInterop -c $(XA.Build.Configuration) -m:1 -v:n + displayName: prepare java.interop $(XA.Build.Configuration) + continueOnError: false + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.JcwGen_Tests + project: tests/CodeGen-Binding/Xamarin.Android.JcwGen-Tests/Xamarin.Android.JcwGen-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.JcwGen_Tests-$(ApkTestConfiguration).xml + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.JcwGen_Tests-Signed.apk + artifactFolder: Default + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.JcwGen_Tests_FastDev + project: tests/CodeGen-Binding/Xamarin.Android.JcwGen-Tests/Xamarin.Android.JcwGen-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.JcwGen_Tests-$(ApkTestConfiguration).xml + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.JcwGen_Tests-Signed.apk + artifactFolder: FastDev_Assemblies_Dexes + extraBuildArgs: /p:AndroidFastDeploymentType=Assemblies:Dexes + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.Locale_Tests + project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration).xml + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.Locale_Tests-Signed.apk + artifactFolder: Default + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.Locale_Tests-Aot + project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration)-Aot.xml + extraBuildArgs: /p:AotAssemblies=True + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.Locale_Tests-Signed.apk + artifactFolder: Aot + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.Locale_Tests-Profiled-Aot + project: tests/locales/Xamarin.Android.Locale-Tests/Xamarin.Android.Locale-Tests.csproj + testResultsFiles: TestResult-Xamarin.Android.Locale_Tests-$(ApkTestConfiguration)-Profiled-Aot.xml + extraBuildArgs: /p:AotAssemblies=True /p:AndroidEnableProfiledAot=true + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.Locale_Tests-Signed.apk + artifactFolder: Profiled-Aot + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Android.EmbeddedDSO_Test + project: tests/EmbeddedDSOs/EmbeddedDSO/EmbeddedDSO.csproj + testResultsFiles: TestResult-Xamarin.Android.EmbeddedDSO_Test.nunit-$(ApkTestConfiguration).xml + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Android.EmbeddedDSO_Test-Signed.apk + artifactFolder: Default + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Forms-Performance-Integration + project: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj + testResultsFiles: TestResult-apkdiff-Xamarin.Forms_Performance_Integration-Signed-$(ApkTestConfiguration).xml + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk + artifactFolder: Default + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Forms-Performance-Integration-Aot + project: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj + testResultsFiles: TestResult-apkdiff-Xamarin.Forms_Performance_Integration-Signed-$(ApkTestConfiguration)-Aot.xml + extraBuildArgs: /p:AotAssemblies=true + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk + artifactFolder: Aot + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: Xamarin.Forms-Performance-Integration-Profiled-Aot + project: tests/Xamarin.Forms-Performance-Integration/Droid/Xamarin.Forms.Performance.Integration.Droid.csproj + testResultsFiles: TestResult-apkdiff-Xamarin.Forms_Performance_Integration-Signed-$(ApkTestConfiguration)-Profiled-Aot.xml + extraBuildArgs: /p:AotAssemblies=True /p:AndroidEnableProfiledAot=true + artifactSource: bin/Test$(ApkTestConfiguration)/Xamarin.Forms_Performance_Integration-Signed.apk + artifactFolder: Profiled-Aot + + - template: yaml-templates/apk-instrumentation.yaml + parameters: + configuration: $(ApkTestConfiguration) + testName: VSAndroidApp + project: samples/VSAndroidAppProxy.csproj + testResultsFiles: TestResult-apkdiff-com.companyname.vsandroidapp-Signed-$(ApkTestConfiguration).xml + artifactSource: bin/Test$(ApkTestConfiguration)/com.companyname.vsandroidapp-Signed.apk + artifactFolder: Default + + - task: MSBuild@1 + displayName: shut down emulator + inputs: + solution: tests/Mono.Android-Tests/Mono.Android-Tests.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: >- + /t:AcquireAndroidTarget,ReleaseAndroidTarget + /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/shutdown-emulator.binlog + condition: always() + + - template: yaml-templates/upload-results.yaml + parameters: + configuration: $(ApkTestConfiguration) + artifactName: Test Results - APKs Legacy - macOS + + # Plots: Utilize command-line utility built here to send plot information contained in CSV files to AppInsights + - task: MSBuild@1 + displayName: build plots-to-appinsights + inputs: + solution: build-tools/plots-to-appinsights/ProcessPlotCSVFile.csproj + configuration: $(ApkTestConfiguration) + msbuildArguments: >- + /restore + /t:Build + /v:normal + /bl:$(System.DefaultWorkingDirectory)/bin/Test$(ApkTestConfiguration)/plots-to-appinsights.binlog + continueOnError: true + condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) + + # Process Plot CSV files and send results to AppInsights + # XamarinAndroidMetrics: https://ms.portal.azure.com/#@microsoft.onmicrosoft.com/resource/subscriptions/64e11c84-c922-4ffd-bea9-67ab39354edd/resourceGroups/XamarinMetrics/providers/microsoft.insights/components/XamarinAndroidMetrics/overview + # UNDONE: Need plot definitions for the following files: + # TestResult-Xamarin.Android.EmbeddedDSO_Test-times.csv + + - template: yaml-templates/plots-to-appinsights.yaml + parameters: + condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) + configuration: $(ApkTestConfiguration) + plotGroup: Test times + plotTitle: Runtime merged + plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Mono.Android_Tests-times.csv + + - template: yaml-templates/plots-to-appinsights.yaml + parameters: + condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) + configuration: $(ApkTestConfiguration) + plotGroup: Test times + plotTitle: Jcw + plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Xamarin.Android.JcwGen_Tests-times.csv + + - template: yaml-templates/plots-to-appinsights.yaml + parameters: + condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) + configuration: $(ApkTestConfiguration) + plotGroup: Test times + plotTitle: Locale + plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Xamarin.Android.Locale_Tests-times.csv + + - template: yaml-templates/plots-to-appinsights.yaml + parameters: + condition: and(succeeded(), or(eq(variables['Build.Reason'], 'IndividualCI'), eq(variables['Build.Reason'], 'Manual'))) + configuration: $(ApkTestConfiguration) + plotGroup: Test times + plotTitle: Xamarin.Forms app startup + plotPathAndFilename: $(System.DefaultWorkingDirectory)/TestResult-Xamarin.Forms_Test-times.csv + + - template: yaml-templates/fail-on-issue.yaml + # Check - "Xamarin.Android (macOS > Tests > APKs .NET)" - job: mac_apk_tests_net displayName: macOS > Tests > APKs .NET @@ -457,6 +650,44 @@ stages: dependsOn: mac_build condition: and(succeeded(), or(eq(variables['RunAllTests'], true), contains(dependencies.mac_build.outputs['mac_build_create_installers.TestConditions.TestAreas'], 'MSBuildDevice'))) jobs: + # Check - "Xamarin.Android (macOS > Tests > MSBuild+Emulator Legacy #N)" + - template: yaml-templates/run-msbuild-device-tests.yaml + parameters: + node_id: 1 + job_name: mac_msbuilddevice_tests_1 + job_suffix: Legacy + nunit_categories: '&& cat != Debugger' + provisionatorChannel: ${{ parameters.provisionatorChannel }} + jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) + + - template: yaml-templates/run-msbuild-device-tests.yaml + parameters: + node_id: 2 + job_name: mac_msbuilddevice_tests_2 + job_suffix: Legacy + nunit_categories: '&& cat != Debugger' + provisionatorChannel: ${{ parameters.provisionatorChannel }} + jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) + + - template: yaml-templates/run-msbuild-device-tests.yaml + parameters: + node_id: 3 + job_name: mac_msbuilddevice_tests_3 + job_suffix: Legacy + nunit_categories: '&& cat != Debugger' + provisionatorChannel: ${{ parameters.provisionatorChannel }} + jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) + + - template: yaml-templates/run-msbuild-device-tests.yaml + parameters: + node_id: 4 + job_name: mac_msbuilddevice_tests_with_debugger + job_suffix: Legacy + jdkTestFolder: $(XA.Jdk11.Folder) + nunit_categories: '&& cat == Debugger' + provisionatorChannel: ${{ parameters.provisionatorChannel }} + jobCondition: and(succeeded(), eq(variables.IsRelOrTargetingRel, 'False')) + # Check - "Xamarin.Android (macOS > Tests > MSBuild+Emulator One .NET #N)" - template: yaml-templates/run-msbuild-device-tests.yaml parameters: