From 4ea5dbb921ccebb93f2a03d33169d2ebb6248936 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Fri, 22 Sep 2023 14:28:40 -0500 Subject: [PATCH 01/92] [release/8.0.1xx] stable 34.0.x branding (#8361) Context: https://github.com/xamarin/xamarin-android/commit/e6002f84602ade59eccf95974ca6188875d3a79f The `release/8.0.1xx` versioning will be stable with .NET 8 GA. We will start out with 34.0.1, and each commit increments by 1. We have to reset `$(AndroidPackVersion)` so it will "reset" the commit distance. --- Directory.Build.props | 7 +++++-- build-tools/create-packs/Directory.Build.targets | 2 +- build-tools/scripts/XAVersionInfo.targets | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index e5e3b2e4cd2..644f5daa690 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -34,8 +34,11 @@ * Major/Minor match Android stable API level, such as 30.0 for API 30. * Bump first digit of the patch version for feature releases (and reset the first two digits to 0) --> - 34.0.0 - rc.2 + 34.0.1 + $(AndroidPackVersion.LastIndexOf(".")) + $(AndroidPackVersion.Substring(0,$(AndroidPackVersionPatchIndex))) + $(AndroidPackVersion.Substring($([MSBuild]::Add($(AndroidPackVersionPatchIndex), 1)))) + rtm diff --git a/build-tools/create-packs/Directory.Build.targets b/build-tools/create-packs/Directory.Build.targets index ff6d4f99933..ce8b9733314 100644 --- a/build-tools/create-packs/Directory.Build.targets +++ b/build-tools/create-packs/Directory.Build.targets @@ -85,7 +85,7 @@ diff --git a/build-tools/scripts/XAVersionInfo.targets b/build-tools/scripts/XAVersionInfo.targets index a96bcd8f4d1..c30f614b13e 100644 --- a/build-tools/scripts/XAVersionInfo.targets +++ b/build-tools/scripts/XAVersionInfo.targets @@ -82,8 +82,8 @@ <_AndroidPackBranch>$([System.Text.RegularExpressions.Regex]::Replace('$(XAVersionBranch)', '[^a-zA-Z0-9-]', '-')) <_AndroidPackLabel Condition=" '$(_AndroidPackLabel)' == '' and ('$(XAVersionBranch)' == 'main' or $(XAVersionBranch.StartsWith('release/')))">$(AndroidPackVersionSuffix).$(PackVersionCommitCount) <_AndroidPackLabel Condition=" '$(_AndroidPackLabel)' == '' ">ci.$(_AndroidPackBranch).$(PackVersionCommitCount) - $(AndroidPackVersion)-$(_AndroidPackLabel) - $(AndroidPackVersion).$(PackVersionCommitCount) + $(AndroidPackVersionMajorMinor).$([MSBuild]::Add($(AndroidPackVersionPatch), $(PackVersionCommitCount))) + $(AndroidPackVersionLong).0 From ada56e85a404d2a078fc7b62f40e61c873e1f482 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Fri, 22 Sep 2023 15:59:11 -0400 Subject: [PATCH 02/92] [ci] Use Python 3 for signing tasks (#8367) Authenticode signing attempts started failing recently with: ERROR: 'xsign' is misspelled or not recognized by the system. Updating to Python 3 is the suggested fix for this issue. --- .../automation/yaml-templates/install-microbuild-tooling.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml b/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml index 5da2b01a0d9..0e9a983af7a 100644 --- a/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml +++ b/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml @@ -9,6 +9,10 @@ steps: forceReinstallCredentialProvider: true condition: ${{ parameters.condition }} +- task: UsePythonVersion@0 + inputs: + versionSpec: 3.x + # ESRP signing requires minimum azure client version 2.8.0 - template: azure-tools/az-client-update.yml@yaml-templates parameters: From 75c73f0c807b1f65150d2733f30ae66555a32bb1 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Tue, 26 Sep 2023 14:54:31 +0100 Subject: [PATCH 03/92] Bump to xamarin/monodroid/main@e57630bd (#8371) Changes: https://github.com/xamarin/monodroid/compare/c3604981...e57630bd * [build] set $(DisableTransitiveFrameworkReferenceDownloads)=true * [tools/msbuild] bump to JDK 17.0.8 for InstallAndroidDependencies * [msbuild] Add new Fast Deployment tool xamarin.cp --- .external | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.external b/.external index b0955939ad3..b7a1600fdf1 100644 --- a/.external +++ b/.external @@ -1,2 +1,2 @@ -xamarin/monodroid:main@c36049815ca04379194dd32f402f56beb5b992d3 +xamarin/monodroid:main@e57630bd3a790e5772ae030e517326d34f38431d mono/mono:2020-02@6dd9def57ce969ca04a0ecd9ef72c0a8f069112d From 04526e2302ac85b1fc310b9fc6a6077580254cfc Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 16:13:06 -0500 Subject: [PATCH 04/92] Bump to dotnet/installer/release/8.0.1xx@2ff90f1abc 8.0.100-rtm.23475.14 (#8365) Changes: https://github.com/dotnet/installer/compare/e1fd7d9649...2ff90f1abc Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rc.2.23468.1 to 8.0.100-rtm.23475.14 * Microsoft.NETCore.App.Ref: from 8.0.0-rc.2.23466.4 to 8.0.0-rtm.23472.12 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100.Transport: from 8.0.0-rc.2.23463.1 to 8.0.0-rtm.23470.1 * Microsoft.NET.ILLink.Tasks: from 8.0.0-rc.2.23466.4 to 8.0.0-rtm.23472.12 * Microsoft.DotNet.Cecil: from 0.11.4-alpha.23461.1 to 0.11.4-alpha.23468.2 Other changes: * Feeds for dotnet/runtime 7.0.12 * Feeds for dotnet/runtime 6.0.23 * Version bands for Mono and emsdk workloads are `8.0.100-rtm` Co-authored-by: Jonathan Peppers --- NuGet.config | 8 +++++--- eng/Version.Details.xml | 20 ++++++++++---------- eng/Versions.props | 14 +++++++------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/NuGet.config b/NuGet.config index 1ed561d2bd3..1eda387eb45 100644 --- a/NuGet.config +++ b/NuGet.config @@ -11,9 +11,11 @@ - - - + + + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index fb02dc87077..38eee3b3586 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,24 +1,24 @@ - + https://github.com/dotnet/installer - e1fd7d964980ed478fa30457cf750e81105caee1 + 2ff90f1abc52c3fc02812bad157e2985040a77a1 - + https://github.com/dotnet/runtime - 287c10d2539d47268a1083c4d533cf84124900cf + e95228dbcf7a69f87b00da969b0cabf2e62ab207 - + https://github.com/dotnet/runtime - 287c10d2539d47268a1083c4d533cf84124900cf + e95228dbcf7a69f87b00da969b0cabf2e62ab207 - + https://github.com/dotnet/emsdk - 1999c8c8ab7473a7e1c5b7bdf5ba6d9a985a69cc + 446eeb331fcbf2f48c14a377601a8ab950ec942e - + https://github.com/dotnet/cecil - a112f15aa032c029b7d9c77df3427111d93cf407 + 89be445dd4936157533ad96bafb95f701430653a diff --git a/eng/Versions.props b/eng/Versions.props index 5099b035dd7..3edd7363655 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,15 +1,15 @@ - 8.0.100-rc.2.23468.1 - 8.0.0-rc.2.23466.4 - 8.0.0-rc.2.23466.4 + 8.0.100-rtm.23475.14 + 8.0.0-rtm.23472.12 + 8.0.0-rtm.23472.12 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0-rc.2.23463.1 + 8.0.0-rtm.23470.1 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) 7.0.100-rc.1.22410.7 - 0.11.4-alpha.23461.1 + 0.11.4-alpha.23468.2 $(MicrosoftNETCoreAppRefPackageVersion) @@ -18,8 +18,8 @@ \-(preview|rc|alpha).\d+ $(VersionBand)$([System.Text.RegularExpressions.Regex]::Match($(MicrosoftDotnetSdkInternalPackageVersion), $(VersionSuffixRegex))) $(DotNetPreviewVersionBand) - $(VersionBand)$([System.Text.RegularExpressions.Regex]::Match($(MicrosoftNETCoreAppRefPackageVersion), $(VersionSuffixRegex))) - $(VersionBand)$([System.Text.RegularExpressions.Regex]::Match($(MicrosoftNETWorkloadEmscriptenPackageVersion), $(VersionSuffixRegex))) + 8.0.100-rtm + 8.0.100-rtm $(DotNetPreviewVersionBand) From 39d58bdf68d53e2032db39b9484e8d2c67b1cf50 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 26 Sep 2023 16:44:20 -0500 Subject: [PATCH 05/92] [tests] set `$(DisableTransitiveFrameworkReferenceDownloads)` (#8374) Context: https://github.com/xamarin/xamarin-android/pull/8360 MSBuild tests that use `net7.0-android` `TargetFrameworks` can fail on release branches with: (Restore target) -> error NU1102: Unable to find package Microsoft.AspNetCore.App.Ref with version (= 7.0.12) error NU1102: - Found 1621 version(s) in dotnet7 [ Nearest version: 7.0.0-rtm.22513.3 ] error NU1102: - Found 1537 version(s) in dotnet8 [ Nearest version: 8.0.0-alpha.1.22416.11 ] error NU1102: - Found 87 version(s) in testsource1 [ Nearest version: 8.0.0-preview.1.23112.2 ] error NU1102: - Found 87 version(s) in dotnet-public [ Nearest version: 8.0.0-preview.1.23112.2 ] error NU1102: - Found 0 version(s) in darc-pub-dotnet-emsdk-9506882 error NU1102: - Found 0 version(s) in darc-pub-dotnet-runtime-26e0f82 error NU1102: - Found 0 version(s) in darc-pub-dotnet-runtime-301ba1e error NU1102: - Found 0 version(s) in dotnet-eng error NU1102: - Found 0 version(s) in dotnet8-transport error NU1102: - Found 0 version(s) in xamarin.android util 0 Warning(s) 1 Error(s) To solve this, we can set `$(DisableTransitiveFrameworkReferenceDownloads)` as we did in 2320e204 so it doesn't try to restore ASP.NET or Windows Desktop packs. The MSBuild integration tests have their own `Directory.Build.props`, so this seems like a reasonable place to set this value. --- .../Tests/Xamarin.ProjectTools/Common/XamarinProject.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs index 7ce6c520bfe..a3fe0d7a4c0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/XamarinProject.cs @@ -95,6 +95,7 @@ public XamarinProject (string debugConfigurationName = "Debug", string releaseCo $@" {Configuration} + true " }); From a3606c21515a35f20e06c1a28ee65179cbdc61f3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 27 Sep 2023 12:05:34 -0500 Subject: [PATCH 06/92] Bump to dotnet/installer/release/8.0.1xx@da40dcba0f 8.0.100-rtm.23477.4 (#8377) Changes: https://github.com/dotnet/installer/compare/2ff90f1abc...da40dcba0f Changes: https://github.com/dotnet/runtime/compare/e95228dbcf...a3d5300bae Changes: https://github.com/dotnet/emsdk/compare/446eeb331f...41db232278 Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23475.14 to 8.0.100-rtm.23477.4 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23472.12 to 8.0.0-rtm.23475.7 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100.Transport: from 8.0.0-rtm.23470.1 to 8.0.0-rtm.23473.1 * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23472.12 to 8.0.0-rtm.23475.7 --- eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 38eee3b3586..e9362e8c9fd 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,20 +1,20 @@ - + https://github.com/dotnet/installer - 2ff90f1abc52c3fc02812bad157e2985040a77a1 + da40dcba0fe957fb803a0259b08271b6bb76f5fe - + https://github.com/dotnet/runtime - e95228dbcf7a69f87b00da969b0cabf2e62ab207 + a3d5300baee03169bf737cfc4e9b1f7dbece4d05 - + https://github.com/dotnet/runtime - e95228dbcf7a69f87b00da969b0cabf2e62ab207 + a3d5300baee03169bf737cfc4e9b1f7dbece4d05 - + https://github.com/dotnet/emsdk - 446eeb331fcbf2f48c14a377601a8ab950ec942e + 41db2322780b16e4ddadcebca41dc86c7806ed9a https://github.com/dotnet/cecil diff --git a/eng/Versions.props b/eng/Versions.props index 3edd7363655..885bf2c5703 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,12 +1,12 @@ - 8.0.100-rtm.23475.14 - 8.0.0-rtm.23472.12 - 8.0.0-rtm.23472.12 + 8.0.100-rtm.23477.4 + 8.0.0-rtm.23475.7 + 8.0.0-rtm.23475.7 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0-rtm.23470.1 + 8.0.0-rtm.23473.1 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) 7.0.100-rc.1.22410.7 0.11.4-alpha.23468.2 From bebabaee7788ec7bb5097582b1a7026dfb48c2b3 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 27 Sep 2023 12:11:18 -0500 Subject: [PATCH 07/92] [Xamarin.Android.Build.Tasks] fix `InstallAndroidDependencies` in .NET 8 (#8375) Fixes: https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1837913 Context: dc3ccf28cdbe9f8c0a705400b83c11a85c81a980 Testing on a DevBox with only the .NET 8 RC 1 SDK and `dotnet workload install maui`: > dotnet new android > dotnet build -t:InstallAndroidDependencies -p:AndroidSdkDirectory=C:\tools\android-sdk -p:JavaSdkDirectory=C:\tools\jdk -bl Microsoft.Android.Sdk.Windows\34.0.0-rc.1.432\tools\Xamarin.Android.Common.Debugging.targets(110,2): error XA5300: The Android SDK directory could not be found. Check that the Android SDK Manager in Visual Studio shows a valid installation. To use a custom SDK path for a command line build, set the 'AndroidSdkDirectory' MSBuild property to the custom path. Ok, that's completely broken... So let's add `-c Release`, as this target is related to Fast Deployment: Microsoft.Android.Sdk.Windows\34.0.0-rc.1.432\tools\Xamarin.Android.Common.targets(664,2): error : Could not locate Java 6 or 7 SDK. I tested .NET 7 and it worked fine?!? It turns out to be due to an additional `_ResolveMonoAndroidSdks` target running in .NET 8 that *doesn't* run in .NET 7: https://github.com/xamarin/xamarin-android/blob/547a157a7aeae930e4fc6092636fa20771ff1ef6/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets#L181 This was introduced in dc3ccf28, but I don't think it was needed. The `GetAndroidDependencies` target doesn't run during a normal build, so it doesn't seem like `$(GetAndroidDependenciesDependsOn)` should need to run anything extra either. Update `$(GetAndroidDependenciesDependsOn)` so that the `_ResolveMonoAndroidSdks` target is no longer executed. With this change in place, `InstallAndroidDependencies` works on my DevBox, and I'm also able to build apps in `Debug` and `Release` mode. --- .../targets/Microsoft.Android.Sdk.BuildOrder.targets | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets index 4bfa0ff3d74..24d8d93c9c4 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets @@ -178,7 +178,6 @@ properties that determine build ordering. _BeforeGetAndroidDependencies; _SetLatestTargetFrameworkVersion; _ResolveSdks; - _ResolveMonoAndroidSdks; _ResolveAndroidTooling; $(GetAndroidDependenciesDependsOn); From e2690194d99afa2316ea43337aeacaf521137b91 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 29 Sep 2023 09:50:48 -0500 Subject: [PATCH 08/92] Bump to dotnet/installer/release/8.0.1xx@4e39632d3a 8.0.100-rtm.23479.1 (#8382) Changes: https://github.com/dotnet/installer/compare/da40dcba0f...4e39632d3a Changes: https://github.com/dotnet/runtime/compare/a3d5300bae...885100b00b Changes: https://github.com/dotnet/emsdk/compare/41db232278...0a2aae889f Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23477.4 to 8.0.100-rtm.23479.1 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23475.7 to 8.0.0-rtm.23477.9 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100.Transport: from 8.0.0-rtm.23473.1 to 8.0.0-rtm.23475.3 * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23475.7 to 8.0.0-rtm.23477.9 --- eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e9362e8c9fd..bfeac7c439d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,20 +1,20 @@ - + https://github.com/dotnet/installer - da40dcba0fe957fb803a0259b08271b6bb76f5fe + 4e39632d3a6d1dc172033550bd4f40b3a7fe583b - + https://github.com/dotnet/runtime - a3d5300baee03169bf737cfc4e9b1f7dbece4d05 + 885100b00bc944cbb698bc4cc2ec3ec18007534f - + https://github.com/dotnet/runtime - a3d5300baee03169bf737cfc4e9b1f7dbece4d05 + 885100b00bc944cbb698bc4cc2ec3ec18007534f - + https://github.com/dotnet/emsdk - 41db2322780b16e4ddadcebca41dc86c7806ed9a + 0a2aae889f5ce2803fa227e13963b3fbf3ccb6b0 https://github.com/dotnet/cecil diff --git a/eng/Versions.props b/eng/Versions.props index 885bf2c5703..4d870d98f5b 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,12 +1,12 @@ - 8.0.100-rtm.23477.4 - 8.0.0-rtm.23475.7 - 8.0.0-rtm.23475.7 + 8.0.100-rtm.23479.1 + 8.0.0-rtm.23477.9 + 8.0.0-rtm.23477.9 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0-rtm.23473.1 + 8.0.0-rtm.23475.3 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) 7.0.100-rc.1.22410.7 0.11.4-alpha.23468.2 From 98fcbd91d279f66cddfcd0eef2c11f2c40ca9517 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 16:24:02 -0400 Subject: [PATCH 09/92] Bump to dotnet/installer@6dae8493a5 8.0.100-rtm.23479.3 (#8385) Changes: https://github.com/dotnet/installer/compare/4e39632d3a...6dae8493a5 Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23479.1 to 8.0.100-rtm.23479.3 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index bfeac7c439d..f4232446e1b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - 4e39632d3a6d1dc172033550bd4f40b3a7fe583b + 6dae8493a54d682ff64973e67bba2bd1333047a3 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 4d870d98f5b..26c1f84c86c 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23479.1 + 8.0.100-rtm.23479.3 8.0.0-rtm.23477.9 8.0.0-rtm.23477.9 7.0.0-beta.22103.1 From e5a286a73bd74d600cd49f5da23de0a4d4fde725 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:36:02 -0400 Subject: [PATCH 10/92] Bump to dotnet/installer@471a817bd5 8.0.100-rtm.23502.10 (#8390) Changes: https://github.com/dotnet/installer/compare/6dae8493a5...471a817bd5 Changes: https://github.com/dotnet/runtime/compare/885100b00b...b20f704cc0 changes: https://github.com/dotnet/emsdk/compare/0a2aae889f...ae4eaab4a9 Changes: https://github.com/dotnet/cecil/compare/89be445dd4...13d6536e2d Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23479.3 to 8.0.100-rtm.23502.10 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23477.9 to 8.0.0-rtm.23478.17 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100.Transport: from 8.0.0-rtm.23475.3 to 8.0.0-rtm.23477.1 * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23477.9 to 8.0.0-rtm.23478.17 * Microsoft.DotNet.Cecil: from 0.11.4-alpha.23468.2 to 0.11.4-alpha.23476.1 --- eng/Version.Details.xml | 20 ++++++++++---------- eng/Versions.props | 10 +++++----- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index f4232446e1b..ad6ad1183c8 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,24 +1,24 @@ - + https://github.com/dotnet/installer - 6dae8493a54d682ff64973e67bba2bd1333047a3 + 471a817bd5699e61f734ee155372016a1d0dc08b - + https://github.com/dotnet/runtime - 885100b00bc944cbb698bc4cc2ec3ec18007534f + b20f704cc00f390e5560a137deb8f0e64e863e1d - + https://github.com/dotnet/runtime - 885100b00bc944cbb698bc4cc2ec3ec18007534f + b20f704cc00f390e5560a137deb8f0e64e863e1d - + https://github.com/dotnet/emsdk - 0a2aae889f5ce2803fa227e13963b3fbf3ccb6b0 + ae4eaab4a9415d7f87ca7c6dc0b41ea482fa6337 - + https://github.com/dotnet/cecil - 89be445dd4936157533ad96bafb95f701430653a + 13d6536e2dc92404da76d61d248badc040eb0de0 diff --git a/eng/Versions.props b/eng/Versions.props index 26c1f84c86c..3e0214ef458 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,15 +1,15 @@ - 8.0.100-rtm.23479.3 - 8.0.0-rtm.23477.9 - 8.0.0-rtm.23477.9 + 8.0.100-rtm.23502.10 + 8.0.0-rtm.23478.17 + 8.0.0-rtm.23478.17 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0-rtm.23475.3 + 8.0.0-rtm.23477.1 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) 7.0.100-rc.1.22410.7 - 0.11.4-alpha.23468.2 + 0.11.4-alpha.23476.1 $(MicrosoftNETCoreAppRefPackageVersion) From 3cb27acfeddfa154d79b173c977d0c92b1ba24ac Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Wed, 4 Oct 2023 16:53:04 -0400 Subject: [PATCH 11/92] [ci] Skip Linux apt upgrade step (#8396) Package update attempts started failing recently on our Linux lane: Setting up grub-efi-amd64-signed (1.187.6~20.04.1+2.06-2ubuntu14.4) ... mount: /var/lib/grub/esp: special device /dev/disk/by-id/scsi-14d5346542020202075f68e4df928b946a6a92fab5bc044c1-part15 does not exist. dpkg: error processing package grub-efi-amd64-signed (--configure): installed grub-efi-amd64-signed package post-installation script subprocess returned error exit status 32 Our base Linux OS image is updated regularly by 1ES, so we shouldn't need to update during every CI run. --- build-tools/automation/yaml-templates/setup-ubuntu.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/build-tools/automation/yaml-templates/setup-ubuntu.yaml b/build-tools/automation/yaml-templates/setup-ubuntu.yaml index c18d1340df5..4dd8d7062b5 100644 --- a/build-tools/automation/yaml-templates/setup-ubuntu.yaml +++ b/build-tools/automation/yaml-templates/setup-ubuntu.yaml @@ -13,9 +13,6 @@ steps: sudo apt install -y --no-install-recommends mono-complete nuget msbuild displayName: install mono preview -- script: sudo apt upgrade - displayName: update packages - - template: use-dot-net.yaml parameters: remove_dotnet: true From 7cde40e87e0ef36718913ba1c0464d6cf97b0bd3 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 6 Oct 2023 15:48:55 -0400 Subject: [PATCH 12/92] Bump to dotnet/installer@77a7628585 8.0.100-rtm.23505.1 (#8395) Changes: https://github.com/dotnet/installer/compare/471a817bd5...77a7628585 Changes: https://github.com/dotnet/runtime/compare/b20f704cc0...a84f8ffbf5 Changes: https://github.com/dotnet/cecil/compare/13d6536e2d...64a8874f3c Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23502.10 to 8.0.100-rtm.23505.1 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23478.17 to 8.0.0-rtm.23503.15 * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23478.17 to 8.0.0-rtm.23503.15 * Microsoft.DotNet.Cecil: from 0.11.4-alpha.23476.1 to 0.11.4-alpha.23502.1 --- eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ad6ad1183c8..d4cf45278d5 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,24 +1,24 @@ - + https://github.com/dotnet/installer - 471a817bd5699e61f734ee155372016a1d0dc08b + 77a7628585b8f52970455233344ef3a9ce7c9bcb - + https://github.com/dotnet/runtime - b20f704cc00f390e5560a137deb8f0e64e863e1d + a84f8ffbf5d597b8a91e893a1f413466de017a68 - + https://github.com/dotnet/runtime - b20f704cc00f390e5560a137deb8f0e64e863e1d + a84f8ffbf5d597b8a91e893a1f413466de017a68 https://github.com/dotnet/emsdk ae4eaab4a9415d7f87ca7c6dc0b41ea482fa6337 - + https://github.com/dotnet/cecil - 13d6536e2dc92404da76d61d248badc040eb0de0 + 64a8874f3c485657e732ca56a5f24e2095740103 diff --git a/eng/Versions.props b/eng/Versions.props index 3e0214ef458..4056bd68079 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,15 +1,15 @@ - 8.0.100-rtm.23502.10 - 8.0.0-rtm.23478.17 - 8.0.0-rtm.23478.17 + 8.0.100-rtm.23505.1 + 8.0.0-rtm.23503.15 + 8.0.0-rtm.23503.15 7.0.0-beta.22103.1 7.0.0-beta.22103.1 8.0.0-rtm.23477.1 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) 7.0.100-rc.1.22410.7 - 0.11.4-alpha.23476.1 + 0.11.4-alpha.23502.1 $(MicrosoftNETCoreAppRefPackageVersion) From be2ffa69edec88ccc02b307e6c32599a8b0c727b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 13:06:37 -0500 Subject: [PATCH 13/92] Bump to dotnet/installer/release/8.0.1xx@0ffc9fdc93 8.0.100-rtm.23506.1 (#8398) Changes: https://github.com/dotnet/installer/compare/77a7628585...0ffc9fdc93 Changes: https://github.com/dotnet/runtime/compare/a84f8ffbf5...22b8a5665f Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23505.1 to 8.0.100-rtm.23506.1 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23503.15 to 8.0.0-rtm.23504.8 * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23503.15 to 8.0.0-rtm.23504.8 --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index d4cf45278d5..889c3ac720d 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,16 +1,16 @@ - + https://github.com/dotnet/installer - 77a7628585b8f52970455233344ef3a9ce7c9bcb + 0ffc9fdc93e578268a09b0dccdc4c3527f4697f3 - + https://github.com/dotnet/runtime - a84f8ffbf5d597b8a91e893a1f413466de017a68 + 22b8a5665f5725a2c7bb09cfbe88f2cdc9847c1a - + https://github.com/dotnet/runtime - a84f8ffbf5d597b8a91e893a1f413466de017a68 + 22b8a5665f5725a2c7bb09cfbe88f2cdc9847c1a https://github.com/dotnet/emsdk diff --git a/eng/Versions.props b/eng/Versions.props index 4056bd68079..fbae1e60968 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,9 +1,9 @@ - 8.0.100-rtm.23505.1 - 8.0.0-rtm.23503.15 - 8.0.0-rtm.23503.15 + 8.0.100-rtm.23506.1 + 8.0.0-rtm.23504.8 + 8.0.0-rtm.23504.8 7.0.0-beta.22103.1 7.0.0-beta.22103.1 8.0.0-rtm.23477.1 From 8a68f510c7763a1b46ec168fb00d5260429bc6f5 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 10 Oct 2023 10:52:26 -0500 Subject: [PATCH 14/92] Bump to dotnet/runtime/release/8.0@b17a34c8 8.0.0-rtm.23506.12 (#8404) Changes: https://github.com/dotnet/runtime/compare/a84f8ffb...b17a34c8 This a manual bump, Maestro can update for us after this is merged. * Removed `CoherentParentDependency="Microsoft.Dotnet.Sdk.Internal"` * `darc update-dependencies --id 195870` Using the build number from: * https://maestro-prod.westus2.cloudapp.azure.com/3073/https:%2F%2Fgithub.com%2Fdotnet%2Fruntime/latest/graph --- eng/Version.Details.xml | 12 ++++++------ eng/Versions.props | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 889c3ac720d..ee6f7978788 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,17 +4,17 @@ https://github.com/dotnet/installer 0ffc9fdc93e578268a09b0dccdc4c3527f4697f3 - + https://github.com/dotnet/runtime - 22b8a5665f5725a2c7bb09cfbe88f2cdc9847c1a + b17a34c818bd5e01fdb9827fea64727a5fc51025 - + https://github.com/dotnet/runtime - 22b8a5665f5725a2c7bb09cfbe88f2cdc9847c1a + b17a34c818bd5e01fdb9827fea64727a5fc51025 - + https://github.com/dotnet/emsdk - ae4eaab4a9415d7f87ca7c6dc0b41ea482fa6337 + 0c28b5cfe0f9173000450a3edc808dc8c2b9286e https://github.com/dotnet/cecil diff --git a/eng/Versions.props b/eng/Versions.props index fbae1e60968..36017d9409d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,11 +2,11 @@ 8.0.100-rtm.23506.1 - 8.0.0-rtm.23504.8 - 8.0.0-rtm.23504.8 + 8.0.0-rtm.23506.12 + 8.0.0-rtm.23506.12 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0-rtm.23477.1 + 8.0.0-rtm.23504.4 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) 7.0.100-rc.1.22410.7 0.11.4-alpha.23502.1 From 5546827387c2fc5b8fa54aac23d486cc1c8b7cc6 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Wed, 4 Oct 2023 16:55:23 -0400 Subject: [PATCH 15/92] [Mono.Android] Generate API docs for android-34 (#8383) Updates xaprepare to install the `sources-34_r01` Android SDK package, allowing our API docs generation tasks to use the latest sources. --- .../ConfigAndData/Dependencies/AndroidToolchain.cs | 6 +++--- src/Mono.Android/Mono.Android.targets | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs index 4062ba8681e..1b6e6d07e68 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs @@ -75,11 +75,11 @@ public AndroidToolchain () new AndroidPlatformComponent ("platform-33_r02", apiLevel: "33", pkgRevision: "2"), new AndroidPlatformComponent ("platform-34-ext7_r01", apiLevel: "34", pkgRevision: "1"), - new AndroidToolchainComponent ("sources-33_r01", - destDir: Path.Combine ("sources", "android-33"), + new AndroidToolchainComponent ("sources-34_r01", + destDir: Path.Combine ("sources", "android-34"), pkgRevision: "1", dependencyType: AndroidToolchainComponentType.BuildDependency, - buildToolVersion: "33.1" + buildToolVersion: "34.1" ), new AndroidToolchainComponent ("docs-24_r01", destDir: "docs", diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets index 9c0388fe7ba..0b7944d3f61 100644 --- a/src/Mono.Android/Mono.Android.targets +++ b/src/Mono.Android/Mono.Android.targets @@ -238,9 +238,9 @@ - 33 - 33 - xamarin-android-sdk-13 + 34 + $(DocsApiLevel) + net-android-$(DocsApiLevel).0 <_LogPrefix>$(MSBuildThisFileDirectory)../../bin/Build$(Configuration)/UpdateApiDocs-$([System.DateTime]::Now.ToString ("yyyyMMddTHHmmss")) <_Mdoc Condition=" '$(Pkgmdoc)' != '' ">"$(Pkgmdoc)/tools/mdoc.exe" <_Mdoc Condition=" '$(Pkgmdoc)' == '' ">"$(XAPackagesDir)/mdoc/$(MdocPackageVersion)/tools/mdoc.exe" From 2958ae6baf60e67fc5043a346767777674d0333e Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Tue, 10 Oct 2023 00:14:44 +0100 Subject: [PATCH 16/92] [Xamarin.Android.Build.Tasks] Make manifestmerger.jar the default. (#8392) Context: https://github.com/xamarin/xamarin-android/issues/8387 Context: 2c6f5cd16fb5087731107c1defa13ebb56cf63df Context: f7ea4a3db003da7be85d34eff4813c6052368e90 Context: d794534cebc3378326f6220dc54218616b9e5850 Update the value for `$(AndroidManifestMerger)` (f7ea4a3d) to `manifestmerger.jar`. This allows users to make use of the new features like `@(AndroidManifestOverlay)` (d794534c) out of the box. The old system is still available, users will need to add the following to their csproj: legacy AndroidX has been building with `$(AndroidManifestMerger)`=manifestmerger.jar for [over three years][0]. [0]: https://github.com/xamarin/AndroidX/commit/c6c0e5033c825e0b13e5a5a0aa896dcafe43e6f6 --- Documentation/guides/building-apps/build-properties.md | 9 ++++++--- .../Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs | 2 ++ .../Tests/Xamarin.Android.Build.Tests/ManifestTest.cs | 1 + .../Xamarin.Android.Common.targets | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Documentation/guides/building-apps/build-properties.md b/Documentation/guides/building-apps/build-properties.md index 54dc92d2606..55ce6c6f304 100644 --- a/Documentation/guides/building-apps/build-properties.md +++ b/Documentation/guides/building-apps/build-properties.md @@ -987,9 +987,12 @@ merging *AndroidManifest.xml* files. This is an enum-style property where `legacy` selects the original C# implementation and `manifestmerger.jar` selects Google's Java implementation. -The default value is currently `legacy`. This will change to -`manifestmerger.jar` in a future release to align behavior with -Android Studio. +The default value is currently `manifestmerger.jar`. If you want to +use the old version add the following to your csproj + +```xml +legacy +``` Google's merger enables support for `xmlns:tools="http://schemas.android.com/tools"` as described in the [Android documentation][manifest-merger]. diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs index 6e1286fe27e..48e7457d97c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs @@ -670,6 +670,8 @@ public void AllResourcesInClassLibrary ([Values (true, false)] bool useAapt2, [V if (Builder.UseDotNet) { lib.RemoveProperty ("OutputType"); } + lib.AndroidManifest = lib.AndroidManifest. + Replace ("application android:label=\"${PROJECT_NAME}\"", "application android:label=\"com.test.foo\" "); // Create an "app" that is basically empty and references the library var app = new XamarinAndroidLibraryProject { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs index 1b97abb515d..c9fe8ffb548 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs @@ -755,6 +755,7 @@ public void MergeLibraryManifest () KnownPackages.SupportV7AppCompat_27_0_2_1, }, }; + proj.SetProperty ("AndroidManifestMerger", "legacy"); proj.Sources.Add (new BuildItem.Source ("TestActivity1.cs") { TextContent = () => @"using System; using System.Collections.Generic; diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 71e64a76db7..c892a63885a 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -275,7 +275,7 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. False SHA256withRSA SHA-256 - legacy + manifestmerger.jar 1G From 7b16e978da5421d009de072817b5ac5c8ccd2123 Mon Sep 17 00:00:00 2001 From: Jonathan Pobst Date: Mon, 9 Oct 2023 14:09:42 -1000 Subject: [PATCH 17/92] [Xamarin.Android.Build.Tasks] Add support for $(AndroidEnableObsoleteOverrideInheritance). (#8393) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context: https://github.com/xamarin/java.interop/commit/8e63cc8da1882cadc7db329bfa6cafb6f914769f Context: https://github.com/xamarin/java.interop/commit/d0231c5c7eab4b4e51dda43dd523d6649b8f1593 xamarin/java.interop@d0231c5c updated generator output so that `[Obsolete]` would automagically "flow" to derived types and method overrides, so that [warning CS0672][0] would not be emitted. Before xamarin/java.interop@d0231c5c, we would emit: public class Context { [Obsolete] public virtual void SetWallpaper () { … } } public class ContextWrapper : Context { [ObsoletedOSPlatform ("android23.0")] public override void SetWallpaper () { … } } `ContextWrapper.SetWallpaper()` would elicit a CS0672 warning: warning CS0672: Member 'ContextWrapper.SetWallpaper()' overrides obsolete member 'Context.SetWallpaper()'. Add the Obsolete attribute to 'ContextWrapper.SetWallpaper()' With xamarin/java.interop@d0231c5c, we now emit the following, which no longer emits CS0672: public class Context { [Obsolete] public virtual void SetWallpaper () { … } } public class ContextWrapper : Context { [Obsolete] public override void SetWallpaper () { … } } While we feel that this is a nice improvement, this broke some customers who didn't want their bindings to automatically gain `[Obsolete]` "just because" they were overriding `[Obsolete]` types or members. In xamarin/java.interop@8e63cc8d, we added the ability to globally *opt-out* of this new behavior by using `generator --lang-features=do-not-fix-obsolete-overrides`. Add a new `$(AndroidEnableObsoleteOverrideInheritance)` MSBuild property. When False, this adds `generator --lang-features=do-not-fix-obsolete-overrides`, preventing the automatic CS0672 fix behavior. By default `$(AndroidEnableObsoleteOverrideInheritance)` is True. [0]: https://learn.microsoft.com/en-us/dotnet/csharp/misc/cs0672 --- Documentation/guides/building-apps/build-properties.md | 9 +++++++++ .../Android/Xamarin.Android.Bindings.Core.targets | 1 + .../Microsoft.Android.Sdk.DefaultProperties.targets | 1 + src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs | 4 ++++ 4 files changed, 15 insertions(+) diff --git a/Documentation/guides/building-apps/build-properties.md b/Documentation/guides/building-apps/build-properties.md index 55ce6c6f304..be7378f3c1a 100644 --- a/Documentation/guides/building-apps/build-properties.md +++ b/Documentation/guides/building-apps/build-properties.md @@ -469,6 +469,15 @@ Support for this property was added in Xamarin.Android 5.1. This property is `False` by default. +## AndroidEnableObsoleteOverrideInheritance + +A boolean property that determines if bound methods automatically inherit `[Obsolete]` +attributes from methods they override. + +Support for this property was added in .NET 8. + +This property is `True` by default. + ## AndroidEnablePreloadAssemblies A boolean property that controls diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets index fd0674e9946..0344a49f591 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets @@ -99,6 +99,7 @@ It is shared between "legacy" binding projects and .NET 5 projects. EnableBindingNestedInterfaceTypes="$(AndroidBoundInterfacesContainTypes)" EnableBindingInterfaceConstants="$(AndroidBoundInterfacesContainConstants)" EnableRestrictToAttributes="$(AndroidEnableRestrictToAttributes)" + EnableObsoleteOverrideInheritance="$(AndroidEnableObsoleteOverrideInheritance)" Nullable="$(Nullable)" UseJavaLegacyResolver="$(_AndroidUseJavaLegacyResolver)" NamespaceTransforms="@(AndroidNamespaceReplacement)" diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 2ec7baa7784..46a750a585b 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -39,6 +39,7 @@ true true true + true obsolete diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs b/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs index 33a9cad54cc..9744f864c4c 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/Generator.cs @@ -52,6 +52,7 @@ public class BindingsGenerator : AndroidDotnetToolTask public bool EnableBindingNestedInterfaceTypes { get; set; } public bool EnableBindingInterfaceConstants { get; set; } public string EnableRestrictToAttributes { get; set; } + public bool EnableObsoleteOverrideInheritance { get; set; } public string Nullable { get; set; } public ITaskItem[] TransformFiles { get; set; } @@ -217,6 +218,9 @@ protected override string GenerateCommandLineCommands () if (EnableBindingStaticAndDefaultInterfaceMethods) features.Add ("default-interface-methods"); + if (!EnableObsoleteOverrideInheritance) + features.Add ("do-not-fix-obsolete-overrides"); + if (string.Equals (EnableRestrictToAttributes, "obsolete", StringComparison.OrdinalIgnoreCase)) features.Add ("restrict-to-attributes"); From 8546ee867bb22385311334f98acdaf1617138497 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 10:48:23 -0400 Subject: [PATCH 18/92] Bump to xamarin/Java.Interop/main@d7f41c4 (#8386) Changes: https://github.com/xamarin/java.interop/compare/75d8221d44bb3fb0781f73b4fa53c99da7aa8d06...d7f41c4eefcbf3692f80a73fc62588c6de75bd59 * xamarin/java.interop@d7f41c4e: [build] introduce `xamarin-android-tools.override.props` (xamarin/java.interop#1148) * xamarin/java.interop@9ac0dd4c: Bump to xamarin/xamarin-android-tools/main@8a971d9 (xamarin/java.interop#1146) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- external/Java.Interop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/Java.Interop b/external/Java.Interop index 75d8221d44b..d7f41c4eefc 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 75d8221d44bb3fb0781f73b4fa53c99da7aa8d06 +Subproject commit d7f41c4eefcbf3692f80a73fc62588c6de75bd59 From 2b16d39f22e2bfbf74a89d69df859d854b4c8dfe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Oct 2023 09:37:41 -1000 Subject: [PATCH 19/92] Bump external/Java.Interop from `d7f41c4` to `8e63cc8` (#8388) Bumps [external/Java.Interop](https://github.com/xamarin/java.interop) from `d7f41c4` to `8e63cc8`. - [Commits](https://github.com/xamarin/java.interop/compare/d7f41c4eefcbf3692f80a73fc62588c6de75bd59...8e63cc8da1882cadc7db329bfa6cafb6f914769f) --- updated-dependencies: - dependency-name: external/Java.Interop dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- external/Java.Interop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/Java.Interop b/external/Java.Interop index d7f41c4eefc..8e63cc8da18 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit d7f41c4eefcbf3692f80a73fc62588c6de75bd59 +Subproject commit 8e63cc8da1882cadc7db329bfa6cafb6f914769f From 89b6fa5b6ac9498dbfe8af33b6d1c8c3006274d2 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 10 Oct 2023 11:11:57 -0500 Subject: [PATCH 20/92] Bump to xamarin/java.interop/main@ed63d890 (#8407) Changes: https://github.com/xamarin/java.interop/compare/8e63cc8d...ed63d890 * [generator] restore `[RegisterAttribute]` for *Implementor types Other changes: * Added test to verify `Lmono/android/view/View_OnClickListenerImplementor;` exists after a build using `AndroidLinkMode=r8`. https://github.com/xamarin/java.interop/pull/1149 --- external/Java.Interop | 2 +- .../Tests/Xamarin.Android.Build.Tests/BuildTest2.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/external/Java.Interop b/external/Java.Interop index 8e63cc8da18..ed63d890b8f 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 8e63cc8da1882cadc7db329bfa6cafb6f914769f +Subproject commit ed63d890b8f5dc8626db4a533670c1573d116c31 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 cbdaef62983..07496091a8a 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 @@ -1136,6 +1136,7 @@ public void BuildProguardEnabledProject (bool isRelease, string linkTool, string FileAssert.Exists (dexFile); var classes = new [] { "Lmono/MonoRuntimeProvider;", + "Lmono/android/view/View_OnClickListenerImplementor;", "Landroid/runtime/JavaProxyThrowable;", $"L{toolbar_class.Replace ('.', '/')};" }; From 834944626b273842d57dca2840e619fcb2933a79 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 12 Oct 2023 11:02:56 -0500 Subject: [PATCH 21/92] Bump to dotnet/installer/release/8.0.1xx@dfe59b6c4d 8.0.100-rtm.23512.1 (#8418) Changes: https://github.com/dotnet/installer/compare/0ffc9fdc93...dfe59b6c4d Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23506.1 to 8.0.100-rtm.23512.1 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ee6f7978788..1b70c4c561e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - 0ffc9fdc93e578268a09b0dccdc4c3527f4697f3 + dfe59b6c4dec70fef72f18010dc8606ce8fb141a https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 36017d9409d..1fda1192d84 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23506.1 + 8.0.100-rtm.23512.1 8.0.0-rtm.23506.12 8.0.0-rtm.23506.12 7.0.0-beta.22103.1 From 0e52e407fab263591467aa394316a0eda6617808 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 13 Oct 2023 10:10:59 -0500 Subject: [PATCH 22/92] Bump to dotnet/runtime/release/8.0@256bf22a3d 8.0.0-rtm.23511.16 (#8419) Changes: https://github.com/dotnet/runtime/compare/b17a34c818...256bf22a3d Updates: * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23506.12 to 8.0.0-rtm.23511.16 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23506.12 to 8.0.0-rtm.23511.16 Co-authored-by: Jonathan Peppers --- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1b70c4c561e..be8f600d71f 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://github.com/dotnet/installer dfe59b6c4dec70fef72f18010dc8606ce8fb141a - + https://github.com/dotnet/runtime - b17a34c818bd5e01fdb9827fea64727a5fc51025 + 256bf22a3ddf920516752701da2b95e1847ff708 - + https://github.com/dotnet/runtime - b17a34c818bd5e01fdb9827fea64727a5fc51025 + 256bf22a3ddf920516752701da2b95e1847ff708 https://github.com/dotnet/emsdk diff --git a/eng/Versions.props b/eng/Versions.props index 1fda1192d84..817781955a8 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,8 +2,8 @@ 8.0.100-rtm.23512.1 - 8.0.0-rtm.23506.12 - 8.0.0-rtm.23506.12 + 8.0.0-rtm.23511.16 + 8.0.0-rtm.23511.16 7.0.0-beta.22103.1 7.0.0-beta.22103.1 8.0.0-rtm.23504.4 From 3f214aab4630330406c7d65a1f01180d253f1e0a Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 11 Oct 2023 00:25:11 +0100 Subject: [PATCH 23/92] [Xamarin.Android.Build.Tasks] case-insensitive Legacy Designer fixup (#8376) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context: 628d6cb869c872c34d17b014724a43e8d451fb93 Context: dc3ccf28cdbe9f8c0a705400b83c11a85c81a980 We have a very odd situation with the [`Xamarin.CommunityToolkit.MauiCompat` NuGet package][0]: The NuGet package ships with a file `.net/__res_name_case_map.txt` (628d6cb8) in `Xamarin.CommunityToolkit.MauiCompat.aar` which contains the case map changes for the `@(AndroidResource)` items. The purpose of this file is to allow the user to use PascalCase (or any case) names in C# code, while the Android Resource compilation is left as all lowercase. This is because Android requires that file-backed resource names consist of only lowercase letters. The contents of this file includes: Resources/Layout/CameraFragment.axml;layout/camerafragment.xml which tells us that the Android `R.layout.camerafragment` resource id should be "bound" as `Resouce.Layout.CameraFragment`, which allows [`CameraFragment.android.cs` to build][1]: public override AView? OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) => inflater.Inflate(Resource.Layout.CameraFragment, null); However, when we look at the IL that comes from the NuGet package we see the only lowercase `camerafragment`: ikdasm ~/.nuget/packages/xamarin.communitytoolkit.mauicompat/2.0.2-preview1013/lib/net6.0-android31.0/Xamarin.CommunityToolkit.MauiCompat.dll| grep Layout::camerafragment … IL_0131: stsfld int32 Xamarin.CommunityToolkit.MauiCompat.Resource/Layout::camerafragment … IL_0001: ldsfld int32 Xamarin.CommunityToolkit.MauiCompat.Resource/Layout::camerafragment For some reason as part of the XamarinCommunityToolkit build [the following script][2] was run on the code: sed -i '' 's/MauiCompat.Resource.Layout.CameraFragment/MauiCompat.Resource.Layout.camerafragment/g' ./src/CommunityToolkit/Xamarin.CommunityToolkit.MauiCompat/**/CameraFragment.android.cs This changes `Resource.Layout.CameraFragment` to `Resource.Layout.camerafragment`, apparently because *something* is renaming [`CameraFragment.axml`][3] to `camerafragment.axml` *after* `__res_name_case_map.txt` is generated, but before `CameraFragment.android.cs` is compiled. The NuGet still includes the `.aar` with the case map changes, which are now inconsistent with the assembly contents. I'm not sure why XamarinCommunityToolkit does all this. The result of the above XamarinCommunityToolkit build and packaging behavior is that it interacts badly with the new net8.0-android Resource Designer Assembly (dc3ccf28) work, with a build-time error: error XA8000: Could not find Android Resource ‘@layout/camerafragment’. Please update @(AndroidResource) to add the missing resource. This is because we are looking for the lowercase version of the resource in the Designer assembly property list, but because of the remap file we only know about the PascalCase version. As a workaround, fallback to a *case-insensitive* resource name lookup if a case-sensitive lookup fails. [0]: https://www.nuget.org/packages/Xamarin.CommunityToolkit.MauiCompat/ [1]: https://github.com/xamarin/XamarinCommunityToolkit/blob/5a6062f3c3543acda3c36ca4683cd8fc7fe86ba7/src/CommunityToolkit/Xamarin.CommunityToolkit/Views/CameraView/Android/CameraFragment.android.cs#L129 [2]: https://github.com/xamarin/XamarinCommunityToolkit/blob/5a6062f3c3543acda3c36ca4683cd8fc7fe86ba7/MauiCompat.sh#L561 [3]: https://github.com/xamarin/XamarinCommunityToolkit/blob/5a6062f3c3543acda3c36ca4683cd8fc7fe86ba7/src/CommunityToolkit/Xamarin.CommunityToolkit/Resources/Layout/CameraFragment.axml --- .../FixLegacyResourceDesignerStep.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs index 2f8569f515a..ae4473d6cd1 100644 --- a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs +++ b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs @@ -30,6 +30,7 @@ public class FixLegacyResourceDesignerStep : LinkDesignerBase AssemblyDefinition designerAssembly = null; TypeDefinition designerType = null; Dictionary lookup; + Dictionary lookupCaseInsensitive; protected override void EndProcess () { @@ -61,7 +62,7 @@ protected override void LoadDesigner () LogMessage ($" Did not find {DesignerAssemblyNamespace}.Resource type. It was probably linked out."); return; } - lookup = BuildResourceDesignerPropertyLookup (designerType); + lookup = BuildResourceDesignerPropertyLookup (designerType, out lookupCaseInsensitive); } finally { designerLoaded = true; } @@ -105,10 +106,11 @@ internal override bool ProcessAssemblyDesigner (AssemblyDefinition assembly) return true; } - Dictionary BuildResourceDesignerPropertyLookup (TypeDefinition type) + Dictionary BuildResourceDesignerPropertyLookup (TypeDefinition type, out Dictionary caseInsensitiveLookup) { LogMessage ($" Building Designer Lookups for {type.FullName}"); var output = new Dictionary (StringComparer.Ordinal); + caseInsensitiveLookup = new Dictionary (StringComparer.OrdinalIgnoreCase); foreach (TypeDefinition definition in type.NestedTypes) { foreach (PropertyDefinition property in definition.Properties) @@ -117,7 +119,9 @@ Dictionary BuildResourceDesignerPropertyLookup (TypeDe if (output.ContainsKey (key)) { LogMessage ($" Found duplicate {key}"); } else { + LogMessage ($" Adding {key}"); output.Add (key, property.GetMethod); + caseInsensitiveLookup [key] = property.GetMethod; } } } @@ -153,7 +157,12 @@ protected override void FixBody (MethodBody body, TypeDefinition designer) if (idx >= 0) { string key = line.Substring (idx + designerFullName.Length); LogMessage ($"Looking for {key}."); - if (lookup.TryGetValue (key, out MethodDefinition method)) { + var found = lookup.TryGetValue (key, out MethodDefinition method); + if (!found) { + LogMessage ($"DEBUG! Failed to find {key}! Trying case insensitive lookup."); + found = lookupCaseInsensitive.TryGetValue (key, out method); + } + if (found) { var importedMethod = designer.Module.ImportReference (method); var newIn = Instruction.Create (OpCodes.Call, importedMethod); instructions.Add (i, newIn); From 2ae4e044a95e2c09186f086d8ae8bb1b7345d9ee Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 11 Oct 2023 23:09:36 +0100 Subject: [PATCH 24/92] [Xamarin.Android.Build.Tasks] Fix up ForegroundService.ToString() (#8412) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: https://github.com/xamarin/xamarin-android/issues/8409 Context: https://github.com/xamarin/xamarin-android/issues/8272 The [`//service/@android:foregroundServiceType`][0] attribute can be generated based on the value of the `Android.App.ServiceAttribute.ForegroundServiceType` property: [Service(ForegroundServiceType=ForegroundService.TypeCamera)] partial class MyService : Service { } which will result in an `AndroidManifest.xml` fragment such as: However, a number of `ForegroundService` enum values have been added without corresponding updates to `ServiceAttribute` XML generation. Consequently, using "recently added" values such as `ForegroundService.TypeHealth` would result in those values *not* being added to the generated `//service/@android:foregroundServiceType`. Update `ManifestDocumentElement.cs` to update `ToString(ForegroundService)` so that all current `ForegroundService` enum values are supported. This will allow: [Service(ForegroundServiceType= ForegroundService.TypeCamera | // previously supported ForegroundService.TypeMicrophone)] // new hawtness partial class MyService : Service { } to properly emit: [0]: https://developer.android.com/guide/topics/manifest/service-element#foregroundservicetype --- .../ManifestTest.cs | 27 +++++++++++++++++++ .../Utilities/BaseTest.cs | 2 +- .../Utilities/ManifestDocumentElement.cs | 22 ++++++++++++--- 3 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs index c9fe8ffb548..fdb987dbf5b 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs @@ -908,6 +908,33 @@ class TestActivity : Activity { }" } } + [Test] + [TestCase ("Android.Content.PM.ForegroundService.TypeSpecialUse", "specialUse")] + [TestCase ("Android.Content.PM.ForegroundService.TypeConnectedDevice", "connectedDevice")] + [TestCase ("Android.Content.PM.ForegroundService.TypeCamera|Android.Content.PM.ForegroundService.TypeMicrophone", "camera|microphone")] + public void AllForegroundServiceTypes (string serviceType, string expected) + { + var proj = new XamarinAndroidApplicationProject { + }; + + proj.Sources.Add (new BuildItem.Source ("TestActivity.cs") { + TextContent = () => $@"using Android.App; + using Android.Content.PM; + using Android.Views; + [Service (ForegroundServiceType = {serviceType})] + class TestService : Service {{ public override Android.OS.IBinder OnBind (Android.Content.Intent intent) {{ return null; }} }}" + }); + using (ProjectBuilder builder = CreateApkBuilder (Path.Combine ("temp", TestName))) { + Assert.IsTrue (builder.Build (proj), "Build should have succeeded"); + string manifest = builder.Output.GetIntermediaryAsText (Path.Combine ("android", "AndroidManifest.xml")); + var doc = XDocument.Parse (manifest); + var ns = XNamespace.Get ("http://schemas.android.com/apk/res/android"); + IEnumerable services = doc.Element ("manifest")?.Element ("application")?.Elements ("service"); + XElement e = services.FirstOrDefault (x => x.Attribute (ns.GetName ("foregroundServiceType"))?.Value == expected); + Assert.IsNotNull (e, $"Manifest should contain an service with a foregroundServiceType of {expected}"); + } + } + [Test] public void AllServiceAttributeProperties ([Values ("legacy", "manifestmerger.jar")] string manifestMerger) { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs index f6e2af09cc3..ec66ffc55cd 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs @@ -45,7 +45,7 @@ public void AssertCommercialBuild (bool fail = false) } } - char [] invalidChars = { '{', '}', '(', ')', '$', ':', ';', '\"', '\'', ',', '=' }; + char [] invalidChars = { '{', '}', '(', ')', '$', ':', ';', '\"', '\'', ',', '=', '|' }; public string TestName { get { diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocumentElement.cs b/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocumentElement.cs index 959626874db..6b685a996c9 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocumentElement.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/ManifestDocumentElement.cs @@ -383,12 +383,26 @@ static string ToString (ForegroundService value) values.Add ("mediaProjection"); if (value.HasFlag (ForegroundService.TypePhoneCall)) values.Add ("phoneCall"); - - // These can be changed to enum members when API-R is the stable binding. - if (value.HasFlag ((ForegroundService)64)) + if (value.HasFlag (ForegroundService.TypeCamera)) values.Add ("camera"); - if (value.HasFlag ((ForegroundService)128)) + if (value.HasFlag (ForegroundService.TypeMicrophone)) values.Add ("microphone"); + if (value.HasFlag (ForegroundService.TypeHealth)) + values.Add ("health"); + if (value.HasFlag (ForegroundService.TypeRemoteMessaging)) + values.Add ("remoteMessaging"); + if (value.HasFlag (ForegroundService.TypeSystemExempted)) + values.Add ("systemExempted"); + if (value.HasFlag (ForegroundService.TypeShortService)) + values.Add ("shortService"); + if (value.HasFlag (ForegroundService.TypeSpecialUse)) + values.Add ("specialUse"); + + // When including a non-stable value you can cast the integer value + // to ForegroundService. We need to do this because the Build.Tasks + // only build against the latest STABLE api. + //if (value.HasFlag ((ForegroundService)128)) + // values.Add ("newValue"); return string.Join ("|", values.ToArray ()); } From 64a691934fd41f9209d87bce59407407eca49257 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Thu, 12 Oct 2023 22:26:57 +0100 Subject: [PATCH 25/92] [Xamarin.Android.Build.Tasks] Include Bindings Design Time builds (#8357) Fixes: https://github.com/xamarin/xamarin-android/issues/7692 When `.java` files are part of a project through `@(AndroidJavaSource)`, it would be nice if the *bindings* for those Java types would be available through IDE IntelliSense/code completion. Update the `AddBindingsToCompile` target so that it includes all `$(IntermediateOutputPath)generated\**\*.cs` files into the design- time build. Additionally, fix an issue where if you remove the libraries the generated files are not removed. Finally, move the Layout CodeBehind generated files to their own `$(IntermediateOutputPath)codebehind` directory. This is to keep the code behind and generated code separate, as it makes it easier to update and clean up if one or the other changes. When all the files are in the same location we might end up deleting files we otherwise need during an update process, slowing down the build. --- .../xaprepare/Application/Utilities.cs | 149 +-------- .../xaprepare/xaprepare/xaprepare.csproj | 4 + .../Xamarin.Android.Bindings.Core.targets | 28 +- .../Microsoft.Android.Sdk.BuildOrder.targets | 1 + ...GenerateLayoutBindings.BindingGenerator.cs | 2 + ...teLayoutBindings.CSharpBindingGenerator.cs | 11 +- .../Tasks/GenerateLayoutBindings.cs | 2 + .../AndroidUpdateResourcesTest.cs | 4 +- .../BindingBuildTest.cs | 2 + .../CodeBehindTests.cs | 2 +- .../Utilities/PathUtil.cs | 289 ++++++++++++++++++ .../Xamarin.Android.Common.targets | 4 +- 12 files changed, 342 insertions(+), 156 deletions(-) create mode 100644 src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs diff --git a/build-tools/xaprepare/xaprepare/Application/Utilities.cs b/build-tools/xaprepare/xaprepare/Application/Utilities.cs index eb2a9393525..e594209db44 100644 --- a/build-tools/xaprepare/xaprepare/Application/Utilities.cs +++ b/build-tools/xaprepare/xaprepare/Application/Utilities.cs @@ -867,154 +867,7 @@ void LogError (string message) public static string GetRelativePath (string relativeTo, string path) { - return GetRelativePath (relativeTo, path, Context.Instance.OS.DefaultStringComparison); + return Xamarin.Android.Tools.PathUtil.GetRelativePath (relativeTo, path, Context.Instance.OS.DefaultStringComparison); } - - // Adapted from CoreFX sources - public static string GetRelativePath (string relativeTo, string path, StringComparison comparisonType) - { - if (String.IsNullOrEmpty (relativeTo)) - throw new ArgumentException ("must not be null or empty", nameof (relativeTo)); - - if (String.IsNullOrEmpty (path)) - throw new ArgumentException ("must not be null or empty", nameof (path)); - - relativeTo = Path.GetFullPath (relativeTo); - path = Path.GetFullPath (path); - - // Need to check if the roots are different- if they are we need to return the "to" path. - if (!AreRootsEqual (relativeTo, path, comparisonType)) - return path; - - int commonLength = GetCommonPathLength (relativeTo, path, ignoreCase: comparisonType == StringComparison.OrdinalIgnoreCase); - - // If there is nothing in common they can't share the same root, return the "to" path as is. - if (commonLength == 0) - return path; - - // Trailing separators aren't significant for comparison - int relativeToLength = relativeTo.Length; - if (EndsInDirectorySeparator (relativeTo)) - relativeToLength--; - - bool pathEndsInSeparator = EndsInDirectorySeparator (path); - int pathLength = path.Length; - if (pathEndsInSeparator) - pathLength--; - - // If we have effectively the same path, return "." - if (relativeToLength == pathLength && commonLength >= relativeToLength) - return "."; - - // We have the same root, we need to calculate the difference now using the - // common Length and Segment count past the length. - // - // Some examples: - // - // C:\Foo C:\Bar L3, S1 -> ..\Bar - // C:\Foo C:\Foo\Bar L6, S0 -> Bar - // C:\Foo\Bar C:\Bar\Bar L3, S2 -> ..\..\Bar\Bar - // C:\Foo\Foo C:\Foo\Bar L7, S1 -> ..\Bar - - var sb = new StringBuilder (Math.Max (relativeTo.Length, path.Length)); - - // Add parent segments for segments past the common on the "from" path - if (commonLength < relativeToLength) { - sb.Append (".."); - - for (int i = commonLength + 1; i < relativeToLength; i++) { - if (IsDirectorySeparator (relativeTo[i])) { - sb.Append (Path.DirectorySeparatorChar); - sb.Append (".."); - } - } - } else if (IsDirectorySeparator (path[commonLength])) { - // No parent segments and we need to eat the initial separator - // (C:\Foo C:\Foo\Bar case) - commonLength++; - } - - // Now add the rest of the "to" path, adding back the trailing separator - int differenceLength = pathLength - commonLength; - if (pathEndsInSeparator) - differenceLength++; - - if (differenceLength > 0) { - if (sb.Length > 0) { - sb.Append (Path.DirectorySeparatorChar); - } - - sb.Append(path, commonLength, differenceLength); - } - - return sb.ToString (); - } - - // Adapted from CoreFX sources - static bool AreRootsEqual (string first, string second, StringComparison comparisonType) - { - int firstRootLength = GetRootLength (first); - int secondRootLength = GetRootLength (second); - - return firstRootLength == secondRootLength - && String.Compare ( - strA: first, - indexA: 0, - strB: second, - indexB: 0, - length: firstRootLength, - comparisonType: comparisonType) == 0; - } - - // Adapted from CoreFX sources - static int GetCommonPathLength (string first, string second, bool ignoreCase) - { - int commonChars = EqualStartingCharacterCount (first, second, ignoreCase: ignoreCase); - - // If nothing matches - if (commonChars == 0) - return commonChars; - - // Or we're a full string and equal length or match to a separator - if (commonChars == first.Length && (commonChars == second.Length || IsDirectorySeparator (second[commonChars]))) - return commonChars; - - if (commonChars == second.Length && IsDirectorySeparator (first[commonChars])) - return commonChars; - - // It's possible we matched somewhere in the middle of a segment e.g. C:\Foodie and C:\Foobar. - while (commonChars > 0 && !IsDirectorySeparator (first[commonChars - 1])) - commonChars--; - - return commonChars; - } - - // Adapted from CoreFX sources - static unsafe int EqualStartingCharacterCount (string first, string second, bool ignoreCase) - { - if (String.IsNullOrEmpty (first) || string.IsNullOrEmpty (second)) - return 0; - - int commonChars = 0; - fixed (char* f = first) { - fixed (char* s = second) { - char* l = f; - char* r = s; - char* leftEnd = l + first.Length; - char* rightEnd = r + second.Length; - - while (l != leftEnd && r != rightEnd && (*l == *r || (ignoreCase && char.ToUpperInvariant ((*l)) == char.ToUpperInvariant ((*r))))) { - commonChars++; - l++; - r++; - } - } - } - - return commonChars; - } - - // Adapted from CoreFX sources - static bool EndsInDirectorySeparator (string path) => path.Length > 0 && IsDirectorySeparator (path[path.Length - 1]); } } diff --git a/build-tools/xaprepare/xaprepare/xaprepare.csproj b/build-tools/xaprepare/xaprepare/xaprepare.csproj index 2d5dc260e70..6730c7adae9 100644 --- a/build-tools/xaprepare/xaprepare/xaprepare.csproj +++ b/build-tools/xaprepare/xaprepare/xaprepare.csproj @@ -44,6 +44,10 @@ + + + + diff --git a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets index 0344a49f591..d023fe0acc2 100644 --- a/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets +++ b/src/Xamarin.Android.Build.Tasks/MSBuild/Xamarin/Android/Xamarin.Android.Bindings.Core.targets @@ -41,6 +41,19 @@ It is shared between "legacy" binding projects and .NET 5 projects. + + + <_GeneratedManagedBindingFiles Include="$(GeneratedOutputPath)**\*.cs" /> + + + + + + + @@ -108,14 +121,23 @@ It is shared between "legacy" binding projects and .NET 5 projects. + + + + + + Condition=" '$(_AndroidGenerateManagedBindings)' == 'true' Or '@(_GeneratedManagedBindingFiles->Count())' != '0' " + DependsOnTargets="GenerateBindings;_CollectGeneratedManagedBindingFiles"> + + + true + - + diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets index 24d8d93c9c4..346c89aa99b 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.BuildOrder.targets @@ -118,6 +118,7 @@ properties that determine build ordering. _BuildResourceDesigner; UpdateAndroidInterfaceProxies; _SetAndroidGenerateManagedBindings; + _ClearGeneratedManagedBindings; AddBindingsToCompile; _CheckForInvalidDesignerConfig; diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.BindingGenerator.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.BindingGenerator.cs index fd9c73a4298..b404d91156e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.BindingGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.BindingGenerator.cs @@ -127,6 +127,8 @@ public State BeginPartialClassFile (StreamWriter writer, string bindingClassName return state; } + public abstract void SetCodeBehindDir (string path); + protected abstract void BeginPartialClassFile (State state, string classNamespace, string className); public abstract void EndPartialClassFile (State state); public abstract void WritePartialClassProperty (State state, LayoutWidget widget); diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.CSharpBindingGenerator.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.CSharpBindingGenerator.cs index c5dc083427d..bc2b9ff6db4 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.CSharpBindingGenerator.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.CSharpBindingGenerator.cs @@ -1,6 +1,8 @@ using System; using System.IO; using System.Linq; +using Xamarin.Android.Tasks.LLVMIR; +using Xamarin.Android.Tools; namespace Xamarin.Android.Tasks { @@ -10,6 +12,7 @@ sealed class CSharpBindingGenerator : BindingGenerator { const string BindingPartialClassBackingFieldName = "__layout_binding"; + string codebehindDir = string.Empty; protected override string LineCommentString => "//"; protected override string DocCommentString => "///"; public override string LanguageName => "C#"; @@ -28,6 +31,11 @@ protected override void BeginPartialClassFile (State state, string classNamespac state.WriteLine (); } + public override void SetCodeBehindDir(string path) + { + codebehindDir = Path.GetFullPath (path); + } + public override void EndPartialClassFile (State state) { EndBindingFile (state); // currently they're identical @@ -239,7 +247,8 @@ protected override void WriteLocationDirective (State state, LayoutWidget widget if (loc == null) return; - WriteLineIndent (state, $"#line {loc.Line} \"{loc.FilePath}\""); + var relativePath = PathUtil.GetRelativePath (codebehindDir, Path.GetFullPath (loc.FilePath)); + WriteLineIndent (state, $"#line {loc.Line} \"{relativePath}\""); state.WriteLine (); } diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.cs index 161fc7e374c..1c721326b42 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GenerateLayoutBindings.cs @@ -107,6 +107,8 @@ public async override System.Threading.Tasks.Task RunTaskAsync () return; } + generator.SetCodeBehindDir (MonoAndroidCodeBehindDir); + LogDebugMessage ($"Generating {generator.LanguageName} binding sources"); var layoutGroups = new Dictionary (StringComparer.Ordinal); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs index c653639bfd0..99e9a963422 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/AndroidUpdateResourcesTest.cs @@ -1247,9 +1247,9 @@ protected override void OnCreate (Bundle bundle) proj.SetProperty ("AndroidGenerateLayoutBindings", "True"); using (var builder = CreateApkBuilder (path)) { Assert.IsTrue (builder.Build (proj), "Build should have succeeded."); - FileAssert.Exists (Path.Combine (Root, path, proj.IntermediateOutputPath, "generated", "Binding.Main.g.cs")); + FileAssert.Exists (Path.Combine (Root, path, proj.IntermediateOutputPath, "codebehind", "Binding.Main.g.cs")); Assert.IsTrue (builder.Build (proj), "Second build should have succeeded."); - FileAssert.Exists (Path.Combine (Root, path, proj.IntermediateOutputPath, "generated", "Binding.Main.g.cs")); + FileAssert.Exists (Path.Combine (Root, path, proj.IntermediateOutputPath, "codebehind", "Binding.Main.g.cs")); } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 70e42e8c71f..7fb2f61bfd7 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -534,6 +534,8 @@ public void AppWithSingleJar () var builder = CreateApkBuilder (); Assert.IsTrue (builder.Build (proj), "first build should succeed"); + Assert.IsTrue (builder.DesignTimeBuild (proj), "Design time build should succeed."); + Assert.IsFalse (builder.Output.IsTargetSkipped ("AddBindingsToCompile"), "AddBindingsToCompile should run."); var assemblyPath = Path.Combine (Root, builder.ProjectDirectory, proj.OutputPath, $"{proj.ProjectName}.dll"); var typeName = "Com.Xamarin.Android.Test.Msbuildtest.JavaSourceJarTest"; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs index a64a11f7bce..6c87875bfa0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/CodeBehindTests.cs @@ -124,7 +124,7 @@ public TestProjectInfo (string projectName, string testName, string rootDirector ProjectName = projectName; ObjPath = Path.Combine (rootDirectory, "obj"); - GeneratedPath = Path.Combine (ObjPath, XABuildPaths.Configuration, "generated"); + GeneratedPath = Path.Combine (ObjPath, XABuildPaths.Configuration, "codebehind"); BinPath = Path.Combine (rootDirectory, "bin", XABuildPaths.Configuration); ProjectPath = Path.Combine (rootDirectory, $"{projectName}.csproj"); diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs b/src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs new file mode 100644 index 00000000000..5156ca8aa9a --- /dev/null +++ b/src/Xamarin.Android.Build.Tasks/Utilities/PathUtil.cs @@ -0,0 +1,289 @@ +using System; +using System.IO; +using System.Text; +using System.Runtime.InteropServices; + +namespace Xamarin.Android.Tools +{ + public static class PathUtil + { + + const int DevicePrefixLength = 4; + const int UncPrefixLength = 2; + const int UncExtendedPrefixLength = 8; + + internal const char VolumeSeparatorChar = ':'; + + static bool IsWindows = Path.DirectorySeparatorChar == '\\'; + // Adapted from CoreFX sources + public static string GetRelativePath(string relativeTo, string path, StringComparison comparisonType = StringComparison.OrdinalIgnoreCase) + { + if (String.IsNullOrEmpty(relativeTo)) + throw new ArgumentException("must not be null or empty", nameof(relativeTo)); + + if (String.IsNullOrEmpty(path)) + throw new ArgumentException("must not be null or empty", nameof(path)); + + relativeTo = Path.GetFullPath(relativeTo); + path = Path.GetFullPath(path); + + // Need to check if the roots are different- if they are we need to return the "to" path. + if (!AreRootsEqual(relativeTo, path, comparisonType)) + return path; + + int commonLength = GetCommonPathLength(relativeTo, path, ignoreCase: comparisonType == StringComparison.OrdinalIgnoreCase); + + // If there is nothing in common they can't share the same root, return the "to" path as is. + if (commonLength == 0) + return path; + + // Trailing separators aren't significant for comparison + int relativeToLength = relativeTo.Length; + if (EndsInDirectorySeparator(relativeTo)) + relativeToLength--; + + bool pathEndsInSeparator = EndsInDirectorySeparator(path); + int pathLength = path.Length; + if (pathEndsInSeparator) + pathLength--; + + // If we have effectively the same path, return "." + if (relativeToLength == pathLength && commonLength >= relativeToLength) + return "."; + + // We have the same root, we need to calculate the difference now using the + // common Length and Segment count past the length. + // + // Some examples: + // + // C:\Foo C:\Bar L3, S1 -> ..\Bar + // C:\Foo C:\Foo\Bar L6, S0 -> Bar + // C:\Foo\Bar C:\Bar\Bar L3, S2 -> ..\..\Bar\Bar + // C:\Foo\Foo C:\Foo\Bar L7, S1 -> ..\Bar + + var sb = new StringBuilder(Math.Max(relativeTo.Length, path.Length)); + + // Add parent segments for segments past the common on the "from" path + if (commonLength < relativeToLength) + { + sb.Append(".."); + + for (int i = commonLength + 1; i < relativeToLength; i++) + { + if (IsDirectorySeparator(relativeTo[i])) + { + sb.Append(Path.DirectorySeparatorChar); + sb.Append(".."); + } + } + } + else if (IsDirectorySeparator(path[commonLength])) + { + // No parent segments and we need to eat the initial separator + // (C:\Foo C:\Foo\Bar case) + commonLength++; + } + + // Now add the rest of the "to" path, adding back the trailing separator + int differenceLength = pathLength - commonLength; + if (pathEndsInSeparator) + differenceLength++; + + if (differenceLength > 0) + { + if (sb.Length > 0) + { + sb.Append(Path.DirectorySeparatorChar); + } + + sb.Append(path, commonLength, differenceLength); + } + + return sb.ToString(); + } + + // Adapted from CoreFX sources + static bool AreRootsEqual(string first, string second, StringComparison comparisonType) + { + int firstRootLength = GetRootLength(first); + int secondRootLength = GetRootLength(second); + + return firstRootLength == secondRootLength + && String.Compare( + strA: first, + indexA: 0, + strB: second, + indexB: 0, + length: firstRootLength, + comparisonType: comparisonType) == 0; + } + + // Adapted from CoreFX sources + static int GetCommonPathLength(string first, string second, bool ignoreCase) + { + int commonChars = EqualStartingCharacterCount(first, second, ignoreCase: ignoreCase); + + // If nothing matches + if (commonChars == 0) + return commonChars; + + // Or we're a full string and equal length or match to a separator + if (commonChars == first.Length && (commonChars == second.Length || IsDirectorySeparator(second[commonChars]))) + return commonChars; + + if (commonChars == second.Length && IsDirectorySeparator(first[commonChars])) + return commonChars; + + // It's possible we matched somewhere in the middle of a segment e.g. C:\Foodie and C:\Foobar. + while (commonChars > 0 && !IsDirectorySeparator(first[commonChars - 1])) + commonChars--; + + return commonChars; + } + + // Adapted from CoreFX sources + static unsafe int EqualStartingCharacterCount(string first, string second, bool ignoreCase) + { + if (String.IsNullOrEmpty(first) || string.IsNullOrEmpty(second)) + return 0; + + int commonChars = 0; + fixed (char* f = first) + { + fixed (char* s = second) + { + char* l = f; + char* r = s; + char* leftEnd = l + first.Length; + char* rightEnd = r + second.Length; + + while (l != leftEnd && r != rightEnd && (*l == *r || (ignoreCase && char.ToUpperInvariant((*l)) == char.ToUpperInvariant((*r))))) + { + commonChars++; + l++; + r++; + } + } + } + + return commonChars; + } + + // Adapted from CoreFX sources + static bool EndsInDirectorySeparator(string path) => path.Length > 0 && IsDirectorySeparator(path[path.Length - 1]); + + static bool IsDirectorySeparator(char c) + { + if (!IsWindows) + return c == Path.DirectorySeparatorChar; + return c == Path.DirectorySeparatorChar || c == Path.AltDirectorySeparatorChar; + } + + // Adapted from CoreFX sources + static int GetRootLength(string path) + { + if (!IsWindows) + return path.Length > 0 && IsDirectorySeparator(path[0]) ? 1 : 0; + return GetRootLength_ForWindows(path); + } + + internal static bool IsValidDriveChar(char value) + { + return ((value >= 'A' && value <= 'Z') || (value >= 'a' && value <= 'z')); + } + + // Adapted from CoreFX sources + static bool IsExtended(string path) + { + // While paths like "//?/C:/" will work, they're treated the same as "\\.\" paths. + // Skipping of normalization will *only* occur if back slashes ('\') are used. + return path.Length >= DevicePrefixLength + && path[0] == '\\' + && (path[1] == '\\' || path[1] == '?') + && path[2] == '?' + && path[3] == '\\'; + } + + // Adapted from CoreFX sources + static bool IsDevice(string path) + { + // If the path begins with any two separators is will be recognized and normalized and prepped with + // "\??\" for internal usage correctly. "\??\" is recognized and handled, "/??/" is not. + return IsExtended(path) || + ( + path.Length >= DevicePrefixLength + && IsDirectorySeparator(path[0]) + && IsDirectorySeparator(path[1]) + && (path[2] == '.' || path[2] == '?') + && IsDirectorySeparator(path[3]) + ); + } + + // Adapted from CoreFX sources + static bool IsDeviceUNC(string path) + { + return path.Length >= UncExtendedPrefixLength + && IsDevice(path) + && IsDirectorySeparator(path[7]) + && path[4] == 'U' + && path[5] == 'N' + && path[6] == 'C'; + } + + // Adapted from CoreFX sources + static int GetRootLength_ForWindows(string path) + { + int pathLength = path.Length; + int i = 0; + + bool deviceSyntax = IsDevice(path); + bool deviceUnc = deviceSyntax && IsDeviceUNC(path); + + if ((!deviceSyntax || deviceUnc) && pathLength > 0 && IsDirectorySeparator(path[0])) + { + // UNC or simple rooted path (e.g. "\foo", NOT "\\?\C:\foo") + if (deviceUnc || (pathLength > 1 && IsDirectorySeparator(path[1]))) + { + // UNC (\\?\UNC\ or \\), scan past server\share + + // Start past the prefix ("\\" or "\\?\UNC\") + i = deviceUnc ? UncExtendedPrefixLength : UncPrefixLength; + + // Skip two separators at most + int n = 2; + while (i < pathLength && (!IsDirectorySeparator(path[i]) || --n > 0)) + i++; + } + else + { + // Current drive rooted (e.g. "\foo") + i = 1; + } + } + else if (deviceSyntax) + { + // Device path (e.g. "\\?\.", "\\.\") + // Skip any characters following the prefix that aren't a separator + i = DevicePrefixLength; + while (i < pathLength && !IsDirectorySeparator(path[i])) + i++; + + // If there is another separator take it, as long as we have had at least one + // non-separator after the prefix (e.g. don't take "\\?\\", but take "\\?\a\") + if (i < pathLength && i > DevicePrefixLength && IsDirectorySeparator(path[i])) + i++; + } + else if (pathLength >= 2 && path[1] == VolumeSeparatorChar && IsValidDriveChar(path[0])) + { + // Valid drive specified path ("C:", "D:", etc.) + i = 2; + + // If the colon is followed by a directory separator, move past it (e.g "C:\") + if (pathLength > 2 && IsDirectorySeparator(path[2])) + i++; + } + + return i; + } + } +} \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index c892a63885a..895c6a7585f 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -917,7 +917,7 @@ because xbuild doesn't support framework reference assemblies. Resources $(IntermediateOutputPath) - $(IntermediateOutputPath)generated + $(IntermediateOutputPath)codebehind $(IntermediateOutputPath)resourcecache <_AndroidIntermediateJavaSourceDirectory>$(IntermediateOutputPath)android\src\ <_AndroidIntermediateDexOutputDirectory>$(IntermediateOutputPath)android\bin\ @@ -2550,6 +2550,8 @@ because xbuild doesn't support framework reference assemblies. + + From 199cc5e644b1061a1d752be8a9849931ee081d66 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 10:30:10 -0500 Subject: [PATCH 26/92] Bump to dotnet/installer/release/8.0.1xx@c65382f002 8.0.100-rtm.23513.4 (#8424) Changes: https://github.com/dotnet/installer/compare/dfe59b6c4d...c65382f002 Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23512.1 to 8.0.100-rtm.23513.4 Co-authored-by: Jonathan Peppers --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index be8f600d71f..4d2eefcb58a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - dfe59b6c4dec70fef72f18010dc8606ce8fb141a + c65382f00216756e0fb192cc2fd6513448d2679d https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 817781955a8..f45426c6716 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23512.1 + 8.0.100-rtm.23513.4 8.0.0-rtm.23511.16 8.0.0-rtm.23511.16 7.0.0-beta.22103.1 From 55888da1b2baf295a964c6381b3394e78c39070b Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 16 Oct 2023 16:53:50 -0500 Subject: [PATCH 27/92] Bump to dotnet/runtime/release/8.0@60b77a63df 8.0.0-rtm.23513.17 (#8425) Changes: https://github.com/dotnet/runtime/compare/256bf22a3d...60b77a63df Updates: * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23511.16 to 8.0.0-rtm.23513.17 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23511.16 to 8.0.0-rtm.23513.17 Co-authored-by: Jonathan Peppers --- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 4d2eefcb58a..4b9bc9a2aae 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://github.com/dotnet/installer c65382f00216756e0fb192cc2fd6513448d2679d - + https://github.com/dotnet/runtime - 256bf22a3ddf920516752701da2b95e1847ff708 + 60b77a63df30362ed1c66a834fcb8f8956ea113b - + https://github.com/dotnet/runtime - 256bf22a3ddf920516752701da2b95e1847ff708 + 60b77a63df30362ed1c66a834fcb8f8956ea113b https://github.com/dotnet/emsdk diff --git a/eng/Versions.props b/eng/Versions.props index f45426c6716..0f93e103f27 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,8 +2,8 @@ 8.0.100-rtm.23513.4 - 8.0.0-rtm.23511.16 - 8.0.0-rtm.23511.16 + 8.0.0-rtm.23513.17 + 8.0.0-rtm.23513.17 7.0.0-beta.22103.1 7.0.0-beta.22103.1 8.0.0-rtm.23504.4 From 449efc5ee4312ea573e709ffcad2cd23d3be5632 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 17 Oct 2023 10:00:40 -0500 Subject: [PATCH 28/92] [Xamarin.Android.Build.Tasks] Fixup indirect resource references (#8416) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: https://github.com/dotnet/maui/issues/17265 Context: dc3ccf28cdbe9f8c0a705400b83c11a85c81a980 Context: https://github.com/Zack-G-I-T/SfListView.Net8Bug/tree/ecb25af3329391858d1d64c4875ca58771e2b66c Commit dc3ccf28 completely reworked how Android Resources work, moving from a `$(RootNamespace).Resource` type which contained fields (which needed to be updated at runtime across numerous assemblies) to a "`_Microsoft.Android.Resource.Designer` reference assembly" which contained *methods* for each Resource id. To maintain backward compatibility, pre-.NET 8 assemblies were rewritten so that instead of accessing fields: ldsfld int32 $(RootNamespace).Resource/Layout::Toolbar they became method calls: call int32 [_Microsoft.Android.Resource.Designer]_Microsoft.Android.Resource.Designer.Resource/Layout::get_Toolbar() Unfortunately we encountered a missing corner case: the previous fixup logic only operated on assemblies that themselves contained a `$(RootNamespace).Resource` type, which in turn (generally) required that the assembly be built from a project that had `@(AndroidResource)` items. In dotnet/maui#17265 and Zack-G-I-T/SfListView.Net8Bug, we encountered an assembly that: 1. Did *not* contain a `Resource` type, and 2. Used Resource ids from other assemblies, and 3. Was a .NET 7 assembly, so it and its dependencies were all using the .NET 7 field-based Resource approach. Setup: * `Ako` and `Bko` are net7.0-android projects which contain an `@(AndroidResource)` * `RefsLibs` is a net7.0-android project which references `Ako` and `Bko`, and uses the Resource values from them. * `App` is a net8.0-android project which references `RefsLibs`. "Repro" setup: dotnet new androidlib -n Ako # Set `$(TargetFramework)`=net7.0-android # Add Ako/Resources/values/strings.xml with String resource ako_name dotnet new androidlib -n Bko # Set `$(TargetFramework)`=net7.0-android # Add Bko/Resources/values/strings.xml with String resource bko_name dotnet new androidlib -n RefsLibs # Set `$(TargetFramework)`=net7.0-android # Add ProjectReference to ..\Ako\Ako.csproj, ..\Bko\Bko.csproj # Update `RefsLibs\Class1.cs` to use Ako.Resource.String.ako_name, Bko.Resource.String.bko_name dotnet new android -n App # *Remains* `$(TargetFramework)`=net8.0-android # Add ProjectReference to ..\RefsLibs\RefsLibs.csproj The punch: dotnet build App/App.csproj -p:Configuration=Release This fails to build with .NET 8 RC1: ILLink : error IL1013: Error processing '/Users/jon/Downloads/dotnet-sdk-8.0.100-rc.1.23455.8-osx-x64/packs/Microsoft.Android.Sdk.Darwin/34.0.0-rc.1.432/targets/../PreserveLists/Mono.Android.xml'. Fatal error in IL Linker Unhandled exception. Mono.Linker.LinkerFatalErrorException: ILLink: error IL1013: Error processing '/Users/jon/Downloads/dotnet-sdk-8.0.100-rc.1.23455.8-osx-x64/packs/Microsoft.Android.Sdk.Darwin/34.0.0-rc.1.432/targets/../PreserveLists/Mono.Android.xml'. ---> System.ArgumentNullException: Value cannot be null. (Parameter 'key') at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior) at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) … …/build/Microsoft.NET.ILLink.targets(87,5): error NETSDK1144: Optimizing assemblies for size failed. Optimization can be disabled by setting the PublishTrimmed property to false. "Interestingly", it *succeeds* with .NET 8 RC2 (no build errors). Regardless, with both .NET 8 RC1 and RC2, the app is *broken*: % dotnet tool install --global dotnet-ilverify % $HOME/.dotnet/tools/ilverify App/obj/Release/net8.0-android/android-arm/linked/RefsLibs.dll \ --tokens --system-module System.Private.CoreLib \ -r 'App/obj/Release/net8.0-android/android-arm/linked/*.dll' [IL]: Error [ClassLoadGeneral]: […/App/obj/Release/net8.0-android/android-arm/linked/RefsLibs.dll : RefsLibs.Class1::.ctor()] Failed to load type 'String' from assembly 'Ako, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' [IL]: Error [CallCtor]: […/App/obj/Release/net8.0-android/android-arm/linked/RefsLibs.dll : RefsLibs.Resource::.ctor()][offset 0x00000001] call to .ctor only allowed to initialize this pointer from within a .ctor. Try newobj. [IL]: Error [ThisUninitReturn]: […/App/obj/Release/net8.0-android/android-arm/linked/RefsLibs.dll : RefsLibs.Resource::.ctor()][offset 0x00000006] Return from .ctor when this is uninitialized. 3 Error(s) Verifying …/App/obj/Release/net8.0-android/android-arm/linked/RefsLibs.dll If you disassemble `RefsLibs.dll`, you find that it's using `ldsfld`, not `call`: % ikdasm App/obj/Release/net8.0-android/android-arm/linked/RefsLibs.dll … .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // Code size 29 (0x1d) .maxstack 8 IL_0000: ldarg.0 IL_0001: ldsfld int32 [Ako]Ako.Resource/String::ako_name IL_0006: stfld int32 RefsLibs.Class1::a IL_000b: ldarg.0 IL_000c: ldsfld int32 [Bko]Bko.Resource/String::bko_name IL_0011: stfld int32 RefsLibs.Class1::b IL_0016: ldarg.0 IL_0017: call instance void [System.Private.CoreLib]System.Object::.ctor() IL_001c: ret } // end of method Class1::.ctor If you attempt to run the .NET 8 RC2 build, it fails at runtime: I MonoDroid: android.runtime.JavaProxyThrowable: [System.TypeLoadException]: Arg_TypeLoadException I MonoDroid: at App.MainActivity.OnCreate(Unknown Source:0) I MonoDroid: at Android.App.Activity.n_OnCreate_Landroid_os_Bundle_(Unknown Source:0) The problem is that `RefsLibs.dll` isn't being fixed up as part of dc3ccf28, because it doesn't contain any `@(AndroidResource)` values or an `[assembly: ResourceDesigner]` custom attribute. `RefsLibs.dll` is "free floating", with nothing to indicate that it needs to be updated. Fix this scenario by updating `LinkDesignerBase` to "sanity check" all "Resource-like" member references which cannot be resolved. Consider: % monodis --memberref RefsLibs/bin/Release/net7.0-android/RefsLibs.dll … 18: TypeRef[23] ako_name Resolved: [Ako]Ako.Resource/String.ako_name Signature: int32 19: TypeRef[25] bko_name Resolved: [Bko]Bko.Resource/String.bko_name Signature: int32 These are field references. In the context of .NET 8/dc3ccf28, these fields *will not exist*; they cannot be resolved. `LinkDesignerBase` will check the member references table of *all* assemblies included in the app, and if any member references contain a declaring type which contains `.Resource/` *and* that member reference cannot be resolved, we will assume that it is an `@(AndroidReference)` and replace it with a `call` to the appropriate method. With the fix in place, `ilverify` no longer reports `Error [ClassLoadGeneral]`, and `ikdasm` shows: % ikdasm App/obj/Release/net8.0-android/android-arm/linked/RefsLibs.dll … .method public hidebysig specialname rtspecialname instance void .ctor() cil managed { // Code size 29 (0x1d) .maxstack 8 IL_0000: ldarg.0 IL_0001: call int32 [_Microsoft.Android.Resource.Designer]_Microsoft.Android.Resource.Designer.Resource/String::get_ako_name() IL_0006: stfld int32 RefsLibs.Class1::a IL_000b: ldarg.0 IL_000c: call int32 [_Microsoft.Android.Resource.Designer]_Microsoft.Android.Resource.Designer.Resource/String::get_bko_name() IL_0011: stfld int32 RefsLibs.Class1::b IL_0016: ldarg.0 IL_0017: call instance void [System.Private.CoreLib]System.Object::.ctor() IL_001c: ret } // end of method Class1::.ctor Note that the .NET 7 `ldsfld` has been replaced with `call`. Co-authored-by: Dean Ellis --- .../FixLegacyResourceDesignerStep.cs | 34 ++++++++++-- .../MonoDroid.Tuner/LinkDesignerBase.cs | 31 +++++++++++ .../Tests/InstallAndRunTests.cs | 53 +++++++++++++++++++ 3 files changed, 113 insertions(+), 5 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs index ae4473d6cd1..e07ec5e9751 100644 --- a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs +++ b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/FixLegacyResourceDesignerStep.cs @@ -139,6 +139,32 @@ string GetNativeTypeNameFromManagedTypeName (string name) } } + string GetFixupKey (Instruction instruction, string designerFullName) + { + string line = instruction.ToString (); + int idx = line.IndexOf (designerFullName, StringComparison.Ordinal); + if (idx >= 0) { + return line.Substring (idx + designerFullName.Length); + } + if (instruction.Operand is FieldReference fieldRef && + (fieldRef.DeclaringType?.ToString()?.Contains (".Resource/") ?? false)) { + var canResolve = false; + try { + var resolved = fieldRef.Resolve (); + canResolve = resolved != null; + } catch (Exception) { + } + if (canResolve) + return null; + var type = fieldRef.DeclaringType.FullName; + var s = type.LastIndexOf ('/'); + type = type.Substring (s + 1); + var key = type + "::" + fieldRef.Name; + return key; + } + return null; + } + protected override void FixBody (MethodBody body, TypeDefinition designer) { // replace @@ -152,10 +178,8 @@ protected override void FixBody (MethodBody body, TypeDefinition designer) { if (i.OpCode != OpCodes.Ldsfld) continue; - string line = i.ToString (); - int idx = line.IndexOf (designerFullName, StringComparison.Ordinal); - if (idx >= 0) { - string key = line.Substring (idx + designerFullName.Length); + var key = GetFixupKey (i, designerFullName); + if (key != null) { LogMessage ($"Looking for {key}."); var found = lookup.TryGetValue (key, out MethodDefinition method); if (!found) { @@ -163,7 +187,7 @@ protected override void FixBody (MethodBody body, TypeDefinition designer) found = lookupCaseInsensitive.TryGetValue (key, out method); } if (found) { - var importedMethod = designer.Module.ImportReference (method); + var importedMethod = body.Method.Module.ImportReference (method); var newIn = Instruction.Create (OpCodes.Call, importedMethod); instructions.Add (i, newIn); } else { diff --git a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/LinkDesignerBase.cs b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/LinkDesignerBase.cs index d8c65f1b573..d999506b286 100644 --- a/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/LinkDesignerBase.cs +++ b/src/Xamarin.Android.Build.Tasks/Linker/MonoDroid.Tuner/LinkDesignerBase.cs @@ -60,6 +60,37 @@ protected bool FindResourceDesigner (AssemblyDefinition assembly, bool mainAppli } } + + if (string.IsNullOrEmpty(designerFullName)) { + LogMessage ($"Inspecting member references for assembly: {assembly.FullName};"); + var memberRefs = assembly.MainModule.GetMemberReferences (); + foreach (var memberRef in memberRefs) { + string declaringType = memberRef.DeclaringType?.ToString () ?? string.Empty; + if (!declaringType.Contains (".Resource/")) { + continue; + } + if (declaringType.Contains ("_Microsoft.Android.Resource.Designer")) { + continue; + } + var resolved = false; + try { + var def = memberRef.Resolve (); + if (resolved = def != null) { + LogMessage ($"Resolved member `{memberRef?.Name}`"); + } + } catch (Exception ex) { + LogMessage ($"Exception resolving member `{memberRef?.Name}`: {ex}"); + resolved = false; + } + if (!resolved) { + LogMessage ($"Adding _Linker.Generated.Resource to {assembly.Name.Name}. Could not resolve {memberRef?.Name} : {declaringType}"); + designer = new TypeDefinition ("_Linker.Generated", "Resource", TypeAttributes.Public | TypeAttributes.AnsiClass); + designer.BaseType = new TypeDefinition ("System", "Object", TypeAttributes.Public | TypeAttributes.AnsiClass); + return true; + } + } + } + if (string.IsNullOrEmpty(designerFullName)) return false; diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index a6e903cc6dd..b6553ecdef6 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -1115,5 +1115,58 @@ public void EnableAndroidStripILAfterAOT ([Values (false, true)] bool profiledAO Assert.IsTrue(didLaunch, "Activity should have started."); } + [Test] + public void FixLegacyResourceDesignerStep ([Values (true, false)] bool isRelease) + { + string previousTargetFramework = "net7.0-android"; + + var library1 = new XamarinAndroidLibraryProject { + IsRelease = isRelease, + TargetFramework = previousTargetFramework, + ProjectName = "Library1", + AndroidResources = { + new AndroidItem.AndroidResource (() => "Resources\\values\\strings2.xml") { + TextContent = () => @" + + Hi! +", + }, + }, + }; + var library2 = new XamarinAndroidLibraryProject { + IsRelease = isRelease, + TargetFramework = previousTargetFramework, + ProjectName = "Library2", + OtherBuildItems = { + new BuildItem.Source("Foo.cs") { + TextContent = () => "public class Foo { public static int Hello => Library1.Resource.String.hello; } ", + } + } + }; + library2.AndroidResources.Clear (); + library2.SetProperty ("AndroidGenerateResourceDesigner", "false"); // Disable Android Resource Designer generation + library2.AddReference (library1); + proj = new XamarinAndroidApplicationProject { + IsRelease = isRelease, + ProjectName = "MyApp", + }; + proj.AddReference (library2); + proj.MainActivity = proj.DefaultMainActivity.Replace ("//${AFTER_ONCREATE}", "Console.WriteLine(Foo.Hello);"); + + using (var library1Builder = CreateDllBuilder (Path.Combine ("temp", TestName, library1.ProjectName))) + using (var library2Builder = CreateDllBuilder (Path.Combine ("temp", TestName, library2.ProjectName))) { + builder = CreateApkBuilder (Path.Combine ("temp", TestName, proj.ProjectName)); + Assert.IsTrue (library1Builder.Build (library1, doNotCleanupOnUpdate: true), $"Build of {library1.ProjectName} should have succeeded."); + Assert.IsTrue (library2Builder.Build (library2, doNotCleanupOnUpdate: true), $"Build of {library2.ProjectName} should have succeeded."); + Assert.IsTrue (builder.Build (proj), $"Build of {proj.ProjectName} should have succeeded."); + + RunProjectAndAssert (proj, builder); + + WaitForPermissionActivity (Path.Combine (Root, builder.ProjectDirectory, "permission-logcat.log")); + bool didLaunch = WaitForActivityToStart (proj.PackageName, "MainActivity", + Path.Combine (Root, builder.ProjectDirectory, "logcat.log"), 30); + Assert.IsTrue (didLaunch, "Activity should have started."); + } + } } } From 94ce670366de1457f9f330e60036afbaf29a6dcd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 13:37:34 -0400 Subject: [PATCH 29/92] Bump to xamarin/Java.Interop/main@3c83179 (#8429) Changes: https://github.com/xamarin/java.interop/compare/ed63d890b8f5dc8626db4a533670c1573d116c31...3c83179668cf8b6848626be14ddccc3f742a92d3 * xamarin/java.interop@3c831796: [class-parse] Add Kotlin metadata to `-dump`. (xamarin/java.interop#1150) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- external/Java.Interop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/Java.Interop b/external/Java.Interop index ed63d890b8f..3c83179668c 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit ed63d890b8f5dc8626db4a533670c1573d116c31 +Subproject commit 3c83179668cf8b6848626be14ddccc3f742a92d3 From 42f07c7c4f5afe9273fa9ebac4279478068051d2 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 17 Oct 2023 12:40:21 -0500 Subject: [PATCH 30/92] [profiled-aot] update profile for .NET 8 GA (#8428) First, I had to update the URL we test, because it was down: https://httpstat.us/200 Instead, I used: https://httpbin.org/status/200 Next, after reviewing the latest methods in the profile, I noticed a lot of timezone logic was completely removed. This might be related to different cookies returns from the new URL, not sure. I added a `DateTime.Now` call to `CommonMethods.cs`, to ensure the timezone logic is in the AOT profile. Testing a `dotnet new android` app on a Pixel 5, an average of 10 runs of the "displayed time`: Average(ms): 179.1 Std Err(ms): 2.53179778023443 Std Dev(ms): 8.00624756049924 --- src/profiled-aot/CommonMethods.cs | 6 +- src/profiled-aot/dotnet.aotprofile | Bin 245797 -> 236969 bytes src/profiled-aot/dotnet.aotprofile.txt | 174 ++++--------------------- 3 files changed, 33 insertions(+), 147 deletions(-) diff --git a/src/profiled-aot/CommonMethods.cs b/src/profiled-aot/CommonMethods.cs index 7b298e2fc8d..e747ba4d93c 100644 --- a/src/profiled-aot/CommonMethods.cs +++ b/src/profiled-aot/CommonMethods.cs @@ -1,5 +1,6 @@ // This class represents common code paths we always want to AOT +// DateTime.Now // string interpolation & split // int.Parse(), int.ToString() // Culture-aware string comparisons @@ -15,8 +16,11 @@ static class CommonMethods // Returns '200 OK' if the caller wants to set that on the UI public static async Task Invoke() { - var url = $"https://httpstat.us/{200}"; + // NOTE: alternate web services if one of these is down + //var url = $"https://httpstat.us/{200}"; + var url = $"https://httpbin.org/status/{200}"; + var now = DateTime.Now; var foo = "foo"; foo.StartsWith("f"); foo.Contains("o"); diff --git a/src/profiled-aot/dotnet.aotprofile b/src/profiled-aot/dotnet.aotprofile index 15af4b92975202439e56cc395f78b11b783d1333..4aeb713f018dbc42eafc5b2900b8d9eec718a5d7 100644 GIT binary patch delta 34237 zcma%kcX(CB7cH~TIdgOGO+siXqyqs0q?1NZLPGCddI_C`Dj+Jw1|szcTcoNWpwevE z1v>&#?NqVRq$nswcxz??^84QV&0vmh-gE2k*6Fe59od1_HAiE@1V2@$%jWT3xBR!)9uQF>lxQeJvq z0Rm*?CFRwxUzk*wo|Ti8pP$=2H6zXa)4!@#W=l2+rKaWFTkpiW14jB@I~f?zqDDblYGL#2{M@9B%&elM`so=3N%@8O2w7B= zp58n!BdZ|4;I*KxS(9tzW#ngO)KASz%FfQqhGkwxQeI(xeo|pUQC?1F{nWIgqRiKZ z?S86)MKdklG+V^VSys7nz|Hqj9ce$J1b64Ran7R}jXPMGo6Hf_oyW8|^H3%JdA5k6 z$1NT_N2FTxgvI0bQFS>Rdf;dGQ4eR1!tTz!arC6cxxGZJGZ)O0Dq8uJLYDhna8%&v z(vo3`_B<0XYCq-5`3CpiPxWbm#V!4!9WAt&{h|{sviOW&^q|ES7X*rq!gb#|+Fd;D zmOs`(EOGlE%N0xAWycx{cE3K>PCVmQKi*L;Lwr@q-PXT`c-CEYJXtJv_a5&eR=Dve z(rBf{GgGV@9Gxoyq`eBJD|NYdr_w%39#7pkApX!U3-Q-iv#4B#;sa&zi-FT{@*zEpt zs=e6a*8jP;*y=9)IYDf5-~2g?UbXo404tRD_(iZg_Lm@OzlOM9brXK+@4T+joL^F% zH#GX-mwe|ks{A-?g%YFLSJm+mK|L|)Y@s3;bw}#?fchGMm#Cz_Z--e6# z-OS%h#Ru-X-`j}~-9LXH7_|e|DobAcivpmXAawccu-poiEI)$0)8dn3khqRLL>TXH zXq9(QoDQUqk>o&8)3QIYc+q}pNS|8#75>W45CpBP`~hk#K6hizW{5A`&S#s+U54*` zfCk7f4SwqY6-8OQA*e)*L&;CTKYI@dRj#`&eyFBsOM5LA2dOcAWpT5E)Jg6$q4^+9 zk^2pfr7zCRB( zlt!m4KA^at!2yFy_1M1{q0zULA%8W-lfI?y@;8GId`pe!cT~uCh~Tuv4YNc#ow2wy zOVp;b$kBI{Z`tQ8KA$C$>Ac0!*`m5de^~s)cSzO+!~%TeJ4%%oHFg&kM{?5lttbFP5<%Z)o6E3YbKalIdqiN6gV@B`JWMgKs! z+cASt`DGomRfpt`s+g}q|BuD)50oOVyCJu$d+ZyAs*);_xKT)PD@Ct62IHdk0FLY2C@Oojr4R;1Yc<0)z&Q^BR!+arIbC?V6d;LfyTWxC-9 z{X*$NW@v$*{gqbB`UW@sjdoC`&Ej_&7M=x8wVV|ErEL7@#-3&KjNhrB%mIf~tlOo$a*}4)xwABiwmNx%%n!3qW;InORe1_`D)&`fJp=j9# zIK^JN9G$bRhWx=9dPcT0xX)SSw7t#i&(fgq4&YS572z*+#E&kx4mQW1qrS2eh>kWt zdJgTbGceM2-*S;eU2Hydj=IRMMz0^*&FH7D#&FQx;J`Jap6mgPy6$kEx>HX)^*jxw zUN)Ei0~xpvI<&Nrf6&9!+vXdp9|xZzKL=l+NZAM4-X`0vQmhc3evu?^zCcw2>y0Rx zm}vJkp&!0Lb7VhYc)p;EXi@zQZg-KoI|G2DcvD+ZM-Eib=Dakj#7!?z1vv-=p86j# z7zCQL30yb> zhU1O0@?RJMCK%lEFRB@CO@yE-dMLcLJqf~1ObRC2Ztyp?d3Z|^5^mjpuf^mti~DW2 z-#3xUqJo?P4yjt>T6LVM3af;pvpi7dfiL_;L2?=tAm|DWlMe!;_)4!}Xne@#=dVyN zdf4WFuTU#F9XeEf+pBOmGk{Tfv#(-+n+c5Z_^YdwCuiNo;hgk0)sl}G!~6b*@==4I z`xXZalt32mZ2CB}7nT^-|@OY4%XE^1Pr(B~HIbX}X=^FJ9TL7#IIuAegLI_I% z7T8?NgK>BHvzhWOWR<``M8a!FE^VY^KMbKSZfP}|CtMK1)(MxN`b+m zrl`*6r%^1?HvYV}sO`K8ejC4Wi@J%|_-LF+7O!(4rYhnM&W;x?#G5=lUetHCYqRpV zX#%|kcX^u%>1~^L-==o-j=iL+HGtl=mpo|AqWA2j!pe=Z-bVmcY-(jdA3)H>rq~+1 z6D{3ie+c}6898<+XbNeS%#%B{hRY8V)#OJ8XAeU|_}JjF!$gAo#NZ0UvAX?KW4GVu zHKqL-a3BvBRzv4=4POvew)_GR)pSBwHRLXXePmUWUm9GY)QYocx1Ntga0yv{XAd;H zSRU+ z$lwMWtr&UO;9C}w@ij2~j>g{@te^HRaFI$xHAf*6i};?u&lV{j`v-7vK5J~NCjDsh z7q*p8NA$Q;i!&T6nU2~#*s*HSF`J)qtOnvZF9;X)#R>i-Tx80V2o9gL$FbVbPnaG^ zt3aLt_W_1>f-Cx2onHXsO=0{Bi0sTpn&fZ5h+(U=Qp0`+zEj`!X$Wy}!@pyu zC#`;AXYN&=EmNMs1k7U%jXZaclFmcWEk&{QxRXc3us^`6DF1+b-po@jXvi%Ctp4E_ zf$uz)Ef^5Mf;b zb2q}P5OjoB?4>@`<=>F6qPO3Tq>az2FaOc384vJ9OFusjtC zO2>>HIKFuNfHeCCRM$;1ZvvjTxwYRKPygEdf!|7{TQ*op82o6kl_I?cza4BfC7FN+GOja}o?}bIb!vbUY6C#v%Gb|O_q8qLIt z)&`5B9J7^zwRRA%sbmF5Skcg{HW7ut6oVh#CZZj8XWQCNEaVto)CW6YaT=;Js1OhM z1bTqlCh{O?Bu}qs#c>H&I_v~ot%MF&UE6Wf%2tW2Veo5}tr0Q-7`qGYdReu& zUsViPH4QPfiq%loGWeY;R-DJK4FPGc5^8cLDngw!>m5CuECSTtPQfB!3p8k zMwtYRorD7)T9x_ta4ShBgFwor7mG;FiojD-K%mTqMp#2-s=)^%tU)pj7|C1R1$%2c zdFh6jUloO(0gM!VSrtvHJ}@4kV~mKjIy#vkVz}`L5hZH#>WWsKfJ8e>agKYYU7XA| zFrdP5dIizx@@ZK99|e>HK1k=?}@Q$%RHmM9%B{De4{Upg`X%e{Q6kyN!i?B zL^@a&8k;q7a5hDTKM`jQcUl1Fx%&#jcu2fems&c!DBgNlwgNrU;-qUL!mWQfpISTa zl*{d?jpL3!+J@RX?&p^?sGZ~9yxd;4*S7z=DQPF#9UOPzpY5rmB-5mGjE2&s1xCuuKv2*Jly^>2k9XI@HI`uN) zr(JDI_o?s$skh_C{@s@PIPRFg`%_=X{p#=f)X#BO{1ffQ{}Vy|9k`Vl1?anw* znfE4Gjl(8ERDEBi+rD4vkmgAa$JexK(`1L+)U@V=O(`>a5;}Wonb8!7&(=h{cmOhT zR=1WlhNd}-mxuD!T2^$}gJofK#1BE3hJOz_{Btd9s`IdtRdbHDXu7lHxCnKZ9}Qlb zXhnPM8PH8fd#!Et44(;nCv`Lng7!=^9e02g&wUfEO7anqvmDio{%1?bLytOYO%Tc- zCSqIWF<6064U=ytTFvF-ns6Vy9L+=PU@Gy1!%OSH>&`}L*1E}ytyc7;!&BAY zxek9)*Xl)2IUHNh>O%7zo>RdAx)>-t7qs{@6c=2#iUE0q=`=}W$&Zbzctzo9R}U3~N0izgt}!An431_MW4JE@KClU{bIV>;^s1OL9@*A2_@!*IGp%I^3jzwT*T-e5nBnb|<`jL#vVV5o`l_Ohc=-^Rb4# ztBV@+iNoB`dW1f8II0msedh4KM%JVBx&B*?CpWf==?jOCHMW+~E;QUGRvvxn@WA)2 zP}lcXIG<@^1FC;t_8~*n+%9TJ`!IyPJg`(PBNW8^ET?KklZe`S7wH>Kn=_aRO|2^Q zt;0_?MKk!$;d4!``{;XJVAXhJGqjN(9Nyc^nnOQ2+%wObPDdR6KF{h#M;%VhM^8WI z@U(mcKJM_*e6-0E%FTyzodPSIPCDGY05jE}9PZy3z1}UbBIuOEn+p)|XNRv9pmF|k zcLo^{SX4TG%)p8EuSnr9y6MT^0MY-JG{;2ZcY_Z!$E5eP!RHDw*kA2=)zFLT>`5$*fCN`X}%&XlO00_F;eBYj{N~upmNbZ(;S7SB+u+mhh&3 z1J81JV@o)ge}K`>Pq#$bU2{0Dm6cA{9q!u7S|o2khcW4FE33P_X>g0yR=)h#;03L% zk#x)98?CLZ*xTUl^fJ{vZ$Y-pNz==2>t1$R3doq_G;M3GAgpHcxL9R*0Y@tIlVmF~_neaI&{xC2VI|E3gEKnA zCc@y-&akO!@T;9Mjg2%ori(RAMge0IfoW`e8Ex>NU9irJF*XTZt>{oHG{8qvu4Zc20z-}nj>o%T&agOP$n4sKo5*sHRav0H-wYBTOl61 z7Sy1zkZUJv8`FtB(IgUqF@^E>!Ys57Fp`T!K_^+)*sSekO_BACO||>b;*$*D=RWI! z?#aMvN}^o0YVoR>3@e`4zw3y>qb5LCPMyxfpQHfK{Qs~^)pmMHx@nFGp)~1UJ(5J} z(mi*!s=N7YBOD+C&cHUHTXJqLWlHzPxhJvx={|A(X>338AMv89`|uwXC`Y=B{%DTd z0PeSc3=407cvVwS^FkZ|mwDL+^1oS3BajWHp2eI!Y!0>p;MA`K($G2F=$p;4uj>xJ*_2vKckRs{)JD4h-keKqr8{s&sJrIh zsQSgW=2p7w1Z_v1H+B0U#Qow{ zWKd^tcSl=3`2&3E#SjtTvAaOg8HI;U-LBI8@OBf~4NOw2n6k(HFz}<_@`Q+a#od8)S=iI6RqU{ ztM};KEvm`EMpg$@Lv#r4ZHrP_Z18>?htWe-Nrbt5Du-9; zJgH>jh%v=Q#RDf!8eeP=gB7$Y@Nf-zjDwBD5hn19j(A9pG&oU;(Q=f*%cU4gqa_D< zL}K_DaH^<$_=h_JW%V)!?yzlbSqiztBzA#E1k+f_t34v0#z{Wq5nX7!-zY`F)?rkq<(T=G19@7+3UTANV0H^RhrO*rJD}d$D0SHw!|2O^4!PY4)h6 z2H~2`49R?_jDTjl_IQb}WSIKS4 zi}&SY1_y_Tk@UFa2SSj-Ck*#ih!`wq1EbZ)R}j7B9N@N+XH`IaPa2yO*#F02?A`Vg zDW8G@#O8|PSve25v*h-bL<2eB@bfE)CUSwn2P=uLw6JWDX;N8W^#H{}Q!ghrsX|U1ugGs@UGpw$|V^ z5#niDC*8U|A|kWuTQ7oDsat`+v>rb?buUV{{r0G6>iTWuS>OD;kGf@(s={?>ypRCh%EW0vDp-Zv(N1Y zmu|pT&-EBlkKQU9W1GZ^c=tKA1)SAd^jF$ z;eE(~HZS{1)DE{kfS^iF-RiPG)EaD)OMb1IXfJm_Mxx(M#%|*3>gd-yC10$LUB!=} zKyGW+5JTk0z-VgQ`s1kJ6Ul3W;qCU+Ks)*r3J@1-i0<+;jrAb6e}00;{@m#1CWwym z3xiK4;BLk)gL7+&+8+B$BkZe*%sv{nzLz1u55z`_MgSsQeX`gxbA1EU|l2 zgSXTb^W-<+kQY3n5_iMqDt(K3s)x?>ol(4B5BGzt8$3Ei)b!XVAmEnD+bJSVo;0{sDmsJx69g|iY3RMD z%J?*q74);lWy2BgPs333e42=-UnIYhE+$*{uaZ|~i(HF-Lo#wO`uvU%zZplO9sFs@ z-E-jJ&q#hY2RClcLcfx~$`OflPV%)J(KPHlDAiid;jjIN(xaTtOYV>>lEek>uoSmr zmgI`4*o)9XrJI#1)C(%WCH!nc@QXOw%@yOqE<;wa=~L}LA#B45!DY!k8;Gv4e?k7g zVz^Qk!(TcEZ1Xn|3F0azKM9W$)lfvpzhQ9IOi?aQv%=*+kl~tlG(>B@1`OA%FkP1% z(n#de4Y>G5B9(4ReyEY?MgL0vu90X)w=hsO76o)0&8{)-OqBER{Klfx5!mp4m8pry zaY)0aP0$4_1#vk{T1}-5jDh2iCZfM|fKj}7GZ(F zs$`YNvx6Y0W9&c=_skb5G8i&aI4@s}k>yRG|L#bH7-G{ZtGZJ`VV*exS1xK^rivC- z^yu4KmGVcF3>-hTbMe3-#pCTtu!5q(3`&-j4c2b_d;t#Ps+j2hI~or)7EKD_xxx%C zF2pHtIB+~~EJVRZX!vU(3au(2@|2333QnY^)un|9D+>5d%b{opx-_Fa?v{h`G6r(A z2NR>12rKqp!?-(!u^u<*P%S4OavX+b_$s@a3Z${euCB0$(>@cG+$D!<=!0$SdDu0S zy@x+(A>uuD0t6&YpSagFcuPynziJu$drJ(}wM~F3twf#3MBuwgt^+|QS+O zk1p4Ij~>{YLoV>>VF!orPN5QY%Auh454(xFvbVt( zl}#Um6ux`ui9Oiv_iIH+N|?a2{y&~a)Me8EEzHyF0mB4lCr)# zR$&!ij3dSY^MT=37?12De05c}QZw?h)A6oGQepE#ym*1PCzA5>Gjo&D>*p6`q^D)1 zH_vZQ<2~%{BkDy>K=?cDeZ0aG@l#R7I>E!8`iO?kB;bi>^Nuesm@xduw2M!utJi(p@{s9y9Z+*o( zo(EL`lzX2qsfK(A!h^a5ore|F$&vPS;GX)T^9+T|I|-fpi(F@>)~HuC*7k=xnFX=L z!{_>o*7S&na|Vcc&ZFS`?#^D7`PcvqhmWD#4HQl2aSyj2D0(?hKz)sO{(z-@yFu7M zo$cWh14RRx@$iU|A~WhaP^x~FQ(vR-^Z3zj@;U7$ zofjZKUsg?PHCB@gx98y?cT9zJr%58M^Kggt6vi_~;VR*aFj;4kx?V#)RPw%2xHP}P z!`DV($+{5%M&mNuOCFvvS~RDZk&V$Hac%*(84oy6Y4NBUa;veZSAr$jHemElwS$7iZ<6z>l8sm18{_4aQdHz?9=@+s z#MVpC%qYstPR&os&B@G2s-IJkos?gcSwAVYps+9tFB#>gWvA2Yh@c`utSiO1`38j7 zO~&2?#De%zsYvi_S2k$f(PQz%w;*i)pC{I~=xq&o!F zR~AX^I1JqHLwHX=$oW7)9iO_i;^n#HM4v`okk>%M@77$O5;e{{Yva-Ds)D9B{ z8*%mMBQ)>vBC05@Aibb|T7GI$QS-v)N%afU@b*+5Ub||ZRaB6Zn~|NDmYz-@tN1>` zkJ`9WJ3n_`^BF(F{si>LCSrX{W$$U|rzS_Am+|Qna8dXR2%nb? zo!IL0@{9>sV(c>3s=5$g9DV8Gqsn?W_%BU0s-=gsN6G&cLPhL<)|-HnrqRWT_Ff$a z&n&?0rpXgUsQk(VPI;;-Z<;8|%Y9nrk0!#C?>G3`L|o=QU~twXkw6DM+;@_wm2e20 zZuu(n_Z&>N8#w;{5heCvs1KP2@U@2g6+%n<8whW4rTax1ee2<(`$c=_JEiC69>nDM zmHS1Q{NC8_x*zu#e*peiMH3Tk{Rpf&pW2aCZ}HF(5IPAzdbnUR2Bo7Qj(B+7Wb6PP z(;<1=WNaTDH@N&1(N~@@c>EMG*mDvX705@Xpgw+raMGmsl(DHc6>sPKZ19MwqM`gn zoA66hQ6aw?{@_$G)$<#$il_4fQ2Y+zHxtik4SDqg*vLEs+?Tl17^@1~(?o4?mTwdM zfI9A|p3=OuWMbKo$2l0PiQ`%Pwa@ENSSEVZkw?ua>kkmB5bnOlbOA&2U-F~j*2*ff2--WI~Cu)`$Y-Ur-byz(Zn| zykhXyhs2lis=+fJ7M{P|&z+>@_Z&C3-j( zDB??12)7_?%{Ae+k6;e!Kw$^m@o*u0B9wd_G7D#TGNA1C)=UxUu|2Q@^UEXHFb**I zzDLC<=>htg*v|MoGYF;L4K@;F*RkO`RcIQU>- zOpeAqj?t{V;nzP7?;aAs2NYKU9I)pJ(OFdF)xlJa<7NwQ`L5WX9D!c0J)69zt1o6B$o1Gw94JTD@Er_UC3J$6+?emn=;Cy^TK z5{i8i8`Dt%YHge%qrn5mze?38Mkh3mFFq+8-t;7PMq{Ck3DAcZ2b6W3k=5)dVyX$E3Aj9j4f5DEp$0wR zDKW~arEpm-*A7tkG(x#y998m`4jyGELRq^k`Z^k$=1{jR?XlG6cdb8esXb3^AA{zwo7mG#xutxVP8 zZtG$@pegt!ruj6}P}PEE=LNWVhr{^1D+*;kcsxAkX}Hh=V6>T`PorZuH~5{WF_kPd zn3kZziww?Q0*Bth;6Y2U$ZBcuk|km)wF=;nrI=T?4&aVU(GS`{*V^K4FnKZ8k9_W&-x46Ud~0FPXT=H4@apI(M|dIj*#WuhkC7r>{NiNe~wk&GDp zQ-cLPE3hRy#PH9o5bZ1~4p1+I<;tNTi*>=ceM-E% zd8CCIxAIhIv|c}2ccMKECTR1ER*G1UJzNV*S7G5h0uT)~aTV%nBrxi&WCd<}j57Q~ zt57GSfsyocD?~MqJq7}vyLA;Da0xIXUDJtT!>v*Xs+sA{im?z>Gb=?iTPf0NSmQvb z4aB$Mo1>sme`!2OJ@_hZB_1$C;ElHlz~kXK)Qb+kufeA5L=brVH>*%ulYoB~<}IR# z)mUWT52Dz!J>&(EBIIOaxnVUDJp~vA_~U8}SyK&evPN_-PY*!2yI#z^yI%Bg@;VU_ zZcT$)WkZ?S58@{g$(|O#*Vl@U^iTk|c}{euhXZ)^b7HiZZu*OL}tOhk+ zZ16{~pliFpc-Utf(2t%D;HZsw&=PQPlBUTmHNtZnMfCt;2r9?@H(`?a3{;8X==Nf zu?h`!vq;KFPft(H%S_KtYMxer#YbULKEA+^nVD2nn46oL-8?NTH9wtJtLLu5kLuWQ zJaDVPtGjC;uMSWz{mbV7k)PC8aP$0mMH`R!f}%O81trkh0DkZlc%XIgM4MC{yr@I- zoGoYp>owLJ0QIg7C6#Z#h$Qj_bOj4Q*H~`-uHcB36K4n zX0|teT~riN*6a5e(;ECWTf_ZZ4JHqF&cS5s6$F$w~NMRKgF6?9AyCwRGHp281Glh5IdOkIQ zw!JIjvOWX;e=S^^mrlZtjP-e0Jj%@e0zay0eU2I0dty-7u6vbVmMM1y@QnAwXJNbV zRqiQM?$$M9i^#qAXz42mx+)a=UsaS3%P{HH5>)KHU1|9((&+2&&}2(Z!Y+K;J=7o&CqjRwOqo z6%_)zOdL3@*!~{;cWC~~t^5ECAAlu771^HY)RIR&iNTk}2@QSxU9 zr;O|V=u=U}`9;aPLCIgWis>`#g!~4K)d-Fv66Eg&_xTL*o;LWg&u}7m#^6Jr;pq9S z!O5TFe#<$7pZFYp`nh4`-+ymc4SeAVFNyF@SfH}G#BZt|tbqkm98Uy8!8Yv5E#>ZRg! z2gNt{Ibk8kdRgkN8<0bFg5N=_Ulm2LULp z8@n+d6$UrmgAyWx=j{~@UH3FS6liApk1%RJ;O z%u0h)IIlX4Pn5yHc-$9?FAt1OfjbNDTCr9LnEzQrR{){b&`N;;bs7%o$M3^7V?{5& zxDQ2E2|S`!DYmGxmv8PvyQ>1SvR9vIges_#T-m+zVl9PvdBlEfu!bW^`$Y?i@bXXl zu@76-%gF~YvyJrfkOSgDiUNN?45w%>w>^k+QtZ7gI*1WC7I6YEe;xNIe>#X+dYmTI z^C;fS?GIs3p&BR;xnoBpQFSlxJtW3a4KFu4jK?K-c@F-{nlM2Z`sT2hMzy@$Oh7eI$%82^>Tx6aHdxeTwR@2nWP~<@(r?K5W>31T7(!HGd9Zv5vyu9K&tPSdW z@xc#F>NCBZ_`T?7*;!ux;0Mh1v++%pqgd63|A^&N4kF9;>MJF=2C5=x;N@{Yih{6) zpj2MA;-B3JLLBna(964_l#R7LS3V*(S=0oZn(8Hk)T7uNXbKI84o9(;Xy(B9o z;1`bKT1Os~Aa@=W{VCt;E{F){2FFBYD)4g0W7s5Yj%OdoZpq?fIO!>b@m3rFcBRUE z@R+DVMP5FAOgv64v{eIY>2=G8hx4a+J%d_#`RH+++_gp^U^*chQ5)3Q3GocI_3{rV z#Qm}zbSU@=E)`kS9`CoEM4#yZ68QQ_wKnqd)sxr|?&RfKKZz{r?B)JHiQ(a0V55qn zF8)$i{OD1xieQUKVxFqx6BwD1KWNUqn&1&e!=N` ze=P@&MNc31i|86Q0P@`o41}PcJb+h^#f`*4kO!ht0;skeZ1AvOvEwuZxEK1^ukgFY z!04V||BCwvL%kgGn^;W4yu9`|u|*Dt?o+|j)*y8o{t?sV2oN6P)YEW0VW&kU8tLVF zr^S${QBWxNfIqle2Rs@`CuNjZpM{QrJQ_8m-YPE97;hEVqEhtiGnf>Q1qEDu2B{e5 zo8gbnTkEjtU3KM5Fj8}^*VPV4=K_ns3yX|k6Gp941q z955P03prI|eJ1gMmxIq^2Wc88V6A>oW2Fv$2(V&9Bwx*lt8(n00&fL94Dz8e+vytX zsAiyH|ADqV6BMwHYL>>z-N;7(dz91prANJ7{sLU$W8mOdnq3eh<>MyU)(e;^KLL!y z#%;6kd92x94!bBGm2-^2a~BctNfYqkMX{Xbdb#uxn%q<1RK?H5Uwa;YltX$7-r*9K zkndvUWA_o__xr@fq%liExuRjLMX+*#bwH;?^P}-Q$CHZ z`lsk1mqLCIXK#3$2G=fiQC;{GMf?mfGMn%hZm29Xc)?#d)PB}r&lS;)mg_RC%mr6O z1&_S~n&rl0uGEmXT*0l(RbKw_3LN5UFK1j8rL+c(^QtJK=e&IGDmEOR_j1F(QS~o) zdCA|nCAQYfzy6I&wd=fG_zyMliFwh62RP&!Pvkye^{Y6)*2`@g=jTu8RQLr29)aZ@vx(z8R*-aHShqLT)j5 z)D2{QtHEF25X0p*;2j?RjVYHOyopS|3PMd5Z*0N3ZtH7gD>@iU67a8j^%rA2ub0{6 zy#|{d_gi?eZs-fUdIeHtv zx?3t1+kfgUa9lwR!n;Kv?(|?~Mep7*RhmR&dg3jCw|3tHp<+}P^!^>Q_q^sd<_93& z*X}OL`tV-M9d|4h8^2^VRa2{+oe*}ITK~vE+lPoVf%JHaK# zDLCv?h$}fTU;-wqHdl9?Q zs)+8RJ>I1j<%R8q>Q15AUqRTTY`xsmqHeU$%UdjbD{VhGbp0we<;VlTh_{PP`JRKo z>QoQ+0IKlVJtRX4a8xmHLRy%_&~)5`5Xd#SRJzeB*m!7U$U%F_l9?21ppooGU_@(c*L+6jIX!dVk) zo1a1jox@NNNS(vZgH+XW4u9=G@S~jGc`v62Awd@)!_X{)E_rx=gpdys0An zOnA-TtwhffPEJxPqXQsKxb+{#?^UL%j)lWg;&Iz>1Yj%Z(+_eqI0QvXoE~Vk{>XQ%ps!EmMPLql!6~kAAfezIHqpWb?y8$Ea1XQek zWl&!kslwO7Q3zE*MsVILs;t~ccw|{f{ZdTSosf|}?Y^975K$(bF@VV7;s`2`vC7WJ zKSoep83!Ed<84-e1x_L&s%>&v zM?uq?>H;DY`ipM$eCpM*#xe;Uu;!9|TpT?gp8*Y+!O@f|>l?gG;Y?tZ^}cATC$mgwfzQfOwvQ8IDBj5dmu(W9 zt6*7*8vGY|CH^9Yf}DoXHqeIC8!3o?cS<|*|1RwbT}#^(7mv*wJ>q_KdrK8_S{4er zF@pWS3py>!6m;xeYx72Ey|O<#23_=aA~o^hCF(G49}DN!6j4If*Glj;qgaZhWEpV(vHBi41PNvKCrdHf5y`e*#;O%dAk}_mu-RZEbz72SDlv2b|4Vh%hjna zwfFt!Ez!s;vA+iSWd~Ta_ir*$^?OB`OwE(T+>rZT4`P!-t~ z#JA=2WTt-tx>q;Ic;dnYszcp<{9Xd(22c->YNCWmP$Um{lqyD8JwYiCpj6aL=^>Qs z=~HXBCgIk7WokWE^oF2J?(^~3mT0AiYtcs*^|`n8#0|zdzTFo_eN+Zwqpg0xYD%OY zpkkr^0Qw>Qe0-uCb(aG`^fx|rppTEDxk`JG;&coV)?nbfNgQ$~^k5&SjmA~AVh}@g zXlE#3n!cVk45+_Po%rO-;lN0v?t3GA{9PixWI7Vu2<-#Itx>=#`cp`pJsN__;wX$7 zb!ZEX@wq%OhS$`kXjuY&jE_IAOS5GuFe2kRgww6D5SqXzBw#mxoR6o~qY0Kh-pAvU zFx{8{B`UU4JuDw50;5uD)x>wHCLu}nsHMCg9B|Vle4`EDM%$7^ooR}X@tS#Y*i`6L z()5Pq0}xcwrk0id@??5H+L{LDPVp);dJu#z-f3mU`w)l+O#wZupe|K>x51}IWbIKZ z@%$7j&kt{c`+cyi)MmjHUaVg#)sCu9AD>O7j&cqR;&H~ArtVHW>ElJ|=y7vF0^=o;DtrigU>^G^ zFcncIX%sK#8T?He^^x-p&Pk{4QPu(ocN4czX;5P26kE-$un*rz%|?@41aYB{)3d3M zMT>Qd{cm8c>bOuZHoiD7gOV+J+Q)nA6JE4}0$4Ymr9RHhq(q0oEj7mYkYsSU^$ZA= zf(KCk_A&@6|Id_FQ&A4RVbQZbekv0mR9Ozqvt>PF1@N7!Q$cAZ2%Y#9WmUHd#7bRt za+t!CH+($32^Gm{_gK&juXuj|4TufRs5X7* zC7X(#O@I&S3O9;9x?7HKMcbBPkLGFQ|Om^#5 z_PX2)j1|Gi0_qWMeFZ@^EESQmrhWL)k$qLxu=a!4SJtc#+#O!M>Y7mnGgmzbivzli zIfs<7X>NxVYZ~O&CJOChzX8V6TQ#S?jlTt+j3?ijFQ^Ft2K$oY!TPep{iP#@;M)`5 z!Aj*-yNvH4sLXtKugmzs$5)!;Ez}>OK&@pLP!b)%HLA8$NJo9#qb)xBe9Xs7+7k9} zkNbFeAvLEHKCV-wwl7cm)HmU)a!5P!IzJ(ble*Jcbjrug+Toq=pTV6nIr&AY4g3}G zY&pFs_)W9sTI{#&@JYhoQMc`|pg8Tjb5T^Uc6|IydkS{W!2Gl+q_cn+4#pP3SDe%I zwpX!7i*ML_`Fwk-D$j$&+$*_=BC4ci_gC+&mow#J{{a<_(1SYQOGX!fA9YXGsKkw0 z5iU?&gp7ETTVT|?1dOBe@g2}7FB`sR3(QXbH2m)!up0l%$75Pkub?a7X2QRy8WDV< z0~U(2H;5d%>fR`I9Whh6=Hp!*;WVzBNJBc|Ti-W)e6ACE zTklTPRNgekxXKYn|Dv6?!KXNH8Sb-AxMXu%8;_xKes$*FfbiZmcc%J;56tfEjBk-z zel>N&6|Ymm7n;&zcyUSI=+Pa=myQ`Rq1d+lxcuSQcf|0iBd`1Ye9YuJQ*?yoK%*K@ zsB)STf^ORmE|=q-XAflQ=LIYA`~W|{(*@rl_kx3$YOxZR?jp ztW5%eQM!|hPzXT=A1s1n3pO^3TA=-v_w%maXgnc?`=kXm_Sh95AS2j^Z$K6OEc&2e zDuKg83VYKm!sb5wQ%*t^aCOV70f{fCmL5F@j<}~+*r6z&uJFuZ+LTB1!MGO=j9G`; zA)p99Kh=k_!mX+xRSDFEFSR2fsP0qMZ>D8M-RR+{D3Eu2fU=@!5W1YA{Ce8u#DIwA z3fC~Jjs?UWo?U&ggpE_QU#-QRcx@prq4Dm|rQ~p{8VL2+F?gC?9fEpnHNToF#qq7~ zG)C6Yp?O>n)N+EK*Z079QWG4od85olCy4BczFW)By?SEyR~y<|=6Q(`zUoiJuqshrX$wzvxfHWit~;)&LCZ zdFDBKt1Tb68mfN)=G&_VU=~_%m&ldPHC{RptH(k^HyMa7SOkng8lMdf<0l7VanS+< zrohVwVwTX-;NJ$)NZHEZ9)sXTS{uA~5MEWW+d#lq{|67oP}&w4DL|E0;`M_mLbfx+ zXM<5Z?SV1Qh76$|)WLseVN+Xn1mD4LE_`(Y_66{vA=H;T`#HTBzNrg5LNQ!SR}`1} z+s)5!6yw9x-TfRr6a#1vU6ajZPlN^Lq1XcJW$;Hs@p1P1{Cs05dSq`u*BORMejn)2 zB*qWJ-dSIRj}5~@q8~6eXCjB=^L71!`~Nq1%K=J;pMKZMkpqFr#|MX_4G%K>f${ht zVTDHbOa zG|xd}XNczq`C2#3a9RNwvbQ$z`U>%ASHBHTj)f<`a64qgUiq zka$SYcs%3*U|jxdI362k(+od;JUs4$z?fg}8c%q${2?Rkn}9y|Fz_fpuO3g;v1akB zsZ&Qe10-;Z321>cfwA4WXafGn6|?+&c>;#$NBlf|A}yvz{d{vG&61D71_}Ob5?aLL zz^GB{e)!WT{G4<@Euz_e90?#5bD+a9o;pLqRX7NE13y@!Ha=0SvJFS zjJmiM9x`ckamRts4VE&9AU)}xlW0kqYI>oO)Sci85@I?q1 zJc|;4fZoBm5`-Q;uJj-^lPiI-E!^ut44bQfQJiQCmH3SZu{pNdZ%%&x#%mRF4YVLa z9-`j#oS(-$L?bNwc|X^GOf9lr@bmW%VRpP0R>1lYX`RN}@xSQj$q!>OupSh!R&UT) zd+v>Zt4;b>qSBJ5V;AHla7bCJ>GTY}?B`R{(d1qM2drLhb~Y)@3(Mmx3|}?JMm4@@ z@AF}^Dbe1nVq=VTp?v#KDlfN~nAXq0R`OOq7tDm~+y)L9U;2*myb7$=IJkdVmA{&a zk4n7;=2iWiqyT!oOr5eDv#qAHtPp9x0qS)#{=BK69+l*F6Y8m1)WmrU_+^!b1m|r) zoty;u4j@Xt#v_@ljeP-v>r5Yn*bBR+(nJFjA^ znFFZU$H)_H?ErCShM=ryr!rLsw>!`s9z%Ed2*gfZdyyRQI6WmlHUw${Q|wPrzK^3Z ze+m*n8fSpC5Yy%bhRa*`J^k+U4h8pMYoo($7_AQ>?QareCVeR^m>xF`({I zvMv+a>*wcYqqltp3eW##HoDI~9W&?5!K!M%pZmhAc(s; zKLkN%N3jvSx)UsU|y=RI@LdVd57tivABScg4o=#r<9w_^scdAMS;A?Sv8i9ZOy{hY}QF?IM8XGA*jS$@w2^%y2!tQk;%S`;Qs&7I(}^tK2CHE7%`?X zCaDFBv4?vdL|?q3`=ON}ZvZ3tOBYiYx(UCuSgljwI`QFVUbr3$fLk!Qsq@5h%Ugjw zs5(xk@$JS9E-rqEKz$L)c^Y4xCE&I0qIcsg8)mbgrhKvkdC$|-jGRCYUV_0y26E04 z$|Fx8Pg_DQDIkzPT|$G%8_0=EQTDz-9=a6U5Pn33{yg_jUBoT>tK zTi&h!L6u=hAg^AH`D6cO_#Zb_)TB9#-?|Jwx{@JwEyGm3GB64({#gvqReFGWhILPCIq7CH(c1W^M>CrB?5M5II@p#?%fnh-)sLJkO#gc3qcA%qe_ zq+^t>B39JhWp@Q-WmnW6>V9YDCh*UD-}&auy>sVIIaBT#G$^6lM6Y^5z-7%}B$v2g z5S&{A+4gL3FW`QyWpcU6{`5YSYqPVzCId$;uKDb-N*2SwkYiAn3+{*%Xgm zliu1beBADJ2N7m-S6q*>vcyOgZV1zu_ptfn;2`w^NMPNV_0(85W-kKX_Lw1Dw`|n1 zmq1K=l6V?vWgwUVcv<+$%s1%C(A+~915_>*C|ZNT4{~*exH_n%om3=*A^J|% zP=?fKIQ)|j-Y??St0su=j148&h!u@S>GmE`F>OD3xy1e0Y8fnsxfdI>0FC0C2Vk@e z2Q$oEaRfuE79yXmAV#{1mk(eSVHAXsMrSlbS7(f?b0QDVw&0+st;T{GV-&|RbQQTWqk03vBy-cr4Ed%F)ti8WY`rAK2e;6cT;cepxbg5d+N-G$rkHrs7`lm_?&|2L zip;}PMT41c6yIX#D$aPU*hS5RFhlF8SsI!b9OLTr$;UcuEQA=NGuuFZS?BW6smy`g z$7aLRH`k4VWwO?49)!85p@+miHQ(T-1!ABt&Q*#pK%=?dRl zyyP&7`63gcteC^luR%W_#yW2T0v6e17s7+eVxz?0spH6pLNw1yz$~_Dd7+3@ZyWqg zAzF{6=vI!Paa;y&sZO_mb84(MqiZ`Nnp!KsFV`=^TFENroxEeTBgSDqah1VsUmKuS zYemZ||h8`D@zV*Od z+4XL$0Y$uyvjNn4^ZJq*nzW>7mhPPwwW)oPXzNRLV@@p+VSXDSaI?mwHw{1BOl-92 z{UQ-#5pXacf7nWG0z^wP^@QlHHUpbRXq9>wILv-*yKRAtmJPOB8@07uuL(UWh6$B! zh|rVpBKaOLERFP&*qE>l7`B~09VNr?+LKErFm9^1=Y*GFT4%dWtq9%I4x7dirc8H2 z0i8T%$Ni|7M4+_`M1ir$ek1XmFAH*cE}`A=Qlm`*d)9V?&*J{RI!0wx>3+1wq3~?! z!v|d1e2I#5<+m3s=NX53_u+^4bnUfi>uF4y@3-mu)1tdL zU{l~3ti2pWIK~q5&tQos2N;(QKZ_~zhi5RX%Pl7oRGz`-&WdD}Z}6CNSg<(+JOZoY zGi0hN0G{|X)txDOS%-laJ~7Wy$g(@na>QVsTd|G;UwN!&9fO?ySXRe5+>KXcu%44S z0gSxu9wP^+VuMp-WE*u7INjARF<9%r4_tt8Y>e!nP8r-HR`yV*fw2~LeYT8MXMizy zn-wd&tFypaHXVtT-PAeO$M)w~IZT~rT!|*llT*|M!xxHW->Xzl>?8u0gnJQ}uap%X?j8-GJS2bso)wTi%Z$++ZUqP<>+5C(nm-=TBkg z%!h~Zn>Kw1S$&4EWZ1@WvQ6b%Cca5k7t#V+l@TF1t+CbjU`;CFzxX*FQ-n#ypG>|eAWKH!S1l%`W z=9L6l-TE1_Kix@?(G|o46Nz-+j46f2>c3zf*zDj0j@JLDRYxtB&3(VPnrjwg4D=Af zFE+PC`qaIuQv7PO3%I80H-!AEn;K#d9_n|a`R!sk6Q_?tK!wO$CO4`_z?ebd0OkDy zf-Nfbs^Gxi|Wd|bdjDt>^0wFeNFDOoPz4^c3W$)BZij!yz} z`*&}-Y-M>NNNTu3u2dEv5;%4bhQDameqSoXYx%(O8&df9R=^K0A^T|HGWm+C2vIqD zzaqBuLGY(PR^X(EN>2G#{eH>@4}vqw=XJEerlM7uA$_q@j<%|382XN!tf~U~d)>#a z#sc}TlF8y3$MqAwN;a!i9XzM$8T@-|;D^&xohq!xfekewLYenaDsL?a{uIAjE~@1R z$Z_;+U2O=Z*p%i+)e_|>tBzKinJ8z8x^M^h6^2uPCdx{x9{9SBHf-w~$lFjGXzgKZ zITa5rQ-Ip4BQzlC`Y>t?^}&Ou#{Fqu0u0oC@&M zTKT|gq66-%lhduH8je_xmb@8Y1YPSP0_(^iU`~8{Jf{eTpbLGF<8Bmc?gs1pXaRv$ znmcAiYUl=;YqbPXm!3|>@oTLBxsvj=ID%-6AAP-6j@c6w0;08}7h>BO$nUEy;5M51 zNVM>@qmUF-f%ZC(OLvdjvI7K8qTZ9(5rV#C2dbJXqiS_>1DW@B#t$d36M44aD3a_{ znPEK#IZI#MdLFPNrEQekJzeO-6xrIZD;U1CE`p&DICfX}@%~Da`JQgnd!vkKAj1$) z_H3*zy5mPDB+Pxba1hvR!`EKn@2}mgAftEP1;*KHSamkswBx93N#M=lEz1ImhwE5HR}om|ZvyVXVOw zvgCX<4j5^{8d2veVmyTMoaw?&02;*sy9$Ei+|oZ8;fC`3>IG!B|H! zxqy?=2i0gyxxGXSy15%AV_=YImNMgV!-h?RX9J@@ z(s&LqIt0enT*j0qF>ss*h*bmh0Zr6=gRcmjNf-x=g#e8g0FNk3!$JtKV0eue10%9d^Adx#Mfx_dq`2J@o12ybPc6H_G9%~+%iREe$Q8io zt+dz2mB3A~YH|E zIr3SNgf=xt_7rO!3e1(^);cI0G@iBi^kKE$MBq6ZvB9D5a&hENvP1RrVAZ8KG$c>@ zt5oO!vkv90G3+r9%#b!r!8As8zO1j_)j?F6FPn=k4*il3 zyLl_PEv6ev*N|7=;l=em2wX4&U~Lt%VHrdv1+s$J>CguSvboxYNIT7~vNWV;56iY#j2Zs;<#%L8lz>&6?!NwOwz{udNqew-e zL!TX$apH(Wk;i17IO>q^I7TeTpo2#peO$Is$AOWLBEevj#)rH1LCwp%}$_V zodt%24qZ>q0i*tK-Dq(hnEkAj?cd_fNj;;YC%iuGiET<3v=Uu7fka+3`2Go4?jIQ3 zq!@NbDRQV75A-3pQu97PGLS#+xMVc%7RwIevO@tUVbfm$ha@2xjVp+&5ZFM(Oh^+- zIK}RfuYtPim?U2ZhEEY)oo@ic5rD=Y17lRn*9aA#K+qY$4+C6goA;Oyi{mEbr=YlT zWVJ1fZ{kPmf9mM(EkA>N)1hr8vZc7?(4`U?Y<&)HCS5Io0sRFaHmok2ExK~I_S94V E2Z#**umAu6 delta 40075 zcma&P2Y6OR)HRx!IcMGmNoeVigoG4G@1chfdhZJG5sJ_5fP-$XAss$8L zKoKiN5k#d)?;wJ7?wXkd^L_t+?{j?~-mJa$o;g$Y^f|}(w)n1^<~J`jHYX(~C%ywt>u{Oo3lxmnF}5}Ov}r)OqmH_2<7p39jJZCl9$HWU|nVp9sT^HZATHA`%o zo6{^YqaZ6QF(*5#ATcey8Q6@1f`W`JUf+ivOyS|)Y89T2P0P(lNpF&smspUMmzkK+ zEH@{yNoIa}Vt%uX)SQCUl%_e^8N88?_rYi3-T@=rA0DsZY#yDKpPtbqD_PP6Qs#N5m#O;S?R^O|L4WPDh$OV;Dj*%?jqQ!-MTCN{|~$WP2jFUU*G$xTa7 zOwGtl&CkfqXqwh6_rsw-%&H`;>4K7$utYvX(2Lz!fqX{z_=IrE`<(|yutYe$?+vb`F;aWb1P5H!ch1H!wuEG|jS5(}YVK0ZDR@Ru*bPh|)`3x&6T_m~h; zWT{f=tXJ`q27~k&bcQtzUTpoMR`^~vL`+Y4}INzGB_VzemkA2`>aDF&j<9%>`7+dQddSMJ(=RJ6# zEnDxcb+IsX1FTgxT=*9Tz&C=>`P|@Lelb~o2yvtEjvXD~y?8NAegrXud#{}hq6xED zD*sr}+q2jV{)wR4vsoXu$@}HqU~i4fA#AfZ_i|(Ysi3|~SU3Ke{u@Gjmarjwi=gb+ z*~|QML0`YlUgBE?b$Ej<;9m$jIgb_aFNJr{y^uw3vPyiLpek>&rhL1go^P_DK|An# zRV8`&;a`;{b%*c{5Rr6Y5UXN;4e~2p&)y6B{rx(REi4|8T7P(PNyB(+r=X@w+3WHf zWh3bHQkKbg397z~J;A>fM9Ww#|4z`hWo!WdUjGfG+~usVuznEqSZCH>{)mtx1YO+$ zH@eap!G97op$kjry9K@5g|)NyD1-mpjPDgxzbk9U_X%p$gC*0JuB;*dxm2j#jn(77 z2wK;J)ub1duwT$O-B<(ut022O>%b2P>fW8D@PmT(c4xWvZ-_q3yZmSsitNF{_#qup zG5=l1QON%gRJkW>!~YaCpeO6k4-4AflV$KDg68&O)v0PP7R-+dO76w_@nf3I;>QK; z>V;?gCFpi9)aeP$2T+sVEQ+7hLLg1)&1&*ff>!iq3H&rt)0;I7J%iLJ=jnzYRU_6} z5QFjWjG&Fn*$ZLf-2b*XUutnq(DeQynmYG^16&Z)U$jfTo&~G z3e^4;LH;XQBYss-$Ca!*zb5GYm2jZHg|~280JVLKh1k~-@!wvwcAEAUOR)dZBDw*2 zLm@#2-(q$6O+iyX;{g=1ily2ALUHp^Rr%BA%d9f>e~UT%|3WD8Ggh5j zx4l#EL%{Non&d54XWmX>MX zJFG9W$=_yy{&^)OW^?fAD z&)|RFXKCEuqPW$pp{xYX-|{Nc${N!A)hu0BF{aP<*aH|Rkf}m?E&{7p3gCPf*^o?1?D+(*bqOaDlCOp(4$6D5zhoQvQvbM6i zHl%fH;TJV5`g1L7&%-TBT!+L)SX8)JYkA*1+Lp&z-b+V2@_5VJ_*i#d+w#74tb?qhZE5TV zHb__rmN(*3jNplu_iDW$y1ao!$Rrp*UVg0##cpIBd9p>5HnKJ{1w8Qa8$5(6h6+ce zR89E!D7QjU_;jIh(IT9t&E*b?{*d*MY35NgK4jx$Ixu|g_J?e%%rN-#kJt#FiF)}M zS;#WnkdN6QnGKAlvgc#gTjl_x`J{Y;_;QWSoKM(7URSve)!W2EWj)Y!QL3BRVp$*f zmY{o^SY6q`@bx#N+8Y`?Z8Ph_8(9>YF9PV|W)>?OL($08SHh<(QRW%L{-3gscoXAy zbv}dN<%4fxQOnO*GuhPOg`Xkf0)r2I#@Z59W);1C?|G=<7Uq=Ap=kzB+gFA9Z($)p zEg&nm8G=^FTSCxo)54b$Wc5leNOse`QXnBvfszM#VWcjkMmTB>qY@qCCbn8b4Qt&o5MfNxH zwpq~*YXC4x;M;Ait1L7)YCG%22U;|BJByctz@gsPZpZLC7#LO6VF$YOBFnq(#{inU z10^y9e33;T?O<7QsIkF7T3Ze?IN~d`u;CVMCl)}c^FaS*W5$mzEGa1(Z;gNnRPTPp zUK4zzb_?&c2SIWac!=nYyl+(XCs!ZtD@PmK7GI+Q7hAOOYZk@E(2_csZjPnz>#*8v z9NnnHnzQlLAc1Ab39xth(Dv3Wln#B(f>?=n_r2Ny6G5voABP|7F$if8CVGAEH z8fnp%K0Gc+JW*<=W{K95TI1vMghkmqSvxt&Smv!@HPgjYrIu>A`1-S&en6?VVH0VLfMb^LMch@_B>L>|&kd zOoNxzVR2#N1qjN^RC!ELW%42jRVFW3-sV@@$d`<9@wcqC{W7qNjx`t6yyLIM^I0gX zZ!rm)ZIS0YINcm$+T}aum2(Zg^c~9(d>$HOJJf!19ahPn56wJ^{hpQBuV}dJd$y5# zE$Z?EYi}QM*}@d;=H-eGr(xiLqc0GO^TfGxxAUxeORR zAZlo}TyF5vy)1_F72b~bLOdM`ONLo1!LP9B$Gt37zNN7q1XmgO-kl`*wy_ZVSPRbI zq3JbQNM#iitC6Dd#f77+cVY03_w@Zd`#puI<34nN@0(By_n}p-Hh7=nKhW5F_)fN5 zW8j?oA>NF;F>&aiRaF6yuYXc0{dy5}7vNvk9@nI+Vp$@dr z&4$X40N=3`v_DpG;R)83eL|^>b>*AN+NPV{Wz5&!41-Oyg<)Fqsj>*7RE}=pGs}D9 zW*XmOdE@_$W1mw`j*)q*<$d+vB>siv{r2A|VSQI0gL4T)3m4CsY|BXf6eqqV>E*Q+AmwsXK{9B8T4HW_2 zFJ}1CpqZ`&n4{k5EFVol7~`4=Th@ z_*sMSKUy?vKN}ag8?uT{4Kvmr2=nl7w?$QdWnIGe0{;tJ{*lW?uUy;3^E!y!b zOP0TY|Jn4_?gJPC_d~|8{PY2IEWZL{SXP)HfL9$rxPzGC9K=NaH;Zx)vYz~qMGFqH z#{74S4jg3p{11yle?y-Bw5Zi@Y>a&vajc{-eq%ZI5e@JDhK}T@f`XQ0vPSY4FeVM} zAHve-I52$N?|0Tz{$+5_-`Prj!lDPiqvJRU?gZ)p)0TSwG8c{ggVo}vETTV)$nIs#?K;1mn`Z5rMvrB|tEi1Vgf+E&5aJZg4Pz-b13aT(aTqNqHlX6Q>TOpmZr{llK@L$E_@E z`t6unxOgCxJ=UrK;T}3@kL~q65Jzv4`fjea_I*!?b zzlM}@9IJ*(1`j`uiDYG9JW|<&Rsk-1BCiTTXH>D#6nTtAxs&TR9As64TvcT_!Vb_- zXCn|$+TNpw2Kf(svZSbC@4hJaAduHB+W8lJC)nVte<3j;21lG=kunq*J_Q^=eNQmA z9R}hSjXJ^V+SN7O7S9^lH8iwpqrryT)TlNZa|9@tk8V0&p1=w{(x%@}u++es;8iyC z+Byn?^6Z*6`9||FYIu?b+tDCTQQr_Gr4}GOeb!0VM8*K4ci4XtWfTjHadq#@San98 z!jvt}_U`^Fn2MUP$}FCqXaXmxt!!x8DJ%)=*m}bD@DwUH0dyTxK#3ZnfNBU#C{>>r zKvPe%>M|J$?4hX%<&QRZ(HEy#AWyON!u--{77~^U12rluk4{loxwEd1R9nqXWjf?E zThB(`lzB2ki?rbk>%lW^@|;C0&H|SS6EwNbXW4i=Tgf_MG6xW?6VJyspFh1h1zpDO zBK-IrVHKS5R;~_8x#w7ntZQ)5Ik-zbgI_s^;kdrR-<`u`s{t@-`tNfr-EIhcifV+h zY}rUbi-w-Z5~VRP7Gg_UiFBC&ir^p*zuUt)D+D}(bc!KSsr z<1S(JZv%|5YZPt^jCwkEi51Is#-{IO7AM;Sqp;0>UZC3Z2$dZSr{?`vFQcdLXk*uid+n~q)L)C}xOH_1#%Ey!w`)+C>I zLBPrgarFwTWp{+z!rb!$wFf>;2Nvz z7znJ=xBMD*iv~d$XgajP8meAUvLfK>wBc_SQ70PSo12=Ilb4y9otTrJj*ahTsd6z(?c}+8#<)=2yZJL&r!-v>ZccF;#c4#cahl~+J5k;Bz4^em+ek!YohuXCEZ&uG9 z4m?ahTaHlB)+^SS>#Ut)q_L%^u49EY3c^U6-oMVG!bb!Dk64S1rH_x&)Kf{$_D$|m zIB-Dm&!bzQLmHaS+Dpva`o)sQN#90$>llgH@uC*&thY1DlT% zwMK2Rv76{*9)md0rj|EZEB?4m3vaU7_7mVd-t9fBsyRRsf6}Ir|6;>)5f5w#D6d8}Zn5h2(@OS^jn3wiZF=$+<}OoUd5aB^QT>=Mtg>Go~bmOo?DOV8uvqpiP#itk{q@GR_~F)s0(f;O$X!y3rv4L*AZt!$>j zHSS`b|AN6I?qc8PMVsEd%d#ETOCZ;mt_h#7#M%n}GDfqzD1=$iylh-$wuZ`8!o(b4 z)m7_F!MPB052x5@+Bb{Upx=|2Th4<#_rI=gz7}a%GN!Pv7(6c-UAEVlp#chOflYnx zVbZqHrkC%rrVeY7QC8d)F3G@tyJCG`1*}{T2~e9sQ8axJW=HMsV;c7G9+Omm1dHfc$k88iLOf zTkmwf0r_=GZNtJ?7R`H&heiE=#T9S8sqLq>!AQAOLEG!!E>`emHr2V$GVJBxmYH&0 zp`j{Q!B@iL@3YLXx4lJe1nl+*$OEGX1Z- zP*#r>mJ}s*9Y0(ZR$f+aN=ANeZel@hS{jD1^z6hYY1uefO>dftQ_ZH?=+OBt6@`jN zwJEjPTw3;s!}=EVF7seadm?&Ty!p>c$=NtB~99@F{B;*!EAnvE(PIw79#w&|1#ya&d+jj>wnI;_2hP?e`jk9s+H z1-Va0NuwNa#-EKr@~jX#G(c2@cm1Ln`rg4)<$i;ilV{6c4Q}Ym8T3I;NgQDr-4zW^u33N+Gik~HhDQ~Z2T+mJbBLG?iF}Fd0v^= z^lAlOQ(iFqwhH`7$38#V>_!JGbtjDl$H$EV3#z@-i3m>*A(w;^|doj;!;?-<;_1NJvQ_U9kUyM`#P z#5>A+2Jftd`nqp$aAkPk1A|*v<{jiiU_5AfWu7a2q{ey|^=@SzAsGlfDY6RRAvrMm zigQ)?YZZmYrcp7vT7}o3HC1^>ZplT}c)D#vjXjsQFrkwQN?QIiufZLXrc~qIZ6`Pf zZC}MAxJy$Fscrxdw%y=eRB0&|Iimu2BKJsd#MuCE=pMK3oE%mK7g+UQ&%&RLXXCgAgQL3;022;ljW+MYAz=3CXo-?p&0a45#=rm%z> zsR*Rvn!K(o01+y^(`Hnq9W{9!-b~V!nmkiB2M@oj9mN~U76ums2et%OU5wsVYXw1V zKD3lHD;bw}{*21^=FwRjWR#o+t3;5l6lPK&_+)y?3(F+5RrH+WtQ)*L;6 z56(Ycm1@TFSl&~r-HM1swYjXE+_|K1d`XLVjpG@7fTXwMcoSYI>3ke-jhP)~$77HiBxyuEZ@~vk`Y4`v z;YE_%wc)KpBo)<08yzZXZf(RfOw#AIc?=&e>11tQAV=Vt@e)TLJWP%>xMLj@*C=4L zkG*x!DUSwjB&mA>kEvJ;oQHpE!1bYr)v)WdECK!A7|qkIYFIRkm9(r5uPw)cLpj7I z0FMWTdu~X;kU0SuPI4rHcakN*DE;@6c(k1O$R>c=Byuc>9s`3^$YhSmz~hphPsDir z1jxsA33~e!yXe!6m<6hK=0Q7)x1NMHUD7-CczBSQ1VMR|-pYCkg7T(G+M7}x*3-r` zAqgGQWMDL_u1WBMDF*+Ngc_a-j0YE{Vq};GjMO}lg8WPeKFR2K2(|>ar0@(m0|cJC zK1cZ(D+Kv0|YTQSUq zA-U==e-Wf^vM-?Al6i=H3B-$1?@d)o;f4HVNek1_$Ip^s{z_#n#7{hOwg4`jj;6Q>GNMV&Lhi`m zFS1ZduNr(Ui+2nXuR%~TgyJt>j2~SJuhBSM$&gDRFP7eMIRVr$9IJbbc5Y)p{czkX-qwYTLsQ5)lG>=`8F^*b9iBde8=FQ>hUOt^)3X=Ph2^C zg?tZqi%n1E@>TqONi&b|n$)}jhLzP&V2?v9K9KZW10LtF)|hApH$;?c4PMufNAq=( zer?Db%k?JEzPjigHb@F=#5?-&jUZ7BCId0VvP2d7qdpICSRX>O(Kt|(`uqvUN5+!2 z*XIrFk0E?y3hWaFRUuUuY?Gw*4R~UDeojVCenvrRVs2hW6I>?E%t_44%Fn@yCN(E3 zzgbpRL1r_)Sw*-BKdS5^sABkc-%ezp_JBVn$jKM76nn7jo^@sVXH~smkOFn+@^!5GnyrGJMc%6`sZQxy8~GHkRDUM(ndZ$ zJ0xw&Yte-iG4b!>(OrGHcI35|;v zKb4PRcUcTSNlJYRyTyAz?A9g9+R@eXEQ+3P%6zFuGhS82P*Ltx2HGvn1s=K25J#S3 z(ZS+p2xVo%e}SN@>}N^s3V0*AAH*+`yal{-(68k!50qK{ipgmKmU9O|9DsYY;Gcwv z-^!aFDl=7VEKP60<6Hw$t=}OXG6DSfA7wVmSK_senV|j&#UG}k4=ZRY`Uv26I_xI< zsKUwu-Tg7(vdmb=wULj{F-fi4^Z0n{uTnxiL)C!;|2j+@IBNKWVbJ(IhW)6xczyyM z8*by)XgUU}B5|@b$`kl&ox+cD>ywh=Tk(N`r^_qPlqye4TG5Js6L_|~@?5F%to9j; z1)VRa7JOK#;gzE`aq91m(2Xb@|nH+yGWR>eKDf*WHA0L+Tz%{tLVj zO|1jEqFcb&vs68oylwE89r-)_j-+9oc-z3c;8YFW!C&hhe$;?)SJIE2uzbD`8HTz8 zeE^JzI(9~{@zCH&oq3W&)tXuYufvr($y60OXkTaa@myi*XrXr$hK}xnC4mKu#bW0! zn7P>oPw9d3L1O; zBdb#PZdjyMG`gwXFw^xl_=j%jo&5~1)E&IP!F{{)`m&P2OS|J4l@0#6JJManV4Ozv zlvRPTydThm=kaO|TG@ja1O|Xp1*uo`fe`v)1s~v`hdnU22r_|FdZI9b4er(xe2Bp_ zd-60#D6lHXZ9RE)83rNLK__}5N7ao{^{h?gG?jGl-Jf_)qSXVSqB&oJFoZz;N!O10cjAL2>d^`HsC>eYa`J?kN4&6 zd9p*jD-c#qZL|#>GiFrWpkamMuygSc@egGfF>*C;G0MF<3 z9Nza<*P$Z=u-i}{w)Gq|`V|pORv|C28z@3Qk~ehF*g|aZGy>(|-m$|Id1D7%Ddgkq zJoN}#JCHZ!O&qj(Aa5@7L81NJ8pxmGO&v6G5N{V)08aT#Q~b4>;YT&T0tfv*2u{`< zG7Qo9A_Q;Ypgx0n4Z9`C7AD876m-z4!N_WB2mLyjw~=kYVH>*fY*CY17GaIj7Q}Vt zy;d`fzAxh4WIMCch<9+%7ejbM-qAr1hF}@f$w94$@_w9m zrrAy&SfOc?b`wX9vbrFAXY>573OdZTOgHSs{EVYu+ykv#6*tWaM;GC)l711RJItWo z=fb@Fygz%2_i)e$Lop@l>7Ysis}(s6)8JmP>gmv{@!krW67J)m{=;~FU|&$GoYv!? z)ek}h%Bin|K7~^D*FlL7=WB#Dz(H$fV0l^SpkHRNM8O9-yxk{9dJ|uFdB@hb9M&LM z4|LF(;aH*#c2LL&Ea{8D0rwoi`|}|V@7&-Z`gsJe%7;4W>$2w^I zX#SWz4!Rb!{4_SHjs=Ny!N)r&yBMu<0u;c7#aI`XIA~5WPv#RH^kp&6;*UA#-(o&2 z=yBMnvS@+7m?fg+LhyMU6|ff`X*~(%2?u>XhNlEhDragv1tAs1HpxL^EbkWdbU7uT z3_-{9w1dWt<|2>Q8-ZSU<^HHwlaVSB~zArEp`&x3pp&l!(RftdzB z9FI++7l0=_D0KqQk}m?II~YBI=kk}(b{a02DrfVymSGcNzXRCaTVYp({jNrRcf~ra_W;p{{q__eA>UWF z4r=itu^6BOy*1YItMwX@NR+Y!6`pjhriYa z{HVTfy@N`oU@K)KWEh&h??ZG+Q+Vybk4i%s`d-sjE_UZQWxcnK0$m!~t*#7y& zVDSQSz2D%`FJP1ESKzO0!eX`xU48*$=>ZUG_SvWz#v1<@d1Z%n5Yz!PA~=34Rk!;P z3#Y5i1jfql!XvFi;D0j-pO=H{Ie)&0D)=2F5|H{5s{RjU;Ls~D+C7_lgT?6QERKOt5h)9Pyv*#FL*M+j{{nGb zcX`3$M0v}TWtJx#)P5Fbwx>Xx)U|D&)=+olAJ5_?{EWlgiOQReN!(c|&*-@nVaMDz z@Eqi_=Ue9?sA24!gI=G_zmXTTv2yv+RpCWL=#8#Rz$l=P=U`HP8ThWCW0|-=dj$?P zm-pgV9rWs4b*uzkSy5SkL%526*Bo?pE}Zo`ymB7)EB^t9mb+#iwoPsTBjOA5Fi*J& ztPX{7I9rWE=i^w_`WMtq(XYm{c2 zA%(u2&r{qTaBKM<_`41o`U;PWzF*#^0;;6!m@pY zhZ>jB&s>PTS~oB{hwBS5ym*}Svh5; zzz+nvlkJ3(_BWv(5)WX!l9K{ohLH-20<6-)GufSJL&K>oC6$dk5_-jF2VUy2$W#;*;%NQ z)-1t3dKkD+r@nPw-9YTb%Np8Jv*CbTRJq69rzTi9?`RoeVo( z!A0tvCDut3mh%R@juUSV;xsV9iED^4RA&XeF%edf)hlC32C5T;WE95=49F> zU=KYN7`b+=_XnL4E!yOP^79m+Hv4a=abIBMaUPIc^5M`l5jX-YC%7jC3? zZUsNJrJ5DT`ScJWU`k?AL zO`rzl12rrQq}VJSh?=j$aatqD4QWFV_Kj5c5!ARel-fJzd1av*JI#wrO+e(C^yLF0 zPsdhacH9&gnTdZJ`6~cM5_-MOV`MYnhE96^Z642?J5{HZE?a+#MLX{r!E+411Uu zDy+tVN>3+ctj5l7FK|6gqI+v-64Xb>-B|Vo*T-bKpU!kH@9$KrnFw`;QB7I{V9=kA zhoKretikqfp_A@^!0Xxr!55a}2RZ4nHMlo07(DRSHAqj9!B^HGokLVSPO7yQ?Rlud zZP#LnJ`5O%nY0!MJHvsI$9-#28zT&MuR|LjX>ikZe488vj5N5{W7A|bFrEcIj(V@h zE^9FeM0RgIn&+6(-eB8mjM;rQ;7n*Nv|vYX;4S4ijdg1pZ|LJ2@T3U_hvE{GEHSuv zBi8d1fe-rVquccx;Y*J}#)FP;#5Ct|Csq6q%V_HfkjP^6r`X$h(io(ChTBk+O6&2# zN2tfApqOL|{AnkB`!UaU^2y-TWCF8=q@XDfRFhI9pQS6{MH6>6HC^P;Hesm-=oa9>~@a7YUXPj!eN$+NIfA7myHTgU^ zBviHPpqaprlJG)V=$THvIFc`dc%js18H$&5wDv5(RCRq)&IWo0 zC8Z9gmOUww9M&9dMt3*!nn7YN1obEf{#x_!qw+Hs_LIa~!RI?EVKXkEyaEz<^k)8o z^a7(6`DZvqT;QbEpYjQUFLbI`np?<4Py+w-8P>OiBKwrr0=%q_9k#y(W>x#DF|J(Z6LIX!9|OA@LFMFE!an1unvOGsAB)uQZ-1dFEv$G)&~5jGF`80 zF@i?##|IMlMyGnAEI?f=anrJ$*mbi$gb`@nL4KqiDbQOn(?#vR;x7ARC~@SYx_^C} z;u9y0_!`rfP2fK<{n=&>Y2r>y+&=|IH~9QF*w6e77zGbp5GJ-jc$ACJA?REvwx+kz zo)GFkN?@OQE9B3ebZ9%ryWw9zK=_}(L3j2gFgo$`-}0;=u?>QXOCKL@hoG{#t+erN z{EB~EUF-l;<{`?Ae+5E6a!09$d=26&;~_f@R73hV8kTp0U0^VDt@s|3-fw|%O1FF$ z8hPd}EN;F7vC+Bc2Xunp8{Oz#m?8e~$gY$85g5Z={14ds{7LiP!|w)?|F<~9-)-y) zuDj;QQ?Z=Or(EZ}1w%=oM_ba9lmgvyRkKK+)2&$pzrt#O;i0n;iR#9urqSfNpJ1J3G^xS z%6m{|r_IxE?ZMN}I2X?R~&p2tyUS8W_oijGee#Q32d0hReqE!(TAXy#oBRndV*v#6Cj6e(ZQy*DzN8$|uUdL1IwJKZKde zbtip%fH#%@fJ4FbK923$8<=Yz;LRM?O=I}hakTY+fiVGicz_32OU2<09I^B~$+~6C z_8mu-Z^I>j!_~bzilem+F>c*8>RNwb2)+l5$GHAN?(Q30@)vIqEFM5m)vTAK4dV^FdNRcyemf+Cre~m_1P8ZGm1J_JkE~@`0j|~!Tn5e|)p2-72CC2SihOem55NuF^+$QSug8`==xVp$JUdC#C7H(4?rF0gr^)vuq-#n?Ig68>+ly#}!G1y!o3z%Ma14fhh`~nsY-3`7Bp7(H3@J0OX>7u3=asRNF zi=Mg&|LyIfH5bvB_i@o*7jbOU*F`liLEq0sJuhLquD^+6*Clik1I%;uMp7X#M)oR~ zv9~zT;7$q;GI;)FEXf8Nyyr5G?uvjh`de49Xc+>G339>}%rJ%;{KOUP1P?R#>=m@l z;Rg4+%Et>n!sYcn7~pBEUV9%2#RwN2yow=i6fhFuyoSt%@-(#@*ZIe`AAmyo=uc8`t_Kpws#rjl9G~_tf8sE{ea-hw#T-H2*sK zo5zh8={9=xI@WVfAQF(Cf7BYq;H-aeQE`%s#{7fBou^#%=0Dgac^W!6>gj*53pCl_ zPB*Y|KLt3@Npo-THuhBDXUxzwO+hEU)=}ih>A)Cuo83gqnPK>4okX^L1{fP}H*fM< z>{&{jiJ?F9Uz|BT=b}ab@`e0)7bV`}GaWNwr#9lY+~U!JFF;U@Q<2t-_)&*AFSzLD zElzK)4eYK zm@nT`9KLU-zS{9VFb=5H*@#>XjJHMf$2mT5(bJY_Xs-eHf$0SCG7X+=iFmmdHvRk`Qw$Y z(vN|B1d|V4)I*9i`(uT5*U3L|(FQ5{25thSYEys0U^9d+7;ZMXsFp*t<)6CL&3byt zA;RQm&_Pz8U)eh+oH|4@DfkvWI|!ir4wTa8umBO|6rY8Otq|0}_2~76FF>S$*y^Hv zwON6~`Vz!sC!KVP#&R1l_C9O7M84b(jKanUS%sc=iAc7CUVNU{q5E#(lwU!)15V=- zz4_NJYUmcj1>Xrmorzt+tMc|Yu-IwJ8V9c#_AV`($;`JddeS4J?C-#RTh8WtE$i9V z4}d#NHs7e~qLd1vn*0$QQrEhIc$NR;qEi(_oZJoWCo>IDUkb4ID7kc;YouPxDG~v4 zuZ~QO!qxQm0^~ju(|Z-gV*ay>3VcN~`3pGU`M#otV?VIkBf$mA5Zdc2eC4lT_CI<~ zh#x;-Ow1S+YN~u*8{x*$3^WJKNc@|EW{ffJrYnnBc?!fyU8ndcPh~O7KCOsH)q}J1GcNk5ib%50 zLUHDiBEvqXWmRwdyoER8wD-$J@=(h<617u}0F8pt%`k(DgGD08romT4i)uy1vgC&6~lN%H=PL;ae=<&qP6@WRK!1DH^qdZ@9}rj#4wRy zR|1E{2$Ex0HgGFGrcgy$D;DqLRs~kM(I@=sPLcLO#ipB+!4}ogZ3aNDhU?XMtDUA* zN2?A5ffIf8&RdWOg7BzBf+47+1i9(g>Y}p@0d~46sfOrKDYR6lW{CQsG(A}a(K|I@ z7X}?3alASDqN?GdrmPMEk7)RYs3mIvBTqxaMQ0xFrq9DggdG7coW>nOLFv9KQp+l@ zvZjJ=bKfA!O;1LM?lKx&JqI0#5WVeMz;AiyZ;23AjGKB!iY7c3wHqlK^EkYP6p4{4 z-c7EWB9GU0Q=6Ki1+U|#MK#4hp5UfCHBlXjZpw}lLuC@8nv1tPao8x64X&7l&!(mT zC#WwwCGu1^wQnu*WEv=R6lMFI7OiQG;VK>M0bSwx+&G5(+lWez46v#%D?2>46parL zW`fUfmkuQQMc9h;u)A>JRmCi*PP+8Pv$4^bOl3nxOGL`T>Bnf{49o$cN?l#iw{jt< zYRYlbg=o=I*445)3s05x3?5et&8R*wO8z^=HvqTe!AGzP7%iJO9BMLy4WQ@>d8vTTYVy%}LkX%sKeTns%EhXBpov?opsl+9t#)km#v zqInB9^^HdhYzYpzm=%u*Te<0rco8F8gKMRp9aa%H=f{@d_FEf8X-AiB0da#X^%f7O z9<`C|cIAk*wMB|-4+8zw$=aetXb0f39<~b#$La_|6-)lsx&%9 z;6)nuD+?m%_Y~2d55fy(sR9=<+_WZDG!H3)X<3WpLm=orN3mX3p_+f;V})&oPbfhz zI~3Fqv^p31pLS`Ympx1ok6IPF-QjNfH%-LZBcK@mNReTW)UxhcMgbn9ed);WXgBRn z7rC++6fP-DZ7FI|T83yM#~5N#hUo7Y3#^>`ScXWK;~ZehNvR^V9tu7z3p168U`kBS_LzpcBN&?{T00&uHAeI`>139uB%c8DxN0?#PX6S7 z+9;aVNccIdNuZw8YCryzQJWb;9W_G;rHCAXmz1A|<|*T1lNCe&tnBY(i^=vBtIr|x%ca3kx;geN z2v`THA!D|II_f#4Ho8OFSx;24=YpAI4CfiB#+LbjPii;8i+8T7>gXZCyrmw`Unz}4 zSIm?3MJ3w{<`omi0t5BK7M2LD4piN4($>X`x_eSsvO-=bg49vuGd(oj?L&=TH(@V1*i$`g$o@0KbMT?kce0>^w0%)4$%Y$CeI_YI!e1YOE% zw>o%>w?6>4TIWFUHEwnK+`wK7ZVg4M3R`E?fO5TpZu%f!B*+aKds7Ftmm3XyeqcQu z$N(el6Pt>z@*{)yHWhs;eGIIURyML{(X^&`r>akZs4YJMztpsrr3IKIZ-R`5eX>Aw zacl-I9p^IbPa$kJ)$o~tDpgw)bkkSOL`&b#jk$SFx@k134ybW+Q7LdMw5r!rR@N8z zQT@qQHw|kpCh#xabhtS>|83yV-&ARVL2o;7SuZuSg%~V%fIxSsCy-wOqw~WAGTC8$ z{m8Pv+-dO1mZG=(1{kxOf>s!ob^&ARHm(&$^=}QYKYjEaFrK)-m1r)%2gV$r?3S3M ztx+P)_Xn^jg|bfPT5A;D;V9KL{Rqtu%7<(6pWIYq9&65b>pBde$@5rj;2!8zmUrW? zwHH6?Qa#?~#%uDiA^RY!Yi6oa)EMW%zr4YNI~6`oZ3l>E;ic_T{9GCd=D;i!p46Y?f>)?eYs8$Z7A$q`VS66oER zQrnAEn$u0B<(w)Piv^RY|JPXBk1rQnb2{#aJurPc5G7VA&(uO`hZ0vp9nw$`pU_Me@?{Wn>u0`u`(>hC}=J z*D*bvncF`_`4T2yaVACa);WX^qU|X-!w-F$`F0oQ%g279GP_fAu6;`Up+y_FCt2HF|W+YA^LPKD#;%+X5{dq34#AB zR(vbu(QtGLrfL^af8*&g1T1USuy@5k^gWSR0m~v+=~iBDV$Ppfg0sZBbjQo%qe`PJ z`=bWEcz(@9Z&DVj3~Na1Z;;n?$2;J9xwy+}tmT9@V+IwDYC2|g;qYShFnx4y${^nQ z2O(4&RasT%b;vbRGkR>{_@XR8RUO7u6-@%A^uP-TqZ1k4w!Kk4Evih)eI3W-r*tH| z3Bwy|Y8~a||C&Jhx?_N`>VnVP6c3+-L)2SP{;TKz_H6}q(M`RhgPRoMDf+EoI8l}V z+Y{sBt-Css|LRT^aXb7EDkA@H_WIdzdP1QK*t%CPGy?e8KJcn#f%SUlmg6aQJR~Cl}^Qf~Y|pd!)OpV4%9zP|?8nqq)-8z+p!-xSz+{@=`t9A556H&7~Y!$>?@nY9K2cIQ8-X zS;fFpmzxQzs>i$VN&{Za3=v*Arz8W3lLZ3J>?_9o{kdtRih~q5i)B5lZQK z<)1x%P12=^&3et8W2U&@kT1I<FnSgOOyUBP1pS@Y1*YeG>!u-olfk=aID^Ij6q@p$Xp3HHGIimY7FkRQ8O zOV%}EmfuT|^$hHCKSS0xaL)bO(rN(wjyK@}P8Awzxc@=1!)gSWK&T!o@6HdHn>gnr{{rNyut;W2M#-ErVO5`Wrm23ch$cK%1(M zaKx(42su1jg}o{V8a%lwo-oKm-&SPgZp^6~r1S_^1MfkDqu9n5t5J*KH zT2&3-G92om*Z|g94l|s7+;Ct#!wSUzMrVYF`UK+tK`_!o;TbHJE(Ee9ISK}-%kUt4 z3VpOkeRU-mXD`e{Uj^X|q8QrIwA_R3$A5$HVbC$gIz5=ZD8~Y)dT2*5DrlU+JOtl| z9}f%<>=%L$3{Oy)_W6lgb_w8U11AEuG4L_Kb{fjZ74%SMD2tL$C}R_ceA3`>d?`>) zGWa`uZdpDB3`f!UX@j-RWMDjh9zI$urx<&Ury9I7jK#@m#y%(x@k}>-jq3O={0xOD zY6y1JpHU_%W#+@o@>yf{U3C=Na|Yk9&Twe|yfXCYuM5xAP(3#^7eNBI z3P&S*2^e|Y6wXrl%N{x(jt_0m@=!qpYbj?#hniRrfqc#ZM%nI-V2$NmV7G_*Mxuoz zMdEWA^Bxh6h%AmzjtfE|E)arvw+oDkFuWOlZ zM6v#XZvbm2#*g(T1oi2bH#{^lnq|nPkWp2uqS;`%%mnhQ#X8!{75`t^+bbYz-!XN; zS9)kg48BeNmWNKpu%>dA37Ztl!sOcqcZfwbzhm%}SXNWM3*6XL(|a1yfml{wz7Gsf z)1I(eW7K4PxcC5ArCXh1@-+~2<5R3U6rc{(Sv7~X7UCL@-txkymt6sB_~_kNPc$*& z$6M=+UXAGM4OFuMV-;_00EN1Vi-*H+G`M3tzBT%x!3*NCd;XEZ-rC54^)ZBbR8WU? zwLj7Du>>}OZ}QNE1Xf^g28C-3UxBhd zhv8iFmBp=qBdH(-Uy}Vo!{<`)x#BMY*PvymU<}!2@Wm7)V7tMtry1TY-k}GXVCs;{ zJn}1OK&bl`_Se7*XlyIA`JI4gXniW)2>AxEv10LJz^?z?3^$LNQ;jZF4w29+;4Fg}miQ5kfqK`^LT7CpZ>sQ$RNnvd*cLU;+J^JFu9)tDP!(L!Cybse^ z4BzLWKhjwf{zTZPjGtim+3R^V3R++3dKj0zCWcl_%aAznr9Zv&7 zA_iw65r>TBtSpui@;k6{7`bQm!ox}Qv{#8EYiL#K2Ej_XN9Pi)AlaNp7 zCT*VrJgS;l6^f|K92As`#&BBesaGx=5qbu=EI<4#1f3Se)++tNNiOr)=OCYb6b(Lk zsAM=oUDhG!0`Q|4E<(^TTqw=W`MSu>C9oGwA9ES-sE10_1H&xErz#^3Ee=vb<~X!iM;NiQV&f$Nho-2T?=j zC+~yD|22p;LKpl%V^urUE<#lJe=57~xTucp@7%e2LA<*bq=Tr~78S*=v49GSiU@*T zim((x%Ce}a2=)^Ds$)wr@1++tFNx_fFE5EPz3093#5|Lj-h1Bn%VF}FvHLkLr4myAx>Dy zDm8kpPGJ#-t{4ubK*z6*V!)-@6qchICS|a1NN!`TOAmsFA&xKc9p_r5S9a(Np5n`I#)4 zX$dBooat-p1!97dyf;Bpeunl@!H#9acwVn8Xp8Qv2(?+P+2|+v#J5>&jOH{&@+{0( ziORoV7IPW>mH)X}=$8W&-OOg&je!ay(qbb?@z`=OY7J8Kv>aBh4K~Gz9B8>tHpO>2 zY^^Z_e#r0pi%=#*6<_FLcD*r7;WLX7*KmcM`S?&60gQr_H@8Spx-pUnShwUePZS>o z2leYv{MSa~NA~McrnI0o2JX?O7*c?h%VoeQ&XolWTJjY>QGoTqIA9d#`2vVDUg55V zEXg(jc$&B6`L1*ic3eaXoRp6Ia!(~cjHoH5_xLMO;%p)7s7*AXk(O< zvX7C7nrPXK<;=b!EN9Z-Mj6~w#FlC4rh0EXehG_VYbl$p%`=5o#&Wg!rkGd82E{Kxth5a@AOGo3TZkW- zJMzh<4~!)7QW=&Yi{M^p3RcdR+7=U*?Oe+@#lCWUO%#~or*gEpLSz8SJiM#lafq!I z7~6}$TPQn%cyA28DqgK%BeY_ZEUpeTXluM!dfHroS!&2?T#9vYsSGF1E=8j*BR^9F zSHi|-xhd9HqLoyDMpi7liYF>rl(y6q=PTJDtRrp_Jiu5YX9m`NKRj{#HjlNKY zRd9_dKCVKas6}5}1~ZU#rr5rW&E~q>6vL~*SZ|7|YBoyqnBux>Hdbpu#MMwgzZ@l9 zgQdUvb&bB7- zu2JK|T7oj?TC*um*Rd9@#m^Zn2CraxcfJlxXzX$^LABF@KYcxZNK^7U^Yry@)`1xt zKv-jnyX)Dl#zw-rsPv$1Y%;}B54%#^Y>LYo*ePv`DL!jJ5o|Sub2%Gp+XmiBv2-~! zQ*K9Qma`4o<))a@#CnR76>PV*!xXDm!V$5OEzx#L#};juDfC8mSlexis~TCVV-F(n z_l5z~UJ^oG%WB+>nJ^hvj+fhe!LSEqw~EaR()Ypfv$O;&+-q2v<~7B(H7KP0rntC< zEzl0g^fzb+P4QF{+olOq%w5ZxwL_R1*0Mb9uqg&Lqgfv@#j0k6J8FtIno()TOcC0G zEMH-YNiA3@Txp6mEocQ-q1m^9|7uhG(1J=kZdwy|u&E5g>DNG{n0*Gd|e;ww4 zzbgFPI?RgKDxA83^%5i3!;0s1rkJxHU-#E5kDv|sh`GVflxp0l@YW4zXg8VS*$r%V z#Lb{t1A=}F95lY%Y>LqvQEj&ZA2-D(8`;c=+X5L+NRM{yZZk#pCX50n72_S7@VRpe zIMWorZ9)&Z9T@dKelr_x{tcMMNE)BSsX}PkJ-8WWaPKh5OjoG5e>0|nJHdmoH)RXH z)bCRG*cLX?IIZycEwJi%w<%_AWh3J60nKWKw5+`wZv9^TP%FI06xVKL9~t+-jcIWI zHg-(A9|Qk(*dBbq6lb?%a()ngNNmOB*p+xl;piREj(^4!Z|%hBd3+}v4@<{d?eC_@ z-^F%lkDxeqp%wna6ivIam-DC!2;KVqjmH!&+>45OT;XGTQBh|Vew%onP`J}R@SIb4 z#y;>osqpT7SPVR+@X!0$YU62OOm<2BG; z#ngt&6P*vCTK}ndvJbJn#=n3ujed9tD}mR6AuLu|*~S}+XWe18(s)zx{C*e>@-0Ol zeT1!QejAw1IjBj{a8Dnv89s|}I1ri%l}k#Yem8i?a}{ep8zutO@rHFYq`!l>7#6q` z7d2=)uWAz)I4(Jz8KS=nl65>of#{?lt-7RsZiS~Das?{udQZmhP05OArg$znIDH=! zI(o6vrjr7B_L1(cSw^{_qq#qb-g-LX)XpOY{|Q3Uf90lgoI%YwuHu?9I@2j>wS)Ts zBA`et5hzy~^=WktMOC>qpkI=4{okMj7M46Aad`^JBp)$flDi9Sm}UO!!9CUEsm-dc zqU$*-ggWH;unj+X6Z>peaf92{hWR5fTTOs!05#ZdQn{h~(Kktc!|M@ugR|s!HO#?{*DyN=S;maK7~kxECW)Do5)e z3ddoRWg>Cw1igg^`zJW{PXm~(vqo&0jo2cRPqSE+?3ag1;y!N^s#9PnZ{y+Z(8zB}BXh8R+#%VY zIsHon`~rVg)&i5GhN_foXHh2O{Gs~!nr#lwqbruVB>mt?7B+@H=u`-&{#Bcpqaczc zenBasE-06Z&kH;Vlt>ATXiWf&beg69IrXpG#6?XLV}U#s4;9ZB@-W@0eWO0oNHtqu ze@yzf2>OjLgO~$kZ?=L~$)H}_sZi8My!hff7UbP?TaftiE*6EGnBU1%y^&LU8{f-V zyuU`pdb7udN6P5^{j45M>7{+@xrOP$rM+0A|34!uWa^C{g*bpBo4)k zoQUjQJfe^OYXApLq11$|g39nUyFt`;L-Bs=Og%>B6md*4!?a3jgI??G4Nzw5}Z1fP+-TWA%1dA8Xde( z!pUfTuB+YySuP#wSU@1^&~&h!QLn}T-|#rKrrsmIJj)_8H89g90IQ48Xk--#Zp_e4 z60}pRPmrM+-z+3YK8+)|f7KaF8&Tn%XFN!;3Gs1}d_rAG-^ zrEEwx?|qrEU1>m<6%2o;9;7@v&Fp6cD_A!wdYlTTbW^tn**~LDhy26*7Bv)3`Pv9c5uqxMLh;KYKn7eYUBk1U)ehKE?~A=Au+=#yO(NG z(_N$_#G135S}45z)zAw*sv1P|aBhpI>6V(tAPe}bq$`49v9%eSO<@G>QlUcs@W9yG zT+y)N&?CSUZpR)^oWUZ2<77ijomo?j!GgvL5+gZz$jDJchD;uqIy^lUCY91h4;(#s zBupxe8a8s+h}4NgM^BolMNx7T1r>~nrt|C?H|Ay8prhdvWv82|_#A^)=$OtKRtB7U zjPz7`AY$!uJ`(qR#T<5d`Ngfr!9P|879I0gZ_)iuX4twBQD(bGybRykL#Sg@eW23i z(r2v9Rfkq_`gtF=g+{l!omzK9;TL~^0W)RRiuq5N`?vEq;J$yt4LRftOZ6HpOUju+7?Sh@J2iyB$p6Uhu-Kho#ft;H z0qNz?65;UIfHyThBBr%O2l*4!`-3e}jf}cb>W6(9{lG%99P!*IFBf7K0j-gbf=u44M*&_6`u$Hy77fN@c_G!L(!vVkA*O>|*)?p4oW;FulOE3NTch zT!%Xc=ks`mZ6Wc|V2$19MJhhUn5=Gjk9Y@!vi-e>hnUL6s$GCLAi#JlN8%>I2wc$^_3z#;#dLq1@T!CuQv3R z53L!TFBdT7dxQM?=;igi)T-$6HGmAmn0@`M^LQuxJwu-mQcuM#- z&?ygF@n7GLAJRv(O$;yR(~ZmFM2Cth;RlQz3NLr@CS#|whImtTRzCZt7BYi zZ{nt*?*@IB7*NKy7<&LA2gzyM3%pglyO#H~?E}0ZZYk&UHLu;W&=n&3R^XB9j$JrL zkoi3TF0X252PNEI!57(tgcmD#xp9c1(WwyKw!?(Qb4&3y|A?KQdW0+6@b6UexCnj} zzLeJ^_^%(s59Rf!I9-YUcLkhBlw4N=UJwJS_}cKR04aog;C?k6dobu-CC*gg5#@2o z)_oawYuDK67M{9xqpV>31)kSPsg1u9q!na0+qE)?QO)Ptu9I*{H6LobUcw{Qct~{v zpjX7!@G;trsz|D9@Tlh|kZ%;1*YIZTX1llP`3R9v%U7{m#Fe!$1$e6rf3S`(v)v|P zu$xb1Cq%ZJJ0nhlLOB?UtZJv=kZts&*z4vg5x4t1Wr6$+4q~|7uJjP;_57sm4iK&p z_tf*zF?Rw|ucMeKfOZ#tWNdeey_+z$o`(A_mC?His_fqb`1kg7XNuh`-tzDS<37pf ze+QZrq~8z9S;g~!s9nL6A|3>V#HQ~R?IAd1LJx|<23{0?#^*_N{bBr&*k{B$tDvy| zhX#H%9{q1ziH8jOBcMMdo?gzcVgC>ZSK+;){-}6$HD4UbAA=VqAlv=pzBnH9W&QaT z{C3+}5FZuYpq3$)KLKpzokD2m@FPWfLgoEQxX;PFv!^Jf-XgLI5AgM;i7pF*J#%m^ z&$m4b!Ua*h7LS#llVMuR!O))v#VhV#%i|;X3&13xRQvZL9F)lyD3d2`FG;@OX5KS` zzZ}T-3LK=H=Vi&qUKM*+^EBIQpx&k0_CEo4iMlm>o$X(edTKi#6|B7uOr1EXiRXpC z0SBc_MEyNrfuRlJYb zS;b?A=9Qp2Yv3qzwIign3lj1 z%KIek3LsY?ZEtgZfDklq{O@@y*8dIu&Au@ITPhaF^%br$Uk9}QPjx=k~vQtXv z)IPM6dcX(~>)}a;{t?1{D6Yif&h|0jDe>tBD45VMidCC=mhBUe&Qa!jMDkC8{nhyy z@#61OUrXQA%%6(ZKL^FiF0uLx$lJp!wRHs9z5vTPfz~qG_N9c>28^#{K-yAqUQ&Df zYj{{4hT4(#4Sr;Y`C4_DZ{hw%4Hn-KRD;F$fSA#!(v2S^M{D=!ssAW_Rjp8YQIfQL zZYV8vx#QrVyLvJ0@tO4#II-$jxDL8pepc~pdlGtoe^K;n*YQT%uSAzQO8!lfTdSJ{ zrQ4G#X6u2|Oi+E>=Q1HSK)uG1FVmg+?=n6r7F#>)wC@r#xAPIf8Uv=Tg+-TdT6b*X zFq)u&PGwF0I>!(7GFWeWXg!`5>TqNE+WirRJE*h(OmxTv7_w%A7bbdn)y)9*_!dq< ziXOR@cQb;4p`Jr74B9JvDw%aNLV%&hMB)y>xb2OVefMC^goA{Xt3JFh?l?iM_w1mP zAN2#;lc$0~iD$Y>DvD_Hb%v|D%v0V7Dt&;c!cmWJQhwCp#B&L}Jv~?M7$l<`FAFSE zQdEAhZ|^|#=;!i2Z%1IP!e80S*BYIGVQ*Dl@9PZQ9;Qp_WnmXZC)^wgY>7u*j!uRG z#lyFo+f`2wP?VtbiP%O^-&ulF?~1rQzTHZ&$<8=Q?uPkun*?&e#@|%Y39qC56%!_f zk?nN=Hc+u$8@P9+hr_!RO~e{fs5t3S&LOqFr=@m>fTcD)o{Ngft6pAIRZ)U1xsojT z0C7@HRTW;HAV=cVXl$9wr*RZ^Qb5@8{&TztBx-$ePyx}pG}qlY8OB$NJ!#d&H6<{g zJr+c{ODS8mcs7BBIr>m7qIMz?0d+_!`6ytlgC&jzhMu>I%c0&R1{jL4ZoV9gu~>B9j`|OKHO)32l?>`-hXf= za1#Eg-J_7?&N0rv0w%VZ@Rj-*h-HA7wFCPT9|>qc%7VvChp-*OY%mKL3Ivl5@qtD* z@KCiWVdN+*_Zem@j1T$|Q9Kt8suh|fv^+Rut>mH|!hDS}2ZTI_m~a@MPIG}_)KQK! z^MEk|$u>S87$eZVhjAZyfx>SehA0aa4nBg<*hLDDJAxJaVuv!aYZfCfR3I9?wX!{Pg`!W}9&iXBQs7w{6Fh^4@I z4@@DrR_2g)@Dftx_`u8IM^kVa{!;~L75I^bQ0|cSYnH-YfmU}6N:Add (string) bool System.Collections.Generic.HashSet`1:AddIfNotPresent (string,int&) bool System.Collections.Generic.HashSet`1:Contains (string) - bool System.Collections.Generic.List`1/Enumerator:MoveNext () - bool System.Collections.Generic.List`1/Enumerator:MoveNextRare () + bool System.Collections.Generic.List`1/Enumerator:MoveNext () + bool System.Collections.Generic.List`1/Enumerator:MoveNextRare () bool System.Collections.Generic.List`1:Contains (string) bool System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalComparer:Equals (string,string) bool System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalIgnoreCaseComparer:Equals (string,string) @@ -178,17 +178,6 @@ Methods: bool System.MemoryExtensions:Overlaps (System.ReadOnlySpan`1,System.ReadOnlySpan`1) bool System.MemoryExtensions:StartsWith (System.ReadOnlySpan`1,System.ReadOnlySpan`1,System.StringComparison) bool System.MulticastDelegate:Equals (object) - bool System.Net.Cookie:DomainCharsTest (string) - bool System.Net.Cookie:get_Expired () - bool System.Net.Cookie:InternalSetName (string) - bool System.Net.Cookie:IsDomainEqualToHost (string,string) - bool System.Net.Cookie:VerifySetDefaults (System.Net.CookieVariant,System.Uri,bool,string,bool,bool) - bool System.Net.CookieComparer:EqualDomains (System.ReadOnlySpan`1,System.ReadOnlySpan`1) - bool System.Net.CookieComparer:Equals (System.Net.Cookie,System.Net.Cookie) - bool System.Net.CookieContainer:IsLocalDomain (string) - bool System.Net.CookieParser:EndofHeader () - bool System.Net.CookieParser:InternalSetNameMethod (System.Net.Cookie,string) - bool System.Net.CookieTokenizer/RecognizedAttribute:IsEqualTo (string) bool System.Net.Http.Headers.BaseHeaderParser:TryParseValue (string,object,int&,object&) bool System.Net.Http.Headers.HeaderDescriptor:Equals (System.Net.Http.Headers.HeaderDescriptor) bool System.Net.Http.Headers.HeaderDescriptor:TryGet (string,System.Net.Http.Headers.HeaderDescriptor&) @@ -208,7 +197,6 @@ Methods: bool System.Net.Http.HPack.IntegerEncoder:Encode (int,int,System.Span`1,int&) bool System.Net.Http.HttpClient:ShouldBufferResponse (System.Net.Http.HttpCompletionOption,System.Net.Http.HttpRequestMessage) bool System.Net.Http.HttpContent:CreateTemporaryBuffer (long,System.IO.MemoryStream&,System.Exception&) - bool System.Net.Http.HttpContent:TryDetectEncoding (System.ArraySegment`1,System.Text.Encoding&,int&) bool System.Net.Http.HttpContent:TryGetBuffer (System.ArraySegment`1&) bool System.Net.Http.HttpContent/LimitArrayPoolWriteStream:get_CanWrite () bool System.Net.Http.HttpMethod:Equals (System.Net.Http.HttpMethod) @@ -232,8 +220,6 @@ Methods: bool System.Reflection.AssemblyNameParser:IsWhiteSpace (char) bool System.Reflection.ConstructorInfo:op_Inequality (System.Reflection.ConstructorInfo,System.Reflection.ConstructorInfo) bool System.Reflection.CustomAttribute:IsUserCattrProvider (object) - bool System.Reflection.FieldInfo:get_IsLiteral () - bool System.Reflection.FieldInfo:get_IsStatic () bool System.Reflection.MethodBase:get_IsPublic () bool System.Reflection.MethodBase:get_IsStatic () bool System.Reflection.RuntimeMethodInfo:g__IsDisallowedByRefType|79_0 (System.Type) @@ -301,9 +287,7 @@ Methods: bool System.SpanHelpers:SequenceEqual (byte&,byte&,uintptr) bool System.String:Contains (char) bool System.String:Contains (string) - bool System.String:EndsWith (char) bool System.String:EndsWith (string,System.StringComparison) - bool System.String:Equals (object) bool System.String:Equals (string,string,System.StringComparison) bool System.String:Equals (string,string) bool System.String:Equals (string,System.StringComparison) @@ -449,9 +433,9 @@ Methods: int Java.Interop.JniPeerMembers/JniStaticFields:GetInt32Value (string) int Java.IO.InputStream:Read (byte[],int,int) int System.AppContextConfigHelper:GetInt32Config (string,int,bool) + int System.AppContextConfigHelper:GetInt32Config (string,string,int,bool) int System.Array:BinarySearch (string[],int,int,string,System.Collections.Generic.IComparer`1) int System.Array:BinarySearch (string[],string,System.Collections.Generic.IComparer`1) - int System.Array:BinarySearch (System.Array,int,int,object,System.Collections.IComparer) int System.Array:GetLowerBound (int) int System.Array:GetLowerBoundInternal (System.Runtime.CompilerServices.ObjectHandleOnStack,int) int System.ArraySegment`1:get_Count () @@ -463,8 +447,6 @@ Methods: int System.Buffers.Latin1CharSearchValues:IndexOfAnyExcept (System.ReadOnlySpan`1) int System.Buffers.Latin1CharSearchValues:LastIndexOfAny (char&,int) int System.Buffers.Latin1CharSearchValues:LastIndexOfAny (System.ReadOnlySpan`1) - int System.Collections.ArrayList:Add (object) - int System.Collections.ArrayList:get_Count () int System.Collections.Generic.ArraySortHelper`1:InternalBinarySearch (string[],int,int,string,System.Collections.Generic.IComparer`1) int System.Collections.Generic.Dictionary`2:Initialize (int) int System.Collections.Generic.Dictionary`2>:Initialize (int) @@ -478,19 +460,14 @@ Methods: int System.Collections.Generic.HashSet`1:FindItemIndex (string) int System.Collections.Generic.HashSet`1:Initialize (int) int System.Collections.Generic.List`1:EnsureCapacity (int) - int System.Collections.Generic.List`1:get_Count () + int System.Collections.Generic.List`1:get_Count () int System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalComparer:GetHashCode (string) int System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalIgnoreCaseComparer:GetHashCode (string) int System.Collections.Generic.ObjectEqualityComparer`1:GetHashCode (System.Type) int System.Collections.HashHelpers:ExpandPrime (int) int System.Collections.HashHelpers:GetPrime (int) int System.Collections.HashHelpers:GetPrime (int) - int System.Collections.Hashtable:get_Count () int System.Collections.Hashtable:GetHash (object) - int System.Collections.SortedList:get_Count () - int System.Collections.SortedList:IndexOfKey (object) - int System.Collections.SortedList/SyncSortedList:get_Count () - int System.Collections.SortedList/ValueList:get_Count () int System.DateTime:get_Year () int System.DateTimeFormat:ParseNextChar (System.ReadOnlySpan`1,int) int System.DateTimeFormat:ParseRepeatPattern (System.ReadOnlySpan`1,int,char) @@ -553,21 +530,11 @@ Methods: int System.MemoryExtensions:Split (System.ReadOnlySpan`1,System.Span`1,char,System.StringSplitOptions) int System.MemoryExtensions:SplitCore (System.ReadOnlySpan`1,System.Span`1,System.ReadOnlySpan`1,System.ReadOnlySpan`1,bool,System.StringSplitOptions) int System.MulticastDelegate:GetHashCode () - int System.Net.CookieCollection:get_Count () - int System.Net.CookieCollection:InternalAdd (System.Net.Cookie,bool) int System.Net.Http.Headers.HeaderUtilities:GetNextNonEmptyOrWhitespaceIndex (string,int,bool,bool&) - int System.Net.Http.Headers.HttpHeaders:g__Count|59_0 (object) - int System.Net.Http.Headers.HttpHeaders:GetValueCount (System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo) int System.Net.Http.Headers.Int64NumberHeaderParser:GetParsedValueLength (string,int,object,object&) - int System.Net.Http.Headers.MediaTypeHeaderParser:GetParsedValueLength (string,int,object,object&) - int System.Net.Http.Headers.MediaTypeHeaderValue:GetMediaTypeExpressionLength (string,int,string&) - int System.Net.Http.Headers.MediaTypeHeaderValue:GetMediaTypeLength (string,int,System.Func`1,System.Net.Http.Headers.MediaTypeHeaderValue&) int System.Net.Http.HttpRuleParser:GetNumberLength (string,int,bool) int System.Net.Http.HttpRuleParser:GetTokenLength (string,int) int System.Net.Http.HttpRuleParser:GetWhitespaceLength (string,int) - int System.Net.PathList:get_Count () - int System.Net.PathList:GetCookiesCount () - int System.Net.PathList/PathListComparer:System.Collections.IComparer.Compare (object,object) int System.Net.Primitives.Interop/Sys:GetDomainName (byte*,int) int System.Number:ParseBinaryInteger (System.ReadOnlySpan`1,System.Globalization.NumberStyles,System.Globalization.NumberFormatInfo) int System.Object:GetHashCode () @@ -628,7 +595,6 @@ Methods: int System.SpanHelpers:NonPackedIndexOfAnyValueType (int16&,int16,int16,int16,int) int System.SpanHelpers:NonPackedIndexOfValueType (int16&,int16,int) int System.SpanHelpers:SequenceCompareTo (byte&,int,byte&,int) - int System.String:Compare (string,int,string,int,int,System.StringComparison) int System.String:Compare (string,string,System.StringComparison) int System.String:CompareOrdinal (string,string) int System.String:CompareOrdinalHelper (string,string) @@ -658,6 +624,7 @@ Methods: int System.Text.UTF8Encoding/UTF8EncodingSealed:GetMaxByteCount (int) int System.Text.UTF8Encoding/UTF8EncodingSealed:GetMaxCharCount (int) int System.Threading.LowLevelLifoSemaphore:TimedWaitInternal (intptr,int) + int System.Threading.PortableThreadPool:DetermineThreadPoolThreadTimeoutMs () int System.Threading.PortableThreadPool/GateThread:GetRunningStateForNumRuns (int) int System.Threading.ProcessorIdCache:RefreshCurrentProcessorId () int System.Threading.ProcessorIdCache:UninlinedThreadStatic () @@ -686,9 +653,11 @@ Methods: int[] System.Globalization.CultureData:GetLocaleInfoCoreUserOverride (System.Globalization.CultureData/LocaleGroupingData) int[] System.Globalization.CultureData:IcuGetLocaleInfo (System.Globalization.CultureData/LocaleGroupingData) int16 System.AppContextConfigHelper:GetInt16Config (string,int16,bool) + int16 System.AppContextConfigHelper:GetInt16Config (string,string,int16,bool) int16 System.DateTimeOffset:ValidateOffset (System.TimeSpan) int16 System.Threading.PortableThreadPool:get_MinThreadsGoal () int16 System.Threading.PortableThreadPool:get_TargetThreadsGoalForBlockingAdjustment () + int16 System.Threading.PortableThreadPool/WorkerThread:DetermineThreadsToKeepAlive () int16 System.TimeZoneInfo:TZif_ToInt16 (System.ReadOnlySpan`1) Interop/Error System.Private.CoreLib.Interop/Sys:ConvertErrorPlatformToPal (int) Interop/ErrorInfo System.Private.CoreLib.Interop/Sys:GetLastErrorInfo () @@ -762,7 +731,6 @@ Methods: intptr System.Runtime.Loader.AssemblyLoadContext:InitializeAssemblyLoadContext (intptr,bool,bool) intptr System.Runtime.Loader.AssemblyLoadContext:InternalInitializeNativeALC (intptr,intptr,bool,bool) intptr System.RuntimeType:GetConstructors_native (System.Runtime.CompilerServices.QCallTypeHandle,System.Reflection.BindingFlags) - intptr System.RuntimeType:GetFields_native (System.Runtime.CompilerServices.QCallTypeHandle,intptr,System.Reflection.BindingFlags,System.RuntimeType/MemberListType) intptr System.RuntimeType:GetMethodsByName_native (System.Runtime.CompilerServices.QCallTypeHandle,intptr,System.Reflection.BindingFlags,System.RuntimeType/MemberListType) intptr System.Threading.LowLevelLifoSemaphore:InitInternal () intptr System.Threading.WaitSubsystem/HandleManager:NewHandle (System.Threading.WaitSubsystem/WaitableObject) @@ -853,10 +821,10 @@ Methods: Javax.Net.Ssl.SSLSocketFactory Xamarin.Android.Net.AndroidMessageHandler:ConfigureCustomSSLSocketFactory (Javax.Net.Ssl.HttpsURLConnection) Javax.Net.Ssl.TrustManagerFactory Xamarin.Android.Net.AndroidMessageHandler:ConfigureTrustManagerFactory (Java.Security.KeyStore) long System.BitConverter:DoubleToInt64Bits (double) + long System.DateTime:get_Ticks () long System.Diagnostics.Stopwatch:GetTimestamp () long System.Diagnostics.Stopwatch:QueryPerformanceCounter () long System.Environment:get_TickCount64 () - long System.IO.MemoryStream:get_Length () long System.IO.MemoryStream:Seek (long,System.IO.SeekOrigin) long System.IO.Strategies.BufferedFileStreamStrategy:get_Position () long System.IO.Strategies.BufferedFileStreamStrategy:Seek (long,System.IO.SeekOrigin) @@ -872,6 +840,7 @@ Methods: long System.Runtime.InteropServices.Marshal:ReadInt64 (intptr,int) long System.Threading.ThreadInt64PersistentCounter:get_Count () long System.Threading.TimerQueue:get_TickCount64 () + long System.TimeSpan:get_Ticks () long System.TimeZoneInfo:TZif_ToInt64 (byte[],int) long System.TimeZoneInfo:TZif_ToUnixTime (byte[],int,System.TimeZoneInfo/TZVersion) Microsoft.Win32.SafeHandles.SafeFileHandle Microsoft.Win32.SafeHandles.SafeFileHandle:Open (string,Interop/Sys/OpenFlags,int,bool,bool&,System.Func`4) @@ -892,23 +861,13 @@ Methods: object System.Activator:CreateInstance (System.Type) object System.AppContext:GetData (string) object System.Array:Clone () - object System.Collections.ArrayList:get_Item (int) object System.Collections.Hashtable:get_Item (object) - object System.Collections.Hashtable:get_SyncRoot () - object System.Collections.SortedList:get_Item (object) - object System.Collections.SortedList:get_SyncRoot () - object System.Collections.SortedList:GetByIndex (int) - object System.Collections.SortedList/SyncSortedList:get_Item (object) - object System.Collections.SortedList/SyncSortedList:get_SyncRoot () - object System.Collections.SortedList/ValueList:get_Item (int) object System.Delegate:get_Target () object System.GC:get_ephemeron_tombstone () object System.Globalization.CultureInfo:GetFormat (System.Type) object System.MulticastDelegate:GetTarget () object System.Net.Http.Headers.HttpHeaders:GetSingleParsedValue (System.Net.Http.Headers.HeaderDescriptor) object System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo:GetSingleParsedValue () - object System.Net.PathList:get_Item (string) - object System.Net.PathList:get_SyncRoot () object System.Object:MemberwiseClone () object System.Reflection.ConstructorInfo:Invoke (object[]) object System.Reflection.MethodBase:Invoke (object,object[]) @@ -968,6 +927,7 @@ Methods: string Java.Net.HttpURLConnection:get_ResponseMessage () string Java.Security.KeyStore:get_DefaultType () string System.AppContext:get_BaseDirectory () + string System.Collections.Generic.List`1:get_Item (int) string System.DomainNameHelper:ParseCanonicalName (string,int,int,bool&) string System.Environment:GetEnvironmentVariable (string) string System.Environment:GetEnvironmentVariableCore (string) @@ -1022,15 +982,9 @@ Methods: string System.IO.PathInternal:RemoveRelativeSegments (string,int) string System.IO.StreamReader:ReadLine () string System.Linq.Extensions/d__5`1:System.Collections.Generic.IEnumerator.get_Current () - string System.Net.Cookie:get_DomainKey () - string System.Net.Cookie:get_Name () string System.Net.CookieContainer:CreateFqdnMyDomain () string System.Net.CookieContainer:GetCookieHeader (System.Uri,string&) string System.Net.CookieContainer:GetCookieHeader (System.Uri) - string System.Net.CookieParser:CheckQuoted (string) - string System.Net.CookieTokenizer:Extract () - string System.Net.Http.Headers.MediaTypeHeaderValue:get_CharSet () - string System.Net.Http.HttpContent:ReadBufferAsString (System.ArraySegment`1,System.Net.Http.Headers.HttpContentHeaders) string System.Net.Http.HttpMethod:ToString () string System.Net.NetworkInformation.HostInformation:get_DomainName () string System.Net.NetworkInformation.HostInformationPal:GetDomainName () @@ -1078,7 +1032,6 @@ Methods: string System.String:ToLowerInvariant () string System.String:ToString () string System.String:Trim () - string System.StringExtensions:SubstringTrim (string,int,int) string System.Text.Encoding:GetString (System.ReadOnlySpan`1) string System.Text.UTF8Encoding:GetString (byte[],int,int) string System.Text.ValueStringBuilder:ToString () @@ -1128,14 +1081,12 @@ Methods: string[] System.Globalization.DateTimeFormatInfo:InternalGetAbbreviatedDayOfWeekNamesCore () string[] System.Globalization.DateTimeFormatInfo:InternalGetAbbreviatedMonthNames () string[] System.Globalization.DateTimeFormatInfo:InternalGetAbbreviatedMonthNamesCore () - string[] System.Net.Http.Headers.HttpHeaders:GetStoreValuesAsStringArray (System.Net.Http.Headers.HeaderDescriptor,System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo) string[] System.String:Split (char,System.StringSplitOptions) string[] System.String:SplitInternal (System.ReadOnlySpan`1,int,System.StringSplitOptions) string[] System.String:SplitWithoutPostProcessing (System.ReadOnlySpan`1,System.ReadOnlySpan`1,int,int) System.Action System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__0>:get_MoveNextAction () System.Array System.Array:CreateInstance (System.Type,int) System.Array System.Array:InternalCreate (System.RuntimeType,int,int*,int*) - System.ArraySegment`1 System.Net.Http.HttpContent/LimitArrayPoolWriteStream:GetBuffer () System.Attribute System.Attribute:GetAttr (System.Reflection.ICustomAttributeProvider,System.Type,bool) System.Attribute System.Attribute:GetCustomAttribute (System.Reflection.Assembly,System.Type) System.Attribute System.Reflection.CustomAttributeExtensions:GetCustomAttribute (System.Reflection.Assembly,System.Type) @@ -1171,11 +1122,8 @@ Methods: System.Collections.Generic.IList`1 Android.Runtime.JavaDictionary`2>:Get (string) System.Collections.Generic.IList`1 Android.Runtime.JavaDictionary`2>:get_Item (string) System.Collections.Generic.IList`1 Android.Runtime.JavaList`1:FromJniHandle (intptr,Android.Runtime.JniHandleOwnership) - System.Collections.Generic.List`1/Enumerator System.Collections.Generic.List`1:GetEnumerator () + System.Collections.Generic.List`1/Enumerator System.Collections.Generic.List`1:GetEnumerator () System.Collections.Generic.List`1 System.Threading.TimerQueue:InitializeScheduledTimerManager_Locked () - System.Collections.IList System.Collections.SortedList:GetValueList () - System.Collections.IList System.Collections.SortedList/SyncSortedList:GetValueList () - System.Collections.SortedList System.Collections.SortedList:Synchronized (System.Collections.SortedList) System.DateTime System.DateTime:AddMilliseconds (double) System.DateTime System.DateTime:AddTicks (long) System.DateTime System.DateTime:get_Date () @@ -1279,14 +1227,8 @@ Methods: System.IO.Stream Xamarin.Android.Net.AndroidMessageHandler:GetDecompressionWrapper (Java.Net.URLConnection,System.IO.Stream,Xamarin.Android.Net.AndroidMessageHandler/ContentState) System.IO.StreamReader System.IO.File:OpenText (string) System.LazyHelper System.LazyHelper:Create (System.Threading.LazyThreadSafetyMode,bool) - System.Net.Cookie System.Net.CookieCollection:get_Item (int) - System.Net.Cookie System.Net.CookieParser:Get () - System.Net.CookieCollection System.Net.CookieContainer:CookieCutter (System.Uri,string,string,bool) System.Net.CookieCollection System.Net.CookieContainer:InternalGetCookies (System.Uri) System.Net.CookieContainer Xamarin.Android.Net.AndroidMessageHandler:get_CookieContainer () - System.Net.CookieToken System.Net.CookieTokenizer:FindNext (bool,bool) - System.Net.CookieToken System.Net.CookieTokenizer:Next (bool,bool) - System.Net.CookieToken System.Net.CookieTokenizer:TokenFromName (bool) System.Net.Http.Headers.AltSvcHeaderParser System.Net.Http.Headers.AltSvcHeaderParser:get_Parser () System.Net.Http.Headers.AltSvcHeaderParser System.Net.Http.Headers.KnownHeaders:GetAltSvcHeaderParser () System.Net.Http.Headers.HttpContentHeaders System.Net.Http.HttpContent:get_Headers () @@ -1296,9 +1238,6 @@ Methods: System.Net.Http.Headers.HttpResponseHeaders System.Net.Http.HttpResponseMessage:get_Headers () System.Net.Http.Headers.KnownHeader System.Net.Http.Headers.KnownHeaders:GetCandidate (System.Net.Http.Headers.KnownHeaders/StringAccessor) System.Net.Http.Headers.KnownHeader System.Net.Http.Headers.KnownHeaders:TryGetKnownHeader (string) - System.Net.Http.Headers.MediaTypeHeaderValue System.Net.Http.Headers.HttpContentHeaders:get_ContentType () - System.Net.Http.Headers.MediaTypeHeaderValue System.Net.Http.Headers.MediaTypeHeaderParser:CreateMediaType () - System.Net.Http.Headers.NameValueHeaderValue System.Net.Http.Headers.NameValueHeaderValue:Find (System.Net.Http.Headers.UnvalidatedObjectCollection`1,string) System.Net.Http.HttpContent System.Net.Http.HttpResponseMessage:get_Content () System.Net.Http.HttpContent Xamarin.Android.Net.AndroidMessageHandler:GetContent (Java.Net.URLConnection,System.IO.Stream,Xamarin.Android.Net.AndroidMessageHandler/ContentState) System.Net.Http.HttpContent/LimitMemoryStream System.Net.Http.HttpContent:CreateMemoryStream (long,System.Exception&) @@ -1370,11 +1309,6 @@ Methods: System.Reflection.CorElementType System.RuntimeType:GetCorElementType () System.Reflection.CorElementType System.RuntimeTypeHandle:GetCorElementType (System.Runtime.CompilerServices.QCallTypeHandle) System.Reflection.CorElementType System.RuntimeTypeHandle:GetCorElementType (System.RuntimeType) - System.Reflection.FieldAttributes System.Reflection.RuntimeFieldInfo:get_Attributes () - System.Reflection.FieldInfo System.Net.CookieParser:get_IsQuotedDomainField () - System.Reflection.FieldInfo System.Reflection.FieldInfo:GetFieldFromHandle (System.RuntimeFieldHandle,System.RuntimeTypeHandle) - System.Reflection.FieldInfo System.Reflection.FieldInfo:internal_from_handle_type (intptr,intptr) - System.Reflection.FieldInfo System.RuntimeType:GetField (string,System.Reflection.BindingFlags) System.Reflection.ICustomAttributeProvider System.Reflection.CustomAttribute:GetBase (System.Reflection.ICustomAttributeProvider) System.Reflection.InvocationFlags System.Reflection.RuntimeConstructorInfo:ComputeAndUpdateInvocationFlags () System.Reflection.InvocationFlags System.Reflection.RuntimeMethodInfo:ComputeAndUpdateInvocationFlags () @@ -1407,7 +1341,6 @@ Methods: System.Reflection.RuntimeAssembly System.RuntimeTypeHandle:GetAssembly (System.RuntimeType) System.Reflection.RuntimeConstructorInfo System.RuntimeType:GetDefaultConstructor () System.Reflection.RuntimeConstructorInfo[] System.RuntimeType:GetConstructors_internal (System.Reflection.BindingFlags,System.RuntimeType) - System.Reflection.RuntimeFieldInfo[] System.RuntimeType:GetFields_internal (string,System.Reflection.BindingFlags,System.RuntimeType/MemberListType,System.RuntimeType) System.Reflection.RuntimeMethodInfo[] System.RuntimeType:GetMethodsByName (string,System.Reflection.BindingFlags,System.RuntimeType/MemberListType,System.RuntimeType) System.Reflection.RuntimeModule System.RuntimeType:GetRuntimeModule () System.Reflection.RuntimeModule System.RuntimeTypeHandle:GetModule (System.RuntimeType) @@ -1431,6 +1364,7 @@ Methods: System.Runtime.CompilerServices.IAsyncStateMachineBox System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:GetStateMachineBox (System.Net.Http.HttpClient/d__41&,System.Threading.Tasks.Task`1&) System.Runtime.CompilerServices.IAsyncStateMachineBox System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:GetStateMachineBox (System.IO.BufferedStream/d__68&,System.Threading.Tasks.Task`1&) System.Runtime.CompilerServices.IAsyncStateMachineBox System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:GetStateMachineBox (System.IO.Stream/<g__Core|27_0>d&,System.Threading.Tasks.Task`1&) + System.Runtime.CompilerServices.IAsyncStateMachineBox System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:GetStateMachineBox (System.Net.Http.HttpContent/d__63&,System.Threading.Tasks.Task`1&) System.Runtime.CompilerServices.IAsyncStateMachineBox System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:GetStateMachineBox (System.Net.Http.StreamToStreamCopy/<g__DisposeSourceAsync|1_0>d&,System.Threading.Tasks.Task`1&) System.Runtime.CompilerServices.TaskAwaiter System.Threading.Tasks.Task:GetAwaiter () System.Runtime.InteropServices.GCHandle System.Runtime.InteropServices.GCHandle:Alloc (object,System.Runtime.InteropServices.GCHandleType) @@ -1468,6 +1402,7 @@ Methods: System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__41>:get_Context () System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__68>:get_Context () System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__Core|27_0>d>:get_Context () + System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__63>:get_Context () System.Threading.ExecutionContext& System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:get_Context () System.Threading.LowLevelLifoSemaphoreBase/Counts System.Threading.LowLevelLifoSemaphoreBase/Counts:InterlockedCompareExchange (System.Threading.LowLevelLifoSemaphoreBase/Counts,System.Threading.LowLevelLifoSemaphoreBase/Counts) System.Threading.PortableThreadPool/ThreadCounts System.Threading.PortableThreadPool/ThreadCounts:InterlockedCompareExchange (System.Threading.PortableThreadPool/ThreadCounts,System.Threading.PortableThreadPool/ThreadCounts) @@ -1533,9 +1468,6 @@ Methods: System.Threading.Tasks.TaskScheduler System.Threading.Tasks.TaskScheduler:get_Default () System.Threading.Tasks.TaskScheduler System.Threading.Tasks.TaskScheduler:get_InternalCurrent () System.Threading.Tasks.TaskStatus System.Threading.Tasks.Task:get_Status () - System.Threading.Tasks.ValueTask System.IO.MemoryStream:WriteAsync (System.ReadOnlyMemory`1,System.Threading.CancellationToken) - System.Threading.Tasks.ValueTask System.Net.Http.HttpContent/LimitArrayPoolWriteStream:WriteAsync (System.ReadOnlyMemory`1,System.Threading.CancellationToken) - System.Threading.Tasks.ValueTask System.Net.Http.HttpContent/LimitMemoryStream:WriteAsync (System.ReadOnlyMemory`1,System.Threading.CancellationToken) System.Threading.Tasks.ValueTask`1 System.IO.Stream:ReadAsync (System.Memory`1,System.Threading.CancellationToken) System.Threading.Tasks.ValueTask`1 System.Net.Http.Metrics.MetricsHandler:SendAsync (System.Net.Http.HttpRequestMessage,bool,System.Threading.CancellationToken) System.Threading.Thread System.Threading.Thread:get_CurrentThread () @@ -1545,7 +1477,6 @@ Methods: System.Threading.ThreadPoolWorkQueueThreadLocals System.Threading.ThreadPoolWorkQueue:GetOrCreateThreadLocals () System.Threading.ThreadState System.Threading.Thread:GetState (System.Threading.Thread) System.Threading.ThreadState System.Threading.Thread:ValidateThreadState () - System.Threading.TimerQueue System.Collections.Generic.List`1:get_Item (int) System.Threading.TimerQueue[] System.Threading.TimerQueue:CreateTimerQueues () System.Threading.TimerQueue[] System.Threading.TimerQueue:get_Instances () System.Threading.WaitSubsystem/ThreadWaitInfo System.Threading.Thread:g__AllocateWaitInfo|52_0 () @@ -1609,9 +1540,6 @@ Methods: System.Type System.Reflection.ParameterInfo:get_ParameterType () System.Type System.Reflection.RuntimeAssembly:GetType (string,bool,bool) System.Type System.Reflection.RuntimeConstructorInfo:get_DeclaringType () - System.Type System.Reflection.RuntimeFieldInfo:get_DeclaringType () - System.Type System.Reflection.RuntimeFieldInfo:get_FieldType () - System.Type System.Reflection.RuntimeFieldInfo:GetParentType (bool) System.Type System.Reflection.RuntimeMethodInfo:get_DeclaringType () System.Type System.Reflection.RuntimeMethodInfo:get_ReturnType () System.Type System.RuntimeType:get_BaseType () @@ -1875,7 +1803,6 @@ Methods: void System.ArgumentException:ThrowIfNullOrWhiteSpace (string,string) void System.ArgumentOutOfRangeException:ThrowIfGreaterThan (int,int,string) void System.ArgumentOutOfRangeException:ThrowIfGreaterThan (long,long,string) - void System.ArgumentOutOfRangeException:ThrowIfGreaterThanOrEqual (int,int,string) void System.ArgumentOutOfRangeException:ThrowIfLessThan (int,int,string) void System.ArgumentOutOfRangeException:ThrowIfLessThan (long,long,string) void System.ArgumentOutOfRangeException:ThrowIfNegative (int,string) @@ -1923,11 +1850,6 @@ Methods: void System.Buffers.SharedArrayPool`1:Return (byte[],bool) void System.Buffers.SharedArrayPool`1:.ctor () void System.Buffers.SharedArrayPool`1:Return (char[],bool) - void System.Collections.ArrayList:EnsureCapacity (int) - void System.Collections.ArrayList:set_Capacity (int) - void System.Collections.ArrayList:set_Item (int,object) - void System.Collections.Comparer:.cctor () - void System.Collections.Comparer:.ctor (System.Globalization.CultureInfo) void System.Collections.Concurrent.ConcurrentDictionary`2/Tables:.ctor (System.Collections.Concurrent.ConcurrentDictionary`2/VolatileNode[],object[],int[],System.Collections.Generic.IEqualityComparer`1) void System.Collections.Concurrent.ConcurrentDictionary`2:.ctor () void System.Collections.Concurrent.ConcurrentDictionary`2:.ctor (int,int,bool,System.Collections.Generic.IEqualityComparer`1) @@ -1977,7 +1899,7 @@ Methods: void System.Collections.Generic.HashSet`1:.ctor (System.Collections.Generic.IEqualityComparer`1) void System.Collections.Generic.HashSet`1:Resize () void System.Collections.Generic.HashSet`1:Resize (int,bool) - void System.Collections.Generic.List`1/Enumerator:.ctor (System.Collections.Generic.List`1) + void System.Collections.Generic.List`1/Enumerator:.ctor (System.Collections.Generic.List`1) void System.Collections.Generic.List`1:.cctor () void System.Collections.Generic.List`1:.ctor () void System.Collections.Generic.List`1:.cctor () @@ -1986,14 +1908,13 @@ Methods: void System.Collections.Generic.List`1:set_Capacity (int) void System.Collections.Generic.List`1:.ctor (int) void System.Collections.Generic.List`1:CopyTo (object[],int) - void System.Collections.Generic.List`1:.cctor () - void System.Collections.Generic.List`1:.ctor () - void System.Collections.Generic.List`1:Add (string) void System.Collections.Generic.List`1:set_Item (int,string) void System.Collections.Generic.List`1:RemoveAt (int) - void System.Collections.Generic.List`1:AddWithResize (Xamarin.Android.Net.IAndroidAuthenticationModule) - void System.Collections.Generic.List`1:Grow (int) - void System.Collections.Generic.List`1:set_Capacity (int) + void System.Collections.Generic.List`1:.cctor () + void System.Collections.Generic.List`1:.ctor () + void System.Collections.Generic.List`1:AddWithResize (System.TimeZoneInfo/AdjustmentRule) + void System.Collections.Generic.List`1:Grow (int) + void System.Collections.Generic.List`1:set_Capacity (int) void System.Collections.Generic.NonRandomizedStringEqualityComparer:.cctor () void System.Collections.Generic.NonRandomizedStringEqualityComparer:.ctor (System.Collections.Generic.IEqualityComparer`1) void System.Collections.Generic.NonRandomizedStringEqualityComparer/OrdinalComparer:.ctor (System.Collections.Generic.IEqualityComparer`1) @@ -2005,15 +1926,6 @@ Methods: void System.Collections.Hashtable:.ctor (int) void System.Collections.Hashtable:Add (object,object) void System.Collections.Hashtable:Insert (object,object,bool) - void System.Collections.Hashtable:set_Item (object,object) - void System.Collections.SortedList:.ctor () - void System.Collections.SortedList:.ctor (System.Collections.IComparer) - void System.Collections.SortedList:EnsureCapacity (int) - void System.Collections.SortedList:Insert (int,object,object) - void System.Collections.SortedList:set_Capacity (int) - void System.Collections.SortedList:set_Item (object,object) - void System.Collections.SortedList/SyncSortedList:.ctor (System.Collections.SortedList) - void System.Collections.SortedList/SyncSortedList:set_Item (object,object) void System.DateTime:.cctor () void System.DateTime:.ctor (int,int,int,int,int,int) void System.DateTime:.ctor (int,int,int) @@ -2130,8 +2042,6 @@ Methods: void System.IO.FileStream:set_Position (long) void System.IO.FileStream:ValidateReadWriteArgs (byte[],int,int) void System.IO.MemoryStream:.ctor (int) - void System.IO.MemoryStream:EnsureWriteable () - void System.IO.MemoryStream:Write (byte[],int,int) void System.IO.Path:.cctor () void System.IO.Strategies.BufferedFileStreamStrategy:.ctor (System.IO.Strategies.FileStreamStrategy,int) void System.IO.Strategies.BufferedFileStreamStrategy:AllocateBuffer () @@ -2185,22 +2095,8 @@ Methods: void System.Linq.Extensions/d__5`1:<>m__Finally1 () void System.Linq.Extensions/d__5`1:System.IDisposable.Dispose () void System.Marvin:.cctor () - void System.Net.Cookie:.cctor () - void System.Net.Cookie:.ctor () - void System.Net.Cookie:set_Domain (string) - void System.Net.Cookie:set_HttpOnly (bool) - void System.Net.Cookie:set_Path (string) - void System.Net.Cookie:set_Secure (bool) - void System.Net.Cookie:set_Value (string) - void System.Net.CookieCollection:.ctor () void System.Net.CookieContainer:.cctor () void System.Net.CookieContainer:.ctor () - void System.Net.CookieContainer:Add (System.Net.Cookie,bool) - void System.Net.CookieContainer:SetCookies (System.Uri,string) - void System.Net.CookieParser:.ctor (string) - void System.Net.CookieTokenizer:.cctor () - void System.Net.CookieTokenizer:.ctor (string) - void System.Net.CookieTokenizer:Reset () void System.Net.Http.Headers.AltSvcHeaderParser:.cctor () void System.Net.Http.Headers.AltSvcHeaderParser:.ctor () void System.Net.Http.Headers.BaseHeaderParser:.ctor (bool) @@ -2222,12 +2118,9 @@ Methods: void System.Net.Http.Headers.HttpHeaderParser:.ctor (bool) void System.Net.Http.Headers.HttpHeaders:.ctor (System.Net.Http.Headers.HttpHeaderType,System.Net.Http.Headers.HttpHeaderType) void System.Net.Http.Headers.HttpHeaders:AddParsedValue (System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo,object) - void System.Net.Http.Headers.HttpHeaders:AddRawValue (System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo,string) - void System.Net.Http.Headers.HttpHeaders:AddValueToStoreValue (string,object&) - void System.Net.Http.Headers.HttpHeaders:GetStoreValuesAsStringOrStringArray (System.Net.Http.Headers.HeaderDescriptor,object,string&,string[]&) + void System.Net.Http.Headers.HttpHeaders:AddValueToStoreValue (object,object&) void System.Net.Http.Headers.HttpHeaders:ParseRawHeaderValues (System.Net.Http.Headers.HeaderDescriptor,System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo) void System.Net.Http.Headers.HttpHeaders:ParseSingleRawHeaderValue (System.Net.Http.Headers.HttpHeaders/HeaderStoreItemInfo,System.Net.Http.Headers.HeaderDescriptor,string) - void System.Net.Http.Headers.HttpHeaders:ReadStoreValues (System.Span`1,object,System.Net.Http.Headers.HttpHeaderParser,int&) void System.Net.Http.Headers.HttpRequestHeaders:.ctor () void System.Net.Http.Headers.HttpResponseHeaders:.ctor (bool) void System.Net.Http.Headers.Int32NumberHeaderParser:.cctor () @@ -2277,11 +2170,7 @@ Methods: void System.Net.Http.HttpContent/d__63:MoveNext () void System.Net.Http.HttpContent/LimitArrayPoolWriteStream:.ctor (int,long) void System.Net.Http.HttpContent/LimitArrayPoolWriteStream:Dispose (bool) - void System.Net.Http.HttpContent/LimitArrayPoolWriteStream:EnsureCapacity (int) - void System.Net.Http.HttpContent/LimitArrayPoolWriteStream:Write (System.ReadOnlySpan`1) void System.Net.Http.HttpContent/LimitMemoryStream:.ctor (int,int) - void System.Net.Http.HttpContent/LimitMemoryStream:CheckSize (int) - void System.Net.Http.HttpContent/LimitMemoryStream:Write (byte[],int,int) void System.Net.Http.HttpMessageHandler:Dispose () void System.Net.Http.HttpMessageInvoker:.ctor (System.Net.Http.HttpMessageHandler,bool) void System.Net.Http.HttpMessageInvoker:Dispose () @@ -2301,6 +2190,7 @@ Methods: void System.Net.Http.HttpTelemetry:.cctor () void System.Net.Http.HttpTelemetry:.ctor () void System.Net.Http.Metrics.MetricsHandler:.ctor (System.Net.Http.HttpMessageHandler,System.Diagnostics.Metrics.IMeterFactory,System.Diagnostics.Metrics.Meter&) + void System.Net.Http.Metrics.MetricsHandler:Dispose (bool) void System.Net.Http.Metrics.MetricsHandler/SharedMeter:.cctor () void System.Net.Http.Metrics.MetricsHandler/SharedMeter:.ctor () void System.Net.Http.StreamContent:.ctor (System.IO.Stream) @@ -2310,16 +2200,9 @@ Methods: void System.Net.Http.StreamToStreamCopy/<g__DisposeSourceAsync|1_0>d:MoveNext () void System.Net.HttpVersion:.cctor () void System.Net.NetEventSource:.cctor () - void System.Net.NetEventSource:.cctor () - void System.Net.NetEventSource:.ctor () void System.Net.NetEventSource:.ctor () - void System.Net.PathList:.ctor () - void System.Net.PathList:set_Item (string,object) - void System.Net.PathList/PathListComparer:.cctor () - void System.Net.PathList/PathListComparer:.ctor () void System.NullReferenceException:.ctor (string) void System.Number:.cctor () - void System.Numerics.Vector`1:.ctor (uint16) void System.OrdinalCaseSensitiveComparer:.cctor () void System.OrdinalCaseSensitiveComparer:.ctor () void System.OrdinalIgnoreCaseComparer:.cctor () @@ -2341,7 +2224,7 @@ Methods: void System.Private.CoreLib.ThreadWaitInfo/WaitedListNode:UnregisterWait (System.Threading.WaitSubsystem/WaitableObject) void System.Private.CoreLib.WorkerThread/<>c:.cctor () void System.Private.CoreLib.WorkerThread/<>c:.ctor () - void System.Private.CoreLib.WorkerThread/<>c:<.cctor>b__15_0 () + void System.Private.CoreLib.WorkerThread/<>c:<.cctor>b__17_0 () void System.Random/XoshiroImpl:.ctor () void System.Reflection.Assembly:.cctor () void System.Reflection.AssemblyName:.ctor (string) @@ -2353,7 +2236,6 @@ Methods: void System.Reflection.ConstructorInfo:.cctor () void System.Reflection.CustomAttribute:.cctor () void System.Reflection.Emit.OpCodes:.cctor () - void System.Reflection.FieldInfo:SetValue (object,object) void System.Reflection.MethodBaseInvoker:.ctor (System.Reflection.MethodBase,System.RuntimeType[]) void System.Reflection.MethodBaseInvoker:.ctor (System.Reflection.RuntimeConstructorInfo) void System.Reflection.MethodBaseInvoker:.ctor (System.Reflection.RuntimeMethodInfo) @@ -2364,9 +2246,6 @@ Methods: void System.Reflection.MonoMethodInfo:get_method_info (intptr,System.Reflection.MonoMethodInfo&) void System.Reflection.RuntimeAssembly:GetInfo (System.Runtime.CompilerServices.QCallAssembly,System.Runtime.CompilerServices.ObjectHandleOnStack,System.Reflection.RuntimeAssembly/AssemblyInfoKind) void System.Reflection.RuntimeAssembly/UnmanagedMemoryStreamForModule:.ctor (byte*,long,System.Reflection.Module) - void System.Reflection.RuntimeFieldInfo:CheckGeneric () - void System.Reflection.RuntimeFieldInfo:SetValue (object,object,System.Reflection.BindingFlags,System.Reflection.Binder,System.Globalization.CultureInfo) - void System.Reflection.RuntimeFieldInfo:SetValueInternal (System.Reflection.FieldInfo,object,object) void System.Reflection.RuntimeModule:GetGuidInternal (intptr,byte[]) void System.Reflection.RuntimeParameterInfo:.ctor (string,System.Type,int,int,object,System.Reflection.MemberInfo,System.Runtime.InteropServices.MarshalAsAttribute) void System.Resources.FastResourceComparer:.cctor () @@ -2431,10 +2310,15 @@ Methods: void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__Core|27_0>d>:ExecutionContextCallback (object) void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__Core|27_0>d>:MoveNext () void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__Core|27_0>d>:MoveNext (System.Threading.Thread) + void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__63>:.cctor () + void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__63>:.ctor () + void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__63>:ExecutionContextCallback (object) + void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__63>:MoveNext () + void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1d__63>:MoveNext (System.Threading.Thread) void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:.cctor () void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:.ctor () - void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:ExecuteFromThreadPool (System.Threading.Thread) void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:ExecutionContextCallback (object) + void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:MoveNext () void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1/AsyncStateMachineBox`1g__DisposeSourceAsync|1_0>d>:MoveNext (System.Threading.Thread) void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:SetResult (Java.Net.Proxy) void System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1:AwaitUnsafeOnCompleted (System.Runtime.CompilerServices.ConfiguredTaskAwaitable/ConfiguredTaskAwaiter&,System.Runtime.CompilerServices.IAsyncStateMachineBox) @@ -2493,7 +2377,6 @@ Methods: void System.RuntimeType:CacheFlag (System.RuntimeType/TypeCacheEntries,bool) void System.RuntimeType:CreateInstanceCheckThis () void System.RuntimeType:FilterHelper (System.Reflection.BindingFlags,string&,bool,bool&,bool&,System.RuntimeType/MemberListType&) - void System.RuntimeType:FilterHelper (System.Reflection.BindingFlags,string&,bool&,System.RuntimeType/MemberListType&) void System.RuntimeType:getFullName (System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack,bool,bool) void System.RuntimeType:GetGenericArgumentsInternal (System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack,bool) void System.RuntimeType:GetName (System.Runtime.CompilerServices.QCallTypeHandle,System.Runtime.CompilerServices.ObjectHandleOnStack) @@ -2512,7 +2395,6 @@ Methods: void System.RuntimeTypeHandle:internal_from_name (intptr,System.Threading.StackCrawlMark&,System.Runtime.CompilerServices.ObjectHandleOnStack,bool,bool) void System.SpanHelpers:ClearWithoutReferences (byte&,uintptr) void System.SpanHelpers:ClearWithReferences (intptr&,uintptr) - void System.SpanHelpers:Fill (char&,uintptr,char) void System.StackOverflowException:.ctor (string) void System.String:.ctor (char[],int,int) void System.String:.ctor (char*,int,int) From 5759b07decf9e060111830299e38003f060fe9b0 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 20:59:50 -0500 Subject: [PATCH 31/92] Bump to dotnet/installer/release/8.0.1xx@f328064753 8.0.100-rtm.23516.5 (#8431) Changes: https://github.com/dotnet/installer/compare/c65382f002...f328064753 Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23513.4 to 8.0.100-rtm.23516.5 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 4b9bc9a2aae..55f48e4a1d0 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - c65382f00216756e0fb192cc2fd6513448d2679d + f3280647536487968c87a02831e5b9bf78a08fb3 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 0f93e103f27..f8a876a549d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23513.4 + 8.0.100-rtm.23516.5 8.0.0-rtm.23513.17 8.0.0-rtm.23513.17 7.0.0-beta.22103.1 From 02f3c05e8e8c712964046ae1950a75ad7b600d32 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 11:28:03 -0500 Subject: [PATCH 32/92] Bump to dotnet/runtime/release/8.0@6f7af556d2 8.0.0-rtm.23517.16 (#8432) Changes: https://github.com/dotnet/runtime/compare/60b77a63df...6f7af556d2 Changes: https://github.com/dotnet/emsdk/compare/0c28b5cfe0...1b7f3a6560 Changes: https://github.com/dotnet/cecil/compare/64a8874f3c...45dd3a73dd Updates: * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23513.17 to 8.0.0-rtm.23517.16 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23513.17 to 8.0.0-rtm.23517.16 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100.Transport: from 8.0.0-rtm.23504.4 to 8.0.0-rtm.23511.3 * Microsoft.DotNet.Cecil: from 0.11.4-alpha.23502.1 to 0.11.4-alpha.23509.2 Co-authored-by: Jonathan Peppers --- eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 55f48e4a1d0..9dcae0a46dd 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,21 +4,21 @@ https://github.com/dotnet/installer f3280647536487968c87a02831e5b9bf78a08fb3 - + https://github.com/dotnet/runtime - 60b77a63df30362ed1c66a834fcb8f8956ea113b + 6f7af556d2761b0c93299cb88c61e4b747d6176a - + https://github.com/dotnet/runtime - 60b77a63df30362ed1c66a834fcb8f8956ea113b + 6f7af556d2761b0c93299cb88c61e4b747d6176a - + https://github.com/dotnet/emsdk - 0c28b5cfe0f9173000450a3edc808dc8c2b9286e + 1b7f3a6560f6fb5f32b2758603c0376037f555ea - + https://github.com/dotnet/cecil - 64a8874f3c485657e732ca56a5f24e2095740103 + 45dd3a73dd5b64b010c4251303b3664bb30df029 diff --git a/eng/Versions.props b/eng/Versions.props index f8a876a549d..5294e5ab8cb 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,14 +2,14 @@ 8.0.100-rtm.23516.5 - 8.0.0-rtm.23513.17 - 8.0.0-rtm.23513.17 + 8.0.0-rtm.23517.16 + 8.0.0-rtm.23517.16 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0-rtm.23504.4 + 8.0.0-rtm.23511.3 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) 7.0.100-rc.1.22410.7 - 0.11.4-alpha.23502.1 + 0.11.4-alpha.23509.2 $(MicrosoftNETCoreAppRefPackageVersion) From 028f1f62ef2b001dd7272a46aa1b096557222655 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 18 Oct 2023 21:24:43 +0100 Subject: [PATCH 33/92] Bump to xamarin/monodroid/main@47bdaaa9 (#8433) Changes: https://github.com/xamarin/monodroid/compare/e57630bd3a790e5772ae030e517326d34f38431d...47bdaaa9b8ac16d6197a8982c8cc810d177c5cff * xamarin/monodroid@47bdaaa9b: Bump to xamarin/androidtools/main@a9168743 (xamarin/monodroid#1379) * xamarin/monodroid@2f07bd4a7: Bump external/android-sdk-installer from `6f38560` to `3880589` (xamarin/monodroid#1378) * xamarin/monodroid@af9de6a1b: Bump external/xamarin-android from `c6d5025` to `2b0761b` (xamarin/monodroid#1377) * xamarin/monodroid@05a18eedb: [tools/msbuild] Dont raise XA0138 Warning if fast deployment hangs. (xamarin/monodroid#1375) * xamarin/monodroid@8dee1d4c8: Bump external/xamarin-android from `41aaf38` to `c6d5025` (xamarin/monodroid#1374) * xamarin/monodroid@fbb362b85: Bump external/xamarin-android from `547a157` to `41aaf38` (xamarin/monodroid#1372) * xamarin/monodroid@f3257cf75: Bump external/android-sdk-installer from `20b5b01` to `6f38560` (xamarin/monodroid#1370) * xamarin/monodroid@6e5ad72c3: Bump tools/msbuild/external/androidtools from `720fd4e` to `7b48571` (xamarin/monodroid#1369) * xamarin/monodroid@d0889c7be: Bump external/xamarin-android from `fbbf984` to `547a157` (xamarin/monodroid#1371) --- .external | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.external b/.external index b7a1600fdf1..8ac8bb230e4 100644 --- a/.external +++ b/.external @@ -1,2 +1,2 @@ -xamarin/monodroid:main@e57630bd3a790e5772ae030e517326d34f38431d +xamarin/monodroid:main@47bdaaa9b8ac16d6197a8982c8cc810d177c5cff mono/mono:2020-02@6dd9def57ce969ca04a0ecd9ef72c0a8f069112d From adc3e61bf1eb8653cfcf3b8bf7fe78c33a064786 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 15:57:52 -0500 Subject: [PATCH 34/92] Bump to dotnet/installer/release/8.0.1xx@d485886d55 8.0.100-rtm.23517.25 (#8437) Changes: https://github.com/dotnet/installer/compare/f328064753...d485886d55 Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23516.5 to 8.0.100-rtm.23517.25 Co-authored-by: Jonathan Peppers --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9dcae0a46dd..9bf880256eb 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - f3280647536487968c87a02831e5b9bf78a08fb3 + d485886d55ffe6c019490b85d120b51252db5144 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 5294e5ab8cb..d60a603418f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23516.5 + 8.0.100-rtm.23517.25 8.0.0-rtm.23517.16 8.0.0-rtm.23517.16 7.0.0-beta.22103.1 From 9e3201cb388b448d63acb3362758717a6fcf547e Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 19 Oct 2023 12:41:06 -0500 Subject: [PATCH 35/92] Bump to dotnet/installer/release/8.0.1xx@1657e2bb7b 8.0.100-rtm.23518.33 (#8439) Changes: https://github.com/dotnet/installer/compare/d485886d55...1657e2bb7b Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23517.25 to 8.0.100-rtm.23518.33 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9bf880256eb..8c7ae788f0e 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - d485886d55ffe6c019490b85d120b51252db5144 + 1657e2bb7b7766b5f0d27b9dbbb3be35634840c4 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index d60a603418f..cd53efa238e 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23517.25 + 8.0.100-rtm.23518.33 8.0.0-rtm.23517.16 8.0.0-rtm.23517.16 7.0.0-beta.22103.1 From ad4af58b6832da58f7825257859da89a0da89629 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 20 Oct 2023 13:14:19 -0500 Subject: [PATCH 36/92] Bump to dotnet/runtime/release/8.0@c6e7ebdcb1 8.0.0-rtm.23518.26 (#8440) Changes: https://github.com/dotnet/runtime/compare/6f7af556d2...c6e7ebdcb1 Updates: * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23517.16 to 8.0.0-rtm.23518.26 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23517.16 to 8.0.0-rtm.23518.26 Co-authored-by: Jonathan Peppers --- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 8c7ae788f0e..a375ac6b793 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://github.com/dotnet/installer 1657e2bb7b7766b5f0d27b9dbbb3be35634840c4 - + https://github.com/dotnet/runtime - 6f7af556d2761b0c93299cb88c61e4b747d6176a + c6e7ebdcb1b99c72990ae9f5ff95a75d5bb0f3ce - + https://github.com/dotnet/runtime - 6f7af556d2761b0c93299cb88c61e4b747d6176a + c6e7ebdcb1b99c72990ae9f5ff95a75d5bb0f3ce https://github.com/dotnet/emsdk diff --git a/eng/Versions.props b/eng/Versions.props index cd53efa238e..1cebcb8f9a3 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,8 +2,8 @@ 8.0.100-rtm.23518.33 - 8.0.0-rtm.23517.16 - 8.0.0-rtm.23517.16 + 8.0.0-rtm.23518.26 + 8.0.0-rtm.23518.26 7.0.0-beta.22103.1 7.0.0-beta.22103.1 8.0.0-rtm.23511.3 From 90145fb81bd2dbcb145567e106b72750f5bb4aff Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 10:03:27 -0500 Subject: [PATCH 37/92] Bump to dotnet/runtime/release/8.0@11ad607efb (#8446) Changes: https://github.com/dotnet/runtime/compare/c6e7ebdcb1...11ad607efb Updates: * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23518.26 to 8.0.0-rtm.23520.16 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23518.26 to 8.0.0-rtm.23520.16 --- eng/Version.Details.xml | 8 ++++---- eng/Versions.props | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a375ac6b793..90401b9e08a 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,13 +4,13 @@ https://github.com/dotnet/installer 1657e2bb7b7766b5f0d27b9dbbb3be35634840c4 - + https://github.com/dotnet/runtime - c6e7ebdcb1b99c72990ae9f5ff95a75d5bb0f3ce + 11ad607efb2b31c5e1b906303fcd70341e9d5206 - + https://github.com/dotnet/runtime - c6e7ebdcb1b99c72990ae9f5ff95a75d5bb0f3ce + 11ad607efb2b31c5e1b906303fcd70341e9d5206 https://github.com/dotnet/emsdk diff --git a/eng/Versions.props b/eng/Versions.props index 1cebcb8f9a3..2395d64b49d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,8 +2,8 @@ 8.0.100-rtm.23518.33 - 8.0.0-rtm.23518.26 - 8.0.0-rtm.23518.26 + 8.0.0-rtm.23520.16 + 8.0.0-rtm.23520.16 7.0.0-beta.22103.1 7.0.0-beta.22103.1 8.0.0-rtm.23511.3 From d9d7e68bffb1c8edbc9e05a61300b3e846d56c3d Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Tue, 24 Oct 2023 15:44:34 +0000 Subject: [PATCH 38/92] Bump NDK to r26b (#8450) Changes: https://github.com/android/ndk/wiki/Changelog-r26#r26b NDK r26 failed to update LLVM to v17.0.1 and instead shipped with an earlier beta build of the v17 toolchain. r26b fixes this mistake and updates LLVM to 17.0.2, based on: * https://github.com/llvm/llvm-project/commits/c4c5e79dd4b4c78eee7cffd9b0d7394b5bedcf12 * https://android.googlesource.com/toolchain/llvm-project/+/d9f89f4d16663d5012e5c09495f3b30ece3d2362 --- .../xaprepare/ConfigAndData/BuildAndroidPlatforms.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs index 442a897ef6a..24675bcba58 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/BuildAndroidPlatforms.cs @@ -5,8 +5,8 @@ namespace Xamarin.Android.Prepare { class BuildAndroidPlatforms { - public const string AndroidNdkVersion = "26"; - public const string AndroidNdkPkgRevision = "26.0.10792818"; + public const string AndroidNdkVersion = "26b"; + public const string AndroidNdkPkgRevision = "26.1.10909125"; public const int NdkMinimumAPI = 21; public const int NdkMinimumAPILegacy32 = 21; From b48acafb42921772e76464917d3c0900a009d680 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:22:57 -0500 Subject: [PATCH 39/92] Bump to dotnet/runtime/release/8.0@59edaad404 8.0.0 (#8454) Changes: https://github.com/dotnet/runtime/compare/11ad607efb...59edaad404 Updates: * Microsoft.NET.ILLink.Tasks: from 8.0.0-rtm.23520.16 to 8.0.0 * Microsoft.NETCore.App.Ref: from 8.0.0-rtm.23520.16 to 8.0.0 Other changes: * Stable `$(DotNetMonoManifestVersionBand)` * Fix dotnet/emsdk dependency `Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100.Transport` renamed to remove `.Transport` off the end. * Stop hardcoding `$(DotNetEmscriptenManifestVersionBand)`. Ran `darc` commands to get proper version: > darc update-dependencies --coherency-only Checking for coherency updates... Using 'Strict' coherency mode. If this fails, a second attempt utilizing 'Legacy' Coherency mode will be made. Updating 'Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100': '' => '8.0.0' to ensure coherency with Microsoft.NETCore.App.Ref@8.0.0 * Start tracking `Microsoft.NET.ILLink` dependency Separate versioning from `Microsoft.NET.ILLink.Tasks` * Fix missing `WorkloadTelemetry.targets` file Solves the error: The imported project "/Users/runner/work/1/s/bin/Release/dotnet/sdk-manifests/8.0.100/microsoft.net.workload.mono.toolchain.current/WorkloadTelemetry.targets" was not found. Confirm that the expression in the Import declaration "/Users/runner/work/1/s/bin/Release/dotnet/sdk-manifests/8.0.100/microsoft.net.workload.mono.toolchain.current/WorkloadTelemetry.targets" is correct, and that the file exists on disk. No idea, why we haven't seen this before now? Co-authored-by: Jonathan Peppers --- NuGet.config | 8 ++++++++ .../xaprepare/Steps/Step_InstallDotNetPreview.cs | 4 ++-- eng/Version.Details.xml | 16 ++++++++++------ eng/Versions.props | 13 +++++++------ .../Microsoft.Android.Sdk.ILLink.csproj | 2 +- 5 files changed, 28 insertions(+), 15 deletions(-) diff --git a/NuGet.config b/NuGet.config index 1eda387eb45..a3c94bd6166 100644 --- a/NuGet.config +++ b/NuGet.config @@ -2,6 +2,14 @@ + + + + + + + + diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_InstallDotNetPreview.cs b/build-tools/xaprepare/xaprepare/Steps/Step_InstallDotNetPreview.cs index 8884a090c3a..c022a9f391b 100644 --- a/build-tools/xaprepare/xaprepare/Steps/Step_InstallDotNetPreview.cs +++ b/build-tools/xaprepare/xaprepare/Steps/Step_InstallDotNetPreview.cs @@ -57,11 +57,11 @@ protected override async Task Execute (Context context) var dotnets = new [] { "net6", "net7", "current" }; foreach (var dotnet in dotnets) { var destination = Path.Combine (sdk_manifests, context.Properties.GetRequiredValue (KnownProperties.DotNetMonoManifestVersionBand), $"microsoft.net.workload.mono.toolchain.{dotnet}"); - foreach (var file in Directory.GetFiles (string.Format (Configurables.Paths.MicrosoftNETWorkloadMonoToolChainDir, dotnet), "WorkloadManifest.*")) { + foreach (var file in Directory.GetFiles (string.Format (Configurables.Paths.MicrosoftNETWorkloadMonoToolChainDir, dotnet))) { Utilities.CopyFileToDir (file, destination); } destination = Path.Combine (sdk_manifests, context.Properties.GetRequiredValue (KnownProperties.DotNetEmscriptenManifestVersionBand), $"microsoft.net.workload.emscripten.{dotnet}"); - foreach (var file in Directory.GetFiles (string.Format (Configurables.Paths.MicrosoftNETWorkloadEmscriptenDir, dotnet), "WorkloadManifest.*")) { + foreach (var file in Directory.GetFiles (string.Format (Configurables.Paths.MicrosoftNETWorkloadEmscriptenDir, dotnet))) { Utilities.CopyFileToDir (file, destination); } } diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 90401b9e08a..131df9929d7 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,17 +4,21 @@ https://github.com/dotnet/installer 1657e2bb7b7766b5f0d27b9dbbb3be35634840c4 - + https://github.com/dotnet/runtime - 11ad607efb2b31c5e1b906303fcd70341e9d5206 + 59edaad404d1b8e47080015ae8d0787f94c970df - + https://github.com/dotnet/runtime - 11ad607efb2b31c5e1b906303fcd70341e9d5206 + 59edaad404d1b8e47080015ae8d0787f94c970df - + + https://github.com/dotnet/runtime + 59edaad404d1b8e47080015ae8d0787f94c970df + + https://github.com/dotnet/emsdk - 1b7f3a6560f6fb5f32b2758603c0376037f555ea + 51bf18a2e20024dfa89d63e20b0c3b695b5c1eed https://github.com/dotnet/cecil diff --git a/eng/Versions.props b/eng/Versions.props index 2395d64b49d..ecc3c47881f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,12 +2,13 @@ 8.0.100-rtm.23518.33 - 8.0.0-rtm.23520.16 - 8.0.0-rtm.23520.16 + 8.0.0-rtm.23524.7 + 8.0.0 + 8.0.0 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0-rtm.23511.3 - $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100TransportVersion) + 8.0.0 + $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version) 7.0.100-rc.1.22410.7 0.11.4-alpha.23509.2 $(MicrosoftNETCoreAppRefPackageVersion) @@ -18,8 +19,8 @@ \-(preview|rc|alpha).\d+ $(VersionBand)$([System.Text.RegularExpressions.Regex]::Match($(MicrosoftDotnetSdkInternalPackageVersion), $(VersionSuffixRegex))) $(DotNetPreviewVersionBand) - 8.0.100-rtm - 8.0.100-rtm + $(VersionBand)$([System.Text.RegularExpressions.Regex]::Match($(MicrosoftNETCoreAppRefPackageVersion), $(VersionSuffixRegex))) + $(VersionBand)$([System.Text.RegularExpressions.Regex]::Match($(MicrosoftNETWorkloadEmscriptenPackageVersion), $(VersionSuffixRegex))) $(DotNetPreviewVersionBand) diff --git a/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj b/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj index aa8694c7a3c..dca5c11d629 100644 --- a/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj +++ b/src/Microsoft.Android.Sdk.ILLink/Microsoft.Android.Sdk.ILLink.csproj @@ -7,7 +7,7 @@ $(MicrosoftAndroidSdkOutDir) - + From f63ac29fb3e48bfb5785e9fad03a64f68f7fc750 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 08:38:51 -0500 Subject: [PATCH 40/92] Bump to dotnet/installer/release/8.0.1xx@1dd37f868b 8.0.100-rtm.23524.17 (#8443) Changes: https://github.com/dotnet/installer/compare/1657e2bb7b...1dd37f868b Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23518.33 to 8.0.100-rtm.23524.17 Other changes: * NuGet feeds for dotnet/runtime 7.0.14 * NuGet feeds for dotnet/runtime 6.0.25 * Set `$(RestoreAdditionalProjectSources)` for submodules * Update NuGet.config Co-authored-by: Jonathan Peppers --- NuGet.config | 11 ++++++----- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- external/Java.Interop.override.props | 4 ++++ external/monodroid.override.props | 4 ++++ external/xamarin-android-tools.override.props | 8 ++++++++ 6 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 external/xamarin-android-tools.override.props diff --git a/NuGet.config b/NuGet.config index a3c94bd6166..a24c41ad9d8 100644 --- a/NuGet.config +++ b/NuGet.config @@ -19,11 +19,12 @@ - - - - - + + + + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 131df9929d7..9802f64a9f2 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - 1657e2bb7b7766b5f0d27b9dbbb3be35634840c4 + 1dd37f868b1e3abceced391beea9667e0af10694 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index ecc3c47881f..20fa0ee88f9 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23518.33 + 8.0.100-rtm.23524.17 8.0.0-rtm.23524.7 8.0.0 8.0.0 diff --git a/external/Java.Interop.override.props b/external/Java.Interop.override.props index 5242a70af3f..ceea3118a00 100644 --- a/external/Java.Interop.override.props +++ b/external/Java.Interop.override.props @@ -3,6 +3,10 @@ $(MSBuildThisFileDirectory)xamarin-android-tools True + + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-35db500c/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-4a336b1c/nuget/v3/index.json; + diff --git a/external/monodroid.override.props b/external/monodroid.override.props index 8cbac6945cf..894c67a7e15 100644 --- a/external/monodroid.override.props +++ b/external/monodroid.override.props @@ -2,6 +2,10 @@ $(MSBuildThisFileDirectory)xamarin-android-tools + + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-35db500c/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-4a336b1c/nuget/v3/index.json; + diff --git a/external/xamarin-android-tools.override.props b/external/xamarin-android-tools.override.props new file mode 100644 index 00000000000..d04a0151ab0 --- /dev/null +++ b/external/xamarin-android-tools.override.props @@ -0,0 +1,8 @@ + + + + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-35db500c/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-4a336b1c/nuget/v3/index.json; + + + From 1df3e255f3569444b0c190639f60571502e32874 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:09:35 -0500 Subject: [PATCH 41/92] Bump to dotnet/installer/release/8.0.1xx@7e4163a7e5 8.0.100-rtm.23526.4 (#8463) Changes: https://github.com/dotnet/installer/compare/1dd37f868b...7e4163a7e5 Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23524.17 to 8.0.100-rtm.23526.4 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 9802f64a9f2..62ac2dfdedb 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - 1dd37f868b1e3abceced391beea9667e0af10694 + 7e4163a7e5200c2f07c631c3001ad7f53c71b1d0 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 20fa0ee88f9..06463604d9f 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23524.17 + 8.0.100-rtm.23526.4 8.0.0-rtm.23524.7 8.0.0 8.0.0 From 5f1b293be96260dba6a2838d73237d35863d980e Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 30 Oct 2023 14:42:11 -0500 Subject: [PATCH 42/92] Bump to dotnet/installer/release/8.0.1xx@d6d8155f4f (#8471) Changes: https://github.com/dotnet/installer/compare/7e4163a7e5...d6d8155f4f Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23526.4 to 8.0.100-rtm.23527.17 --- NuGet.config | 2 ++ eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/NuGet.config b/NuGet.config index a24c41ad9d8..6c20b9d7892 100644 --- a/NuGet.config +++ b/NuGet.config @@ -5,6 +5,8 @@ + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 62ac2dfdedb..b1a0a8aa8ad 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - 7e4163a7e5200c2f07c631c3001ad7f53c71b1d0 + d6d8155f4fdb548222e438e73a7fd93813b8af11 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 06463604d9f..2db1ff47e5a 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23526.4 + 8.0.100-rtm.23527.17 8.0.0-rtm.23524.7 8.0.0 8.0.0 From f1b7113872c8db3dfee70d11925e81bb752dc8d0 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 31 Oct 2023 16:03:46 -0500 Subject: [PATCH 43/92] Bump to dotnet/installer/release/8.0.1xx@ae28d5bc06 8.0.100-rtm.23530.12 (#8474) Changes: https://github.com/dotnet/installer/compare/d6d8155f4f...ae28d5bc06 Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23527.17 to 8.0.100-rtm.23530.12 --- NuGet.config | 1 + eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/NuGet.config b/NuGet.config index 6c20b9d7892..3a7e95e5baa 100644 --- a/NuGet.config +++ b/NuGet.config @@ -5,6 +5,7 @@ + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index b1a0a8aa8ad..ce7e056c98b 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - d6d8155f4fdb548222e438e73a7fd93813b8af11 + ae28d5bc061eedfe863ef3e22d090054b69e7685 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 2db1ff47e5a..0af04a99156 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23527.17 + 8.0.100-rtm.23530.12 8.0.0-rtm.23524.7 8.0.0 8.0.0 From 94670f694acefac9ecc9a7d500a768d1400ae485 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Tue, 24 Oct 2023 14:00:33 -0400 Subject: [PATCH 44/92] [ci] Stop building monodroid in builds from forks (#8444) Removes all usage of provisionator and monodroid build and test steps when building a PR from a fork. --- build-tools/automation/azure-pipelines.yaml | 9 --- .../yaml-templates/build-macos.yaml | 2 - .../yaml-templates/commercial-build.yaml | 75 +++++++++---------- .../yaml-templates/run-installer.yaml | 5 +- .../setup-test-environment.yaml | 6 -- .../automation/yaml-templates/update-vs.yaml | 17 ----- build-tools/provisioning/vs2019.csx | 3 - build-tools/provisioning/xcode.csx | 3 - .../BuildTest.TestCaseSource.cs | 4 +- .../Xamarin.Android.Build.Tests/BuildTest.cs | 6 +- .../BuildWithLibraryTests.cs | 9 +-- .../DebuggingTasksTests.cs | 5 +- .../IncrementalBuildTest.cs | 2 + .../InvalidConfigTests.cs | 4 + .../Utilities/BaseTest.cs | 6 +- .../Utilities/DeviceTest.cs | 2 +- .../Common/ProjectBuilder.cs | 39 ++++++---- .../Tests/DebuggingTest.cs | 4 +- .../Tests/InstallAndRunTests.cs | 8 +- .../Tests/InstallTests.cs | 2 +- .../Tests/InstantRunTest.cs | 2 +- .../Tests/SystemApplicationTests.cs | 2 +- 22 files changed, 90 insertions(+), 125 deletions(-) delete mode 100644 build-tools/automation/yaml-templates/update-vs.yaml delete mode 100644 build-tools/provisioning/vs2019.csx delete mode 100644 build-tools/provisioning/xcode.csx diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 8d9db7ce126..3488fb0bbb2 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -37,9 +37,6 @@ resources: endpoint: xamarin parameters: -- name: provisionatorChannel - type: string - default: latest # Support for launching a build against a Provisionator PR (e.g., pr/[github-account-name]/[pr-number]) as a means to test in-progress Provisionator changes - name: macTestAgentsUseCleanImages # Test agents we do not need to clean up when finished because they are not reused default: true @@ -83,8 +80,6 @@ variables: # Stage and Job "display names" are shortened because they are combined to form the name of the corresponding GitHub check. stages: - template: yaml-templates/build-macos.yaml - parameters: - provisionatorChannel: ${{ parameters.provisionatorChannel }} - template: yaml-templates/build-windows.yaml @@ -107,7 +102,6 @@ stages: - template: yaml-templates/setup-test-environment.yaml parameters: provisionClassic: false - provisionatorChannel: ${{ parameters.provisionatorChannel }} installLegacyDotNet: false restoreNUnitConsole: false updateMono: false @@ -267,8 +261,6 @@ stages: - template: yaml-templates/setup-ubuntu.yaml - template: yaml-templates/setup-test-environment.yaml - parameters: - provisionatorChannel: ${{ parameters.provisionatorChannel }} - task: DownloadPipelineArtifact@2 inputs: @@ -347,7 +339,6 @@ stages: parameters: xaSourcePath: $(Build.SourcesDirectory)/xamarin-android provisionClassic: false - provisionatorChannel: ${{ parameters.provisionatorChannel }} installLegacyDotNet: false restoreNUnitConsole: false updateMono: false diff --git a/build-tools/automation/yaml-templates/build-macos.yaml b/build-tools/automation/yaml-templates/build-macos.yaml index d0ecd1dc33c..23d400ada95 100644 --- a/build-tools/automation/yaml-templates/build-macos.yaml +++ b/build-tools/automation/yaml-templates/build-macos.yaml @@ -11,7 +11,6 @@ parameters: jobName: mac_build_create_installers jobDisplayName: macOS > Build nugetArtifactName: $(NuGetArtifactName) - provisionatorChannel: latest repositoryAlias: self stageName: mac_build stageDisplayName: Mac @@ -49,7 +48,6 @@ stages: parameters: installerArtifactName: ${{ parameters.installerArtifactName }} nugetArtifactName: ${{ parameters.nugetArtifactName }} - provisionatorChannel: ${{ parameters.provisionatorChannel }} testAssembliesArtifactName: ${{ parameters.testAssembliesArtifactName }} - powershell: | diff --git a/build-tools/automation/yaml-templates/commercial-build.yaml b/build-tools/automation/yaml-templates/commercial-build.yaml index 8ab2c3a041d..f7c74a596bb 100644 --- a/build-tools/automation/yaml-templates/commercial-build.yaml +++ b/build-tools/automation/yaml-templates/commercial-build.yaml @@ -3,7 +3,6 @@ parameters: xaSourcePath: $(System.DefaultWorkingDirectory)/xamarin-android makeMSBuildArgs: '' nugetArtifactName: $(NuGetArtifactName) - provisionatorChannel: latest testAssembliesArtifactName: $(TestAssembliesArtifactName) steps: @@ -19,55 +18,49 @@ steps: inputs: forceReinstallCredentialProvider: true -- task: provisionator@2 - displayName: Install Xcode - inputs: - github_token: $(GitHub.Token) - provisioning_script: ${{ parameters.xaSourcePath }}/build-tools/provisioning/xcode.csx - provisioning_extra_args: '-v -v -v -v' - env: - PROVISIONATOR_CHANNEL: ${{ parameters.provisionatorChannel }} - - script: make prepare-update-mono CONFIGURATION=$(XA.Build.Configuration) PREPARE_CI=1 PREPARE_AUTOPROVISION=1 workingDirectory: ${{ parameters.xaSourcePath }} displayName: make prepare-update-mono -# Clone 'monodroid' without submodules -- checkout: monodroid - clean: true - path: s/xamarin-android/external/monodroid - -# Tell git to ignore the 'xamarin-android' submodule, which is large and unneeded -- script: git config submodule."external/xamarin-android".update none - workingDirectory: xamarin-android/external/monodroid - displayName: Ignore XA submodule - -# Clone 'monodroid' with the rest of the submodules -- checkout: monodroid - submodules: recursive - path: s/xamarin-android/external/monodroid - persistCredentials: true - -- script: rm -rf external/monodroid/external/xamarin-android - workingDirectory: ${{ parameters.xaSourcePath }} - displayName: delete legacy xamarin-android submodule - -- script: rm -rf external/opentk - workingDirectory: ${{ parameters.xaSourcePath }} - displayName: delete legacy opentk submodule - -- script: rm -rf external/sqlite - workingDirectory: ${{ parameters.xaSourcePath }} - displayName: delete legacy sqlite submodule +# Always checkout a second resource to ensure we are using multi-repo checkout behavior +# https://learn.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#checkout-path +- checkout: yaml-templates + +- ${{ if ne(variables['System.PullRequest.IsFork'], 'True') }}: + - script: > + ls -l /Applications && + sudo xcode-select --switch /Applications/Xcode_14.2.app && + xcode-select --print-path + displayName: Use Xcode 14.2 + + # Clone 'monodroid' without submodules + - checkout: monodroid + clean: true + path: s/xamarin-android/external/monodroid + + # Tell git to ignore the 'xamarin-android' submodule, which is large and unneeded + - script: git config submodule."external/xamarin-android".update none + workingDirectory: xamarin-android/external/monodroid + displayName: Ignore XA submodule + + # Clone 'monodroid' with the rest of the submodules + - checkout: monodroid + submodules: recursive + path: s/xamarin-android/external/monodroid + persistCredentials: true + + - script: rm -rf external/monodroid/external/xamarin-android + workingDirectory: ${{ parameters.xaSourcePath }} + displayName: delete legacy xamarin-android submodule + + - script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration) + workingDirectory: ${{ parameters.xaSourcePath }} + displayName: make prepare-external-git-dependencies - task: CodeQL3000Init@0 displayName: CodeQL 3000 Init condition: and(succeeded(), eq(variables['Codeql.Enabled'], 'true'), eq(variables['Build.SourceBranch'], 'refs/heads/main')) -- script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration) - workingDirectory: ${{ parameters.xaSourcePath }} - displayName: make prepare-external-git-dependencies - # Prepare and Build everything - script: make jenkins CONFIGURATION=$(XA.Build.Configuration) PREPARE_CI=1 PREPARE_AUTOPROVISION=1 MSBUILD_ARGS='${{ parameters.makeMSBuildArgs }}' workingDirectory: ${{ parameters.xaSourcePath }} diff --git a/build-tools/automation/yaml-templates/run-installer.yaml b/build-tools/automation/yaml-templates/run-installer.yaml index e7db3bf471f..b66b0209ada 100644 --- a/build-tools/automation/yaml-templates/run-installer.yaml +++ b/build-tools/automation/yaml-templates/run-installer.yaml @@ -1,6 +1,5 @@ parameters: provisionExtraArgs: -vv -f - provisionatorChannel: latest steps: - task: DownloadPipelineArtifact@2 @@ -38,6 +37,4 @@ steps: provisioning_script: $(XA.Provisionator.Args) provisioning_extra_args: ${{ parameters.provisionExtraArgs }} # Disabled on Windows on .NET release branches - condition: and(succeeded(), ne(variables['agent.os'], 'Linux'), or(eq(variables.IsRelOrTargetingRel, 'False'), eq(variables['agent.os'], 'Darwin'))) - env: - PROVISIONATOR_CHANNEL: ${{ parameters.provisionatorChannel }} + condition: and(succeeded(), ne(variables['System.PullRequest.IsFork'], 'True'), ne(variables['agent.os'], 'Linux'), or(eq(variables.IsRelOrTargetingRel, 'False'), eq(variables['agent.os'], 'Darwin'))) diff --git a/build-tools/automation/yaml-templates/setup-test-environment.yaml b/build-tools/automation/yaml-templates/setup-test-environment.yaml index 6b98286ab37..0a8e6a787fe 100644 --- a/build-tools/automation/yaml-templates/setup-test-environment.yaml +++ b/build-tools/automation/yaml-templates/setup-test-environment.yaml @@ -1,7 +1,6 @@ parameters: configuration: $(XA.Build.Configuration) xaSourcePath: $(System.DefaultWorkingDirectory) - updateVS: false jdkTestFolder: $(JAVA_HOME_11_X64) remove_dotnet: false installTestSlicer: false @@ -24,11 +23,6 @@ steps: clean: true submodules: recursive -- ${{ if eq(parameters.updateVS, true) }}: - - template: update-vs.yaml - parameters: - xasourcePath: ${{ parameters.xaSourcePath }} - - script: | echo "##vso[task.setvariable variable=JI_JAVA_HOME]${{ parameters.jdkTestFolder }}" echo "##vso[task.setvariable variable=DOTNET_TOOL_PATH]${{ parameters.xaSourcePath }}/bin/${{ parameters.configuration }}/dotnet/dotnet" diff --git a/build-tools/automation/yaml-templates/update-vs.yaml b/build-tools/automation/yaml-templates/update-vs.yaml deleted file mode 100644 index 22154203e59..00000000000 --- a/build-tools/automation/yaml-templates/update-vs.yaml +++ /dev/null @@ -1,17 +0,0 @@ -parameters: - xaSourcePath: $(System.DefaultWorkingDirectory) - condition: eq(variables['agent.os'], 'Windows_NT') - -steps: -- task: provisionator@2 - displayName: update VS 2019 - timeoutInMinutes: 60 - inputs: - github_token: $(Github.Token) - provisioning_script: ${{ parameters.xaSourcePath }}\build-tools\provisioning\vs2019.csx - provisioning_extra_args: -vv - condition: ${{ parameters.condition }} - -- template: environment/win/vs-msbuild.v1.yml@yaml-templates # Display (in log) VS installation(s) including installation status with associated MSBuild location(s) - parameters: - condition: ${{ parameters.condition }} diff --git a/build-tools/provisioning/vs2019.csx b/build-tools/provisioning/vs2019.csx deleted file mode 100644 index 8acaf3a3833..00000000000 --- a/build-tools/provisioning/vs2019.csx +++ /dev/null @@ -1,3 +0,0 @@ -VisualStudio (VisualStudioChannel.Stable, VisualStudioTier.Enterprise, 16, @"%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise", true) - .Workload (VisualStudioWorkload.ManagedDesktop) - .Workload (VisualStudioWorkload.NetCrossPlat); diff --git a/build-tools/provisioning/xcode.csx b/build-tools/provisioning/xcode.csx deleted file mode 100644 index 8aafbaf8e16..00000000000 --- a/build-tools/provisioning/xcode.csx +++ /dev/null @@ -1,3 +0,0 @@ -if (IsMac) { - Xcode ("13.4").XcodeSelect (); -} diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs index ba570cce8ca..f30f2f2388d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.TestCaseSource.cs @@ -124,7 +124,7 @@ public partial class BuildTest : BaseTest /* debugSymbols */ true , /* optimize */ true , /* embedassebmlies */ false , - /* expectedResult */ CommercialBuildAvailable ? "debug" : "release", + /* expectedResult */ TestEnvironment.CommercialBuildAvailable ? "debug" : "release", }, new object[] { /* supportedAbi */ "armeabi-v7a", @@ -145,7 +145,7 @@ public partial class BuildTest : BaseTest /* debugSymbols */ false , /* optimize */ null , /* embedassebmlies */ null , - /* expectedResult */ CommercialBuildAvailable ? "debug" : "release", + /* expectedResult */ TestEnvironment.CommercialBuildAvailable ? "debug" : "release", }, }; #pragma warning restore 414 diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index 9405f155328..cd269edafe0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -139,12 +139,12 @@ public void DotNetBuild (string runtimeIdentifiers, bool isRelease, bool aot, bo Assert.AreEqual (XABuildConfig.AndroidDefaultTargetDotnetApiLevel.ToString(), uses_sdk.Attribute (ns + "targetSdkVersion").Value); - bool expectEmbeddedAssembies = !(CommercialBuildAvailable && !isRelease); + bool expectEmbeddedAssembies = !(TestEnvironment.CommercialBuildAvailable && !isRelease); var apkPath = Path.Combine (outputPath, $"{proj.PackageName}-Signed.apk"); FileAssert.Exists (apkPath); var helper = new ArchiveAssemblyHelper (apkPath, usesAssemblyStore, rids); helper.AssertContainsEntry ($"assemblies/{proj.ProjectName}.dll", shouldContainEntry: expectEmbeddedAssembies); - helper.AssertContainsEntry ($"assemblies/{proj.ProjectName}.pdb", shouldContainEntry: !CommercialBuildAvailable && !isRelease); + helper.AssertContainsEntry ($"assemblies/{proj.ProjectName}.pdb", shouldContainEntry: !TestEnvironment.CommercialBuildAvailable && !isRelease); helper.AssertContainsEntry ($"assemblies/Mono.Android.dll", shouldContainEntry: expectEmbeddedAssembies); helper.AssertContainsEntry ($"assemblies/es/{proj.ProjectName}.resources.dll", shouldContainEntry: expectEmbeddedAssembies); foreach (var abi in rids.Select (AndroidRidAbiHelper.RuntimeIdentifierToAbi)) { @@ -1030,6 +1030,8 @@ public void MicrosoftExtensionsHttp () [Test] public void FastDeploymentDoesNotAddContentProvider () { + AssertCommercialBuild (); + var proj = new XamarinAndroidApplicationProject { EmbedAssembliesIntoApk = false, }; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs index 48e7457d97c..d1c8b1cefa4 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildWithLibraryTests.cs @@ -605,11 +605,10 @@ public void DuplicateManagedNames () } [Test] - [Category ("Commercial")] public void LibraryProjectsShouldSkipGetPrimaryCpuAbi () { - if (!CommercialBuildAvailable) - Assert.Ignore ("Not required on Open Source Builds"); + AssertCommercialBuild (); + const string target = "_GetPrimaryCpuAbi"; var proj = new XamarinAndroidLibraryProject (); using (var b = CreateDllBuilder (Path.Combine ("temp", TestName))) { @@ -619,10 +618,10 @@ public void LibraryProjectsShouldSkipGetPrimaryCpuAbi () } [Test] - [Category ("Commercial")] public void LibraryReferenceWithHigherTFVShouldDisplayWarning ([Values (true, false)] bool isRelease) { - if (!CommercialBuildAvailable || Builder.UseDotNet) + + if (!TestEnvironment.CommercialBuildAvailable || Builder.UseDotNet) Assert.Ignore ("Not applicable to One .NET or single framework OSS builds."); var libproj = new XamarinAndroidLibraryProject () { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs index 27177273816..1e581bc8cfa 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/DebuggingTasksTests.cs @@ -10,15 +10,14 @@ namespace Xamarin.Android.Build.Tests { - [Category ("Node-2"), Category ("Commercial")] + [Category ("Node-2")] [TestFixture, NonParallelizable] public class DebuggingTasksTests : BaseTest { [OneTimeSetUp] public void SetUp () { - if (!CommercialBuildAvailable) - Assert.Ignore ("DebuggingTasksTests require Xamarin.Android.Build.Debugging.Tasks."); + AssertCommercialBuild (); } // https://github.com/xamarin/monodroid/blob/63bbeb076d809c74811a8001d38bf2e9e8672627/tests/msbuild/nunit/Xamarin.Android.Build.Tests/Xamarin.Android.Build.Tests/ResolveXamarinAndroidToolsTests.cs 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 91649d560ef..9c8dfc894e2 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 @@ -694,6 +694,8 @@ public void LinkAssembliesNoShrink () [Test] public void CSProjUserFileChanges () { + AssertCommercialBuild (); + var proj = new XamarinAndroidApplicationProject (); var selectedDevice = "foo"; var csproj_user_file = $"{proj.ProjectName}.csproj.user"; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs index 5938f7102e3..e46af666639 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/InvalidConfigTests.cs @@ -73,6 +73,8 @@ public void EolFrameworks() [Test] public void XA0119 () { + AssertCommercialBuild (); + var proj = new XamarinAndroidApplicationProject (); proj.SetProperty ("_XASupportsFastDev", "True"); proj.SetProperty (proj.DebugProperties, "AndroidLinkMode", "Full"); @@ -86,6 +88,8 @@ public void XA0119 () [Test] public void XA0119AAB () { + AssertCommercialBuild (); + var proj = new XamarinAndroidApplicationProject (); proj.SetProperty ("_XASupportsFastDev", "True"); proj.SetProperty ("AndroidPackageFormat", "aab"); diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs index ec66ffc55cd..29c00189e8e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/BaseTest.cs @@ -27,16 +27,14 @@ public class BaseTest public string Root => Path.GetFullPath (XABuildPaths.TestOutputDirectory); - public static bool CommercialBuildAvailable => TestEnvironment.CommercialBuildAvailable; - /// /// Checks if a commercial Xamarin.Android is available /// * Defaults to Assert.Ignore () /// public void AssertCommercialBuild (bool fail = false) { - if (!CommercialBuildAvailable) { - var message = "This test requires a commercial build of Xamarin.Android."; + if (!TestEnvironment.CommercialBuildAvailable) { + var message = $"'{TestName}' requires a commercial build of Xamarin.Android."; if (fail) { Assert.Fail (message); } else { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs index 825e77f6735..ed5becf6940 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Utilities/DeviceTest.cs @@ -203,7 +203,7 @@ protected static void RunProjectAndAssert (XamarinAndroidApplicationProject proj if (Builder.UseDotNet) { builder.BuildLogFile = logName; Assert.True (builder.RunTarget (proj, "Run", doNotCleanupOnUpdate: doNotCleanupOnUpdate, parameters: parameters), "Project should have run."); - } else if (CommercialBuildAvailable) { + } else if (TestEnvironment.CommercialBuildAvailable) { builder.BuildLogFile = logName; Assert.True (builder.RunTarget (proj, "_Run", doNotCleanupOnUpdate: doNotCleanupOnUpdate, parameters: parameters), "Project should have run."); } else { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs index 6118fc6a0c8..afa07f3ce27 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Common/ProjectBuilder.cs @@ -5,6 +5,7 @@ using System.Diagnostics; using Microsoft.Build.Framework; using System.Xml.Linq; +using Xamarin.Android.Tools; namespace Xamarin.ProjectTools { @@ -154,21 +155,29 @@ public struct RuntimeInfo public RuntimeInfo [] GetSupportedRuntimes () { var runtimeInfo = new List (); - foreach (var file in Directory.EnumerateFiles (Path.Combine (TestEnvironment.AndroidMSBuildDirectory, "lib"), "libmono-android.*.so", SearchOption.AllDirectories)) { - string fullFilePath = Path.GetFullPath (file); - DirectoryInfo parentDir = Directory.GetParent (fullFilePath); - if (parentDir == null) - continue; - string[] items = Path.GetFileName (fullFilePath).Split ('.' ); - if (items.Length != 3) - continue; - var fi = new FileInfo (fullFilePath); - runtimeInfo.Add (new RuntimeInfo () { - Name = "libmonodroid.so", - Runtime = items [1], // release|debug - Abi = parentDir.Name, // armaebi|x86|arm64-v8a - Size = (int)fi.Length, // int - }); + var runtimeDirs = new HashSet (); + var rootRuntimeDirs = Directory.GetDirectories (TestEnvironment.DotNetPreviewPacksDirectory, $"Microsoft.Android.Runtime.{XABuildConfig.AndroidDefaultTargetDotnetApiLevel}.*"); + foreach (var dir in rootRuntimeDirs) { + runtimeDirs.Add (Directory.GetDirectories (dir).LastOrDefault ()); + } + + foreach (var runtimeDir in runtimeDirs) { + foreach (var file in Directory.EnumerateFiles (runtimeDir, "libmono-android.*.so", SearchOption.AllDirectories)) { + string fullFilePath = Path.GetFullPath (file); + DirectoryInfo parentDir = Directory.GetParent (fullFilePath); + if (parentDir == null) + continue; + string[] items = Path.GetFileName (fullFilePath).Split ('.' ); + if (items.Length != 3) + continue; + var fi = new FileInfo (fullFilePath); + runtimeInfo.Add (new RuntimeInfo () { + Name = "libmonodroid.so", + Runtime = items [1], // release|debug + Abi = parentDir.Name, // armaebi|x86|arm64-v8a + Size = (int)fi.Length, // int + }); + } } return runtimeInfo.ToArray (); } diff --git a/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs b/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs index b94326b4684..5acf58203bd 100755 --- a/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs +++ b/tests/MSBuildDeviceIntegration/Tests/DebuggingTest.cs @@ -58,7 +58,7 @@ public void ApplicationRunsWithoutDebugger ([Values (false, true)] bool isReleas var proj = new XamarinFormsAndroidApplicationProject () { IsRelease = isRelease, }; - if (isRelease || !CommercialBuildAvailable) { + if (isRelease || !TestEnvironment.CommercialBuildAvailable) { proj.SetAndroidSupportedAbis ("armeabi-v7a", "x86", "x86_64"); } proj.SetDefaultTargetDevice (); @@ -90,7 +90,7 @@ public void ClassLibraryMainLauncherRuns ([Values (true, false)] bool preloadAss var app = new XamarinAndroidApplicationProject { ProjectName = "MyApp", }; - if (!CommercialBuildAvailable) { + if (!TestEnvironment.CommercialBuildAvailable) { app.SetAndroidSupportedAbis ("armeabi-v7a", "x86", "x86_64"); } app.SetDefaultTargetDevice (); diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index b6553ecdef6..f8ef61db4a4 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -73,7 +73,7 @@ public void NativeAssemblyCacheWithSatelliteAssemblies ([Values (true, false)] b Assert.IsTrue (helper.Exists ($"assemblies/{lang}/{lib.ProjectName}.resources.dll"), $"Apk should contain satellite assembly for language '{lang}'!"); } - Assert.True (builder.RunTarget (proj, "_Run"), "Project should have run."); + RunProjectAndAssert (proj, builder); Assert.True (WaitForActivityToStart (proj.PackageName, "MainActivity", Path.Combine (Root, builder.ProjectDirectory, "logcat.log"), 30), "Activity should have started."); } @@ -88,7 +88,7 @@ public void GlobalLayoutEvent_ShouldRegisterAndFire_OnActivityLaunch ([Values (f IsRelease = isRelease, SupportedOSPlatformVersion = "23", }; - if (isRelease || !CommercialBuildAvailable) { + if (isRelease || !TestEnvironment.CommercialBuildAvailable) { proj.SetAndroidSupportedAbis ("armeabi-v7a", "arm64-v8a", "x86", "x86_64"); } proj.MainActivity = proj.DefaultMainActivity.Replace ("//${AFTER_ONCREATE}", @@ -356,7 +356,7 @@ public void JsonDeserializationCreatesJavaHandle ([Values (false, true)] bool is // error SYSLIB0011: 'BinaryFormatter.Serialize(Stream, object)' is obsolete: 'BinaryFormatter serialization is obsolete and should not be used. See https://aka.ms/binaryformatter for more information.' proj.SetProperty ("NoWarn", "SYSLIB0011"); - if (isRelease || !CommercialBuildAvailable) { + if (isRelease || !TestEnvironment.CommercialBuildAvailable) { proj.SetAndroidSupportedAbis ("armeabi-v7a", "arm64-v8a", "x86", "x86_64"); } @@ -616,6 +616,8 @@ public void ResourceDesignerWithNuGetReference ([Values ("net8.0-android")] stri [Test] public void SingleProject_ApplicationId ([Values (false, true)] bool testOnly) { + AssertCommercialBuild (); + proj = new XamarinAndroidApplicationProject (); proj.SetProperty ("ApplicationId", "com.i.should.get.overridden.by.the.manifest"); if (testOnly) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs index 75ffe121ca4..d77fec4f228 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallTests.cs @@ -12,7 +12,7 @@ namespace Xamarin.Android.Build.Tests { [TestFixture] - [Category ("Commercial"), Category ("UsesDevice")] + [Category ("UsesDevice")] public class InstallTests : DeviceTest { string GetContentFromAllOverrideDirectories (string packageName, bool useRunAsCommand = true) diff --git a/tests/MSBuildDeviceIntegration/Tests/InstantRunTest.cs b/tests/MSBuildDeviceIntegration/Tests/InstantRunTest.cs index 6cbc552c57b..5c4b9429b08 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstantRunTest.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstantRunTest.cs @@ -7,7 +7,7 @@ namespace Xamarin.Android.Build.Tests { [TestFixture] - [Category ("Commercial"), Category ("UsesDevice")] + [Category ("UsesDevice")] public class InstantRunTest : DeviceTest { [Test] diff --git a/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs b/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs index 6d41a39204f..ccd23bc34d2 100644 --- a/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/SystemApplicationTests.cs @@ -11,7 +11,7 @@ namespace Xamarin.Android.Build.Tests { [TestFixture] - [Category ("Commercial"), Category ("UsesDevice")] + [Category ("UsesDevice")] public class SystemApplicationTests : DeviceTest { // All Tests here require the emulator to be started with -writable-system From 4d9fe5f5d985f718b419bba0587da58e98f46a5e Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Tue, 24 Oct 2023 19:25:48 -0400 Subject: [PATCH 45/92] [ci] Only use Xcode 14 on CI builds (#8457) Xcode 14 has not yet been rolled out to all the PR builders. --- .../automation/yaml-templates/commercial-build.yaml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/build-tools/automation/yaml-templates/commercial-build.yaml b/build-tools/automation/yaml-templates/commercial-build.yaml index f7c74a596bb..5a84b5b119b 100644 --- a/build-tools/automation/yaml-templates/commercial-build.yaml +++ b/build-tools/automation/yaml-templates/commercial-build.yaml @@ -26,13 +26,14 @@ steps: # https://learn.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#checkout-path - checkout: yaml-templates -- ${{ if ne(variables['System.PullRequest.IsFork'], 'True') }}: - - script: > - ls -l /Applications && - sudo xcode-select --switch /Applications/Xcode_14.2.app && - xcode-select --print-path - displayName: Use Xcode 14.2 +- script: > + ls -l /Applications && + sudo xcode-select --switch /Applications/Xcode_14.2.app && + xcode-select --print-path + displayName: Use Xcode 14.2 + condition: and(succeeded(), eq(variables['MicroBuildSignType'], 'Real')) +- ${{ if ne(variables['System.PullRequest.IsFork'], 'True') }}: # Clone 'monodroid' without submodules - checkout: monodroid clean: true From 35cd97d397f2555c21612e1b90f24561a9662e91 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Thu, 2 Nov 2023 13:41:29 -0400 Subject: [PATCH 46/92] [ci] Fix builds from forks (#8479) The Xamarin.Android-PR pipeline has been updated to restrict builds from forks, which surfaced a few issues that were missed in commit b1bb67b3. The Linux build and the repo used to preserve multi-repo checkout behavior have been updated to fix these issues. --- .../yaml-templates/build-linux.yaml | 29 +++++++++++-------- .../yaml-templates/commercial-build.yaml | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/build-tools/automation/yaml-templates/build-linux.yaml b/build-tools/automation/yaml-templates/build-linux.yaml index 12ea459a70e..859ab2b4b46 100644 --- a/build-tools/automation/yaml-templates/build-linux.yaml +++ b/build-tools/automation/yaml-templates/build-linux.yaml @@ -40,15 +40,24 @@ stages: path: ${{ parameters.checkoutPath }} persistCredentials: ${{ parameters.checkoutPersistCredentials }} - - checkout: monodroid - clean: true - submodules: recursive - path: s/xamarin-android/external/monodroid - persistCredentials: true + # Always checkout a second resource to ensure we are using multi-repo checkout behavior + # https://learn.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#checkout-path + - checkout: maui - - script: rm -rf external/monodroid/external/xamarin-android - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: delete external xamarin-android submodule + - ${{ if ne(variables['System.PullRequest.IsFork'], 'True') }}: + - checkout: monodroid + clean: true + submodules: recursive + path: s/xamarin-android/external/monodroid + persistCredentials: true + + - script: rm -rf external/monodroid/external/xamarin-android + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: delete external xamarin-android submodule + + - script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration) + workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android + displayName: make prepare-external-git-dependencies - template: setup-ubuntu.yaml @@ -57,10 +66,6 @@ stages: inputs: forceReinstallCredentialProvider: true - - script: make prepare-external-git-dependencies PREPARE_CI=1 CONFIGURATION=$(XA.Build.Configuration) - workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android - displayName: make prepare-external-git-dependencies - - script: make jenkins PREPARE_CI=1 PREPARE_AUTOPROVISION=1 CONFIGURATION=$(XA.Build.Configuration) workingDirectory: $(System.DefaultWorkingDirectory)/xamarin-android displayName: make jenkins diff --git a/build-tools/automation/yaml-templates/commercial-build.yaml b/build-tools/automation/yaml-templates/commercial-build.yaml index 5a84b5b119b..59a2dd2f10b 100644 --- a/build-tools/automation/yaml-templates/commercial-build.yaml +++ b/build-tools/automation/yaml-templates/commercial-build.yaml @@ -24,7 +24,7 @@ steps: # Always checkout a second resource to ensure we are using multi-repo checkout behavior # https://learn.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops#checkout-path -- checkout: yaml-templates +- checkout: maui - script: > ls -l /Applications && From 388ff7bc6685a55d4752eae6c9acf8d1a7c6831a Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Fri, 3 Nov 2023 16:27:32 -0400 Subject: [PATCH 47/92] [ci] Use python 3.11.x (#8483) Context: https://github.com/xamarin/xamarin-android/commit/4fffbf686bad5479a8ef7954d7d9d0d68941f034 Authenticode signing attempts recently started failing again due to issues installing the `xsignextension`. We believe python 3.12 may have caused this breakage, so we're pinning to 3.11.x for now. --- .../automation/yaml-templates/install-microbuild-tooling.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml b/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml index 0e9a983af7a..a57dd9561a1 100644 --- a/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml +++ b/build-tools/automation/yaml-templates/install-microbuild-tooling.yaml @@ -11,7 +11,7 @@ steps: - task: UsePythonVersion@0 inputs: - versionSpec: 3.x + versionSpec: 3.11.x # ESRP signing requires minimum azure client version 2.8.0 - template: azure-tools/az-client-update.yml@yaml-templates From 71eb027105efdb0132845137cf77871b43e28d06 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Mon, 27 Nov 2023 10:42:33 -0500 Subject: [PATCH 48/92] [ci] Fix nightly build (#8527) Commit 204225b8 broke the nightly build, as it added a `maui` checkout to the main build and the maui resource was night defined in the nightly pipeline. This checkout was added as a sort of workaround to make sure we are always checking out at least 2 repos, so that our sources are placed into consistent locations. --- build-tools/automation/azure-pipelines-nightly.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build-tools/automation/azure-pipelines-nightly.yaml b/build-tools/automation/azure-pipelines-nightly.yaml index a67b701fbb3..cadf59d37ec 100644 --- a/build-tools/automation/azure-pipelines-nightly.yaml +++ b/build-tools/automation/azure-pipelines-nightly.yaml @@ -20,6 +20,10 @@ resources: type: github name: xamarin/monodroid endpoint: xamarin + - repository: maui + type: github + name: dotnet/maui + endpoint: xamarin # Global variables variables: From 94b31becb1d773abecbd058db55b4f8a725ed11c Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Wed, 25 Oct 2023 20:44:09 -0400 Subject: [PATCH 49/92] [build] Do not install build-tools 30.0.3 (#8461) Context: https://github.com/xamarin/xamarin-android/commit/6eb11f159c692563200ffb88cddc7b69f761cace We do not need to provision build-tools version 30.0.3 as `dx` is no longer supported. --- Configuration.props | 8 -------- .../xaprepare/Application/KnownProperties.cs | 6 ------ .../xaprepare/Application/Properties.Defaults.cs.in | 6 ------ .../ConfigAndData/Dependencies/AndroidToolchain.cs | 9 --------- .../xaprepare/Steps/Step_Get_Android_BuildTools.cs | 11 ----------- build-tools/xaprepare/xaprepare/xaprepare.targets | 6 ------ 6 files changed, 46 deletions(-) diff --git a/Configuration.props b/Configuration.props index fa0577572ae..a65752bbe2e 100644 --- a/Configuration.props +++ b/Configuration.props @@ -137,14 +137,6 @@ $(XABuildToolsPackagePrefixWindows) 34 34.0.0 - - f6d24b187cc6bd534c6c37604205171784ac5621. - 91936d4ee3ccc839f0addd53c9ebf087b1e39251. - - $(XABuildTools30PackagePrefixMacOS) - $(XABuildTools30PackagePrefixWindows) - 30.0.3 - 30.0.3 34.0.1 False diff --git a/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs b/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs index a4df4d587f1..ea4e25770b3 100644 --- a/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs +++ b/build-tools/xaprepare/xaprepare/Application/KnownProperties.cs @@ -65,12 +65,6 @@ static class KnownProperties public const string XABuildToolsPackagePrefixWindows = "XABuildToolsPackagePrefixWindows"; public const string XABuildToolsPackagePrefixLinux = "XABuildToolsPackagePrefixLinux"; public const string XABuildToolsPackagePrefix = "XABuildToolsPackagePrefix"; - public const string XABuildTools30Folder = "XABuildTools30Folder"; - public const string XABuildTools30Version = "XABuildTools30Version"; - public const string XABuildTools30PackagePrefixMacOS = "XABuildTools30PackagePrefixMacOS"; - public const string XABuildTools30PackagePrefixWindows = "XABuildTools30PackagePrefixWindows"; - public const string XABuildTools30PackagePrefixLinux = "XABuildTools30PackagePrefixLinux"; - public const string XABuildTools30PackagePrefix = "XABuildTools30PackagePrefix"; public const string XABinRelativeInstallPrefix = "XABinRelativeInstallPrefix"; public const string XAInstallPrefix = "XAInstallPrefix"; public const string XAPlatformToolsVersion = "XAPlatformToolsVersion"; diff --git a/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in b/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in index 4f461e18369..b0220aa9717 100644 --- a/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in +++ b/build-tools/xaprepare/xaprepare/Application/Properties.Defaults.cs.in @@ -69,12 +69,6 @@ namespace Xamarin.Android.Prepare properties.Add (KnownProperties.XABuildToolsPackagePrefixWindows, StripQuotes ("@XABuildToolsPackagePrefixWindows@")); properties.Add (KnownProperties.XABuildToolsPackagePrefixLinux, StripQuotes ("@XABuildToolsPackagePrefixLinux@")); properties.Add (KnownProperties.XABuildToolsPackagePrefix, StripQuotes ("@XABuildToolsPackagePrefix@")); - properties.Add (KnownProperties.XABuildTools30Folder, StripQuotes (@"@XABuildTools30Folder@")); - properties.Add (KnownProperties.XABuildTools30Version, StripQuotes ("@XABuildTools30Version@")); - properties.Add (KnownProperties.XABuildTools30PackagePrefixMacOS, StripQuotes ("@XABuildTools30PackagePrefixMacOS@")); - properties.Add (KnownProperties.XABuildTools30PackagePrefixWindows, StripQuotes ("@XABuildTools30PackagePrefixWindows@")); - properties.Add (KnownProperties.XABuildTools30PackagePrefixLinux, StripQuotes ("@XABuildTools30PackagePrefixLinux@")); - properties.Add (KnownProperties.XABuildTools30PackagePrefix, StripQuotes ("@XABuildTools30PackagePrefix@")); properties.Add (KnownProperties.XABinRelativeInstallPrefix, StripQuotes (@"@XABinRelativeInstallPrefix@")); properties.Add (KnownProperties.XAInstallPrefix, StripQuotes (@"@XAInstallPrefix@")); properties.Add (KnownProperties.XAPlatformToolsVersion, StripQuotes ("@XAPlatformToolsVersion@")); diff --git a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs index 1b6e6d07e68..6560909ed13 100644 --- a/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs +++ b/build-tools/xaprepare/xaprepare/ConfigAndData/Dependencies/AndroidToolchain.cs @@ -26,9 +26,6 @@ public AndroidToolchain () string XABuildToolsFolder = GetRequiredProperty (KnownProperties.XABuildToolsFolder); string XABuildToolsVersion = GetRequiredProperty (KnownProperties.XABuildToolsVersion); string XABuildToolsPackagePrefix = Context.Instance.Properties [KnownProperties.XABuildToolsPackagePrefix] ?? String.Empty; - string XABuildTools30Folder = GetRequiredProperty (KnownProperties.XABuildTools30Folder); - string XABuildTools30Version = GetRequiredProperty (KnownProperties.XABuildTools30Version); - string XABuildTools30PackagePrefix = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefix] ?? String.Empty; string XAPlatformToolsVersion = GetRequiredProperty (KnownProperties.XAPlatformToolsVersion); string XAPlatformToolsPackagePrefix = Context.Instance.Properties [KnownProperties.XAPlatformToolsPackagePrefix] ?? String.Empty; bool isArm64Apple = Context.Instance.OS.Flavor == "macOS" && RuntimeInformation.OSArchitecture == Architecture.Arm64; @@ -111,12 +108,6 @@ public AndroidToolchain () buildToolName: "android-sdk-build-tools", buildToolVersion: $"{XABuildToolsVersion}" ), - new AndroidToolchainComponent ($"{XABuildTools30PackagePrefix}build-tools_r{XABuildTools30Version}-{altOsTag}", - destDir: Path.Combine ("build-tools", XABuildTools30Folder), - isMultiVersion: true, - buildToolName: "android-sdk-build-tools", - buildToolVersion: $"{XABuildTools30Version}" - ), new AndroidToolchainComponent ($"commandlinetools-{cltOsTag}-{CommandLineToolsVersion}", destDir: Path.Combine ("cmdline-tools", CommandLineToolsFolder), isMultiVersion: true, diff --git a/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs b/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs index ffebbf4e2cb..ee0cff61fb5 100644 --- a/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs +++ b/build-tools/xaprepare/xaprepare/Steps/Step_Get_Android_BuildTools.cs @@ -21,17 +21,6 @@ public Step_Get_Android_BuildTools () packages.Add ((package: $"build-tools_r{XABuildToolsVersion}-macosx.zip", prefix: XABuildToolsPackagePrefixMacOS)); packages.Add ((package: $"build-tools_r{XABuildToolsVersion}-windows.zip", prefix: XABuildToolsPackagePrefixWindows)); packages.Add ((package: $"build-tools_r{XABuildToolsVersion}-linux.zip", prefix: XABuildToolsPackagePrefixLinux)); - - // build-tools 30, for DX tests - string XABuildTools30Version = Context.Instance.Properties [KnownProperties.XABuildTools30Version] ?? String.Empty; - string XABuildTools30PackagePrefixMacOS = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefixMacOS] ?? string.Empty; - string XABuildTools30PackagePrefixWindows = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefixWindows] ?? string.Empty; - string XABuildTools30PackagePrefixLinux = Context.Instance.Properties [KnownProperties.XABuildTools30PackagePrefixLinux] ?? string.Empty; - if (!string.IsNullOrEmpty (XABuildTools30Version)) { - packages.Add ((package: $"build-tools_r{XABuildTools30Version}-macosx.zip", prefix: XABuildTools30PackagePrefixMacOS)); - packages.Add ((package: $"build-tools_r{XABuildTools30Version}-windows.zip", prefix: XABuildTools30PackagePrefixWindows)); - packages.Add ((package: $"build-tools_r{XABuildTools30Version}-linux.zip", prefix: XABuildTools30PackagePrefixLinux)); - } } protected override async Task Execute (Context context) diff --git a/build-tools/xaprepare/xaprepare/xaprepare.targets b/build-tools/xaprepare/xaprepare/xaprepare.targets index 3ba0ccfd582..0201bbf4a34 100644 --- a/build-tools/xaprepare/xaprepare/xaprepare.targets +++ b/build-tools/xaprepare/xaprepare/xaprepare.targets @@ -102,12 +102,6 @@ - - - - - - From b7acefd1d0795fed10c77cc28e48ce2a929acc0c Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Tue, 7 Nov 2023 14:22:34 +0000 Subject: [PATCH 50/92] [Tests] Fix Designer Tests to use ` AndroidSdkResolver.GetMaxInstalledPlatform ()` (#8488) Our designer tests were not using ` AndroidSdkResolver.GetMaxInstalledPlatform ()`. As a result if the `android-27` platform was NOT installed the unit tests would fail. Lets update the system to use the helper method to find the latest installed platform and use that. --- .../Tasks/ManagedResourceParserTests.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs index ec969f4dfd8..67485ff7f8d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/ManagedResourceParserTests.cs @@ -398,7 +398,8 @@ GenerateResourceDesigner CreateTask (string path) }; task.CaseMapFile = Path.Combine (Root, path, "case_map.txt"); task.IsApplication = true; - task.JavaPlatformJarPath = Path.Combine (AndroidSdkDirectory, "platforms", "android-27", "android.jar"); + int platform = AndroidSdkResolver.GetMaxInstalledPlatform (); + task.JavaPlatformJarPath = Path.Combine (AndroidSdkDirectory, "platforms", $"android-{platform}", "android.jar"); return task; } @@ -496,7 +497,8 @@ public void UpdateLayoutIdIsIncludedInDesigner ([Values(true, false)] bool useRt task.CaseMapFile = Path.Combine (Root, path, "case_map.txt"); File.WriteAllText (task.ResourceFlagFile, string.Empty); task.IsApplication = true; - task.JavaPlatformJarPath = Path.Combine (AndroidSdkDirectory, "platforms", "android-27", "android.jar"); + int platform = AndroidSdkResolver.GetMaxInstalledPlatform (); + task.JavaPlatformJarPath = Path.Combine (AndroidSdkDirectory, "platforms", $"android-{platform}", "android.jar"); Assert.IsTrue (task.Execute (), "Task should have executed successfully."); Assert.IsTrue (File.Exists (task.NetResgenOutputFile), $"{task.NetResgenOutputFile} should have been created."); var expected = Path.Combine (ExpectedOutputDir, "GenerateDesignerFileExpected.cs"); @@ -811,7 +813,8 @@ int styleable ElevenAttributes_attr09 9 task.ResourceDirectory = Path.Combine (Root, path, "res"); task.Resources = new TaskItem [] {}; task.IsApplication = true; - task.JavaPlatformJarPath = Path.Combine (AndroidSdkDirectory, "platforms", "android-27", "android.jar"); + int platform = AndroidSdkResolver.GetMaxInstalledPlatform (); + task.JavaPlatformJarPath = Path.Combine (AndroidSdkDirectory, "platforms", $"android-{platform}", "android.jar"); Assert.IsTrue (task.Execute (), "Task should have executed successfully."); Assert.IsTrue (File.Exists (task.NetResgenOutputFile), $"{task.NetResgenOutputFile} should have been created."); var expected = Path.Combine (ExpectedOutputDir, "GenerateDesignerFileWithElevenStyleableAttributesExpected.cs"); From a96a96cd28bb0e3da0925fbc04d510e42bebb177 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Tue, 28 Nov 2023 16:34:15 -0500 Subject: [PATCH 51/92] [release/8.0.1xx] Bump Android SDK component versions (#8534) Context: https://github.com/xamarin/xamarin-android-tools/pull/218 Changes: * xamarin/monodroid@7b6faa349: Bump to xamarin/android-sdk-installer@ac2bd9a, xamarin/androidtools@352675a * xamarin/monodroid@7a85ac569: [ci] Stop provisioning Xcode on macOS agents Changes: * xamarin/xamarin-android-tools@08a6990 Bump android-sdk NDK version to 26.1.10909125 * xamarin/xamarin-android-tools@6ae1f2a Bump android-sdk build-tool version to 34.0.0 * xamarin/xamarin-android-tools@184b6b3 Bump android-sdk cmdline-tools to version 11.0 * xamarin/xamarin-android-tools@1365e33 Bump android-sdk platforms-tools to version 34.0.5 * xamarin/xamarin-android-tools@8d38281 Update the maximum NDK version to 26 Updates our recommended Android SDK component versions to the following: * build-tools 34.0.0 * cmdline-tools 11.0 * platform-tools 34.0.5 * android-ndk 26.1.10909125 All PR test jobs have been updated to use JDK 17, while one nightly test job will remain on JDK 11. --- .external | 2 +- Configuration.props | 6 +++--- .../automation/azure-pipelines-nightly.yaml | 15 ++++++++++++--- build-tools/automation/azure-pipelines.yaml | 6 +++--- .../automation/yaml-templates/build-windows.yaml | 4 ++-- .../yaml-templates/run-emulator-tests.yaml | 6 ++++++ .../yaml-templates/setup-test-environment.yaml | 6 +++--- build-tools/scripts/TestApks.targets | 3 --- external/xamarin-android-tools | 2 +- 9 files changed, 31 insertions(+), 19 deletions(-) diff --git a/.external b/.external index 8ac8bb230e4..0a2df102e2c 100644 --- a/.external +++ b/.external @@ -1,2 +1,2 @@ -xamarin/monodroid:main@47bdaaa9b8ac16d6197a8982c8cc810d177c5cff +xamarin/monodroid:release/8.0.1xx@7b6faa349a2e8587b6e55357fcf007a5790f1555 mono/mono:2020-02@6dd9def57ce969ca04a0ecd9ef72c0a8f069112d diff --git a/Configuration.props b/Configuration.props index a65752bbe2e..06323961aa3 100644 --- a/Configuration.props +++ b/Configuration.props @@ -138,7 +138,7 @@ 34 34.0.0 - 34.0.1 + 34.0.5 False 1.15.1 $(NUGET_PACKAGES) @@ -179,8 +179,8 @@ avdmanager.bat $(AndroidSdkFullPath)\tools $(AndroidToolPath)\bin - 7.0 - 8512546_latest + 11.0 + 10406996_latest $(AndroidSdkFullPath)\cmdline-tools\$(CommandLineToolsFolder)\bin 9364964 diff --git a/build-tools/automation/azure-pipelines-nightly.yaml b/build-tools/automation/azure-pipelines-nightly.yaml index cadf59d37ec..4370dc175d1 100644 --- a/build-tools/automation/azure-pipelines-nightly.yaml +++ b/build-tools/automation/azure-pipelines-nightly.yaml @@ -118,6 +118,7 @@ stages: restoreNUnitConsole: false updateMono: false xaprepareScenario: EmulatorTestDependencies + jdkTestFolder: $(JAVA_HOME_11_X64) - template: yaml-templates/run-dotnet-preview.yaml parameters: @@ -126,9 +127,6 @@ stages: displayName: prepare java.interop $(XA.Build.Configuration) continueOnError: false - - script: echo "##vso[task.setvariable variable=Java8SdkDirectory]$JAVA_HOME_8_X64" - displayName: set Java8SdkDirectory - - template: yaml-templates/start-stop-emulator.yaml parameters: specificImage: true @@ -158,6 +156,7 @@ stages: emulatorMSBuildArgs: -p:TestAvdExtraBootArgs=-writable-system jobName: SystemApplicationTests jobTimeout: 120 + jdkTestFolder: $HOME/android-toolchain/jdk-17 testSteps: - template: run-nunit-tests.yaml parameters: @@ -190,6 +189,10 @@ stages: steps: - template: agent-cleanser/v1.yml@yaml-templates + - script: | + echo "##vso[task.setvariable variable=JAVA_HOME]$HOME/android-toolchain/jdk-17" + displayName: set JAVA_HOME to $HOME/android-toolchain/jdk-17 + - template: yaml-templates/setup-test-environment.yaml parameters: installTestSlicer: true @@ -197,6 +200,7 @@ stages: restoreNUnitConsole: false updateMono: false xaprepareScenario: EmulatorTestDependencies + jdkTestFolder: $HOME/android-toolchain/jdk-17 - task: DownloadPipelineArtifact@2 inputs: @@ -243,6 +247,10 @@ stages: steps: - template: agent-cleanser/v1.yml@yaml-templates + - script: | + echo "##vso[task.setvariable variable=JAVA_HOME]$HOME/android-toolchain/jdk-17" + displayName: set JAVA_HOME to $HOME/android-toolchain/jdk-17 + - template: yaml-templates/setup-test-environment.yaml parameters: installTestSlicer: true @@ -250,6 +258,7 @@ stages: restoreNUnitConsole: false updateMono: false xaprepareScenario: EmulatorTestDependencies + jdkTestFolder: $HOME/android-toolchain/jdk-17 - task: DownloadPipelineArtifact@2 inputs: diff --git a/build-tools/automation/azure-pipelines.yaml b/build-tools/automation/azure-pipelines.yaml index 3488fb0bbb2..8d28320f2f4 100644 --- a/build-tools/automation/azure-pipelines.yaml +++ b/build-tools/automation/azure-pipelines.yaml @@ -350,9 +350,9 @@ stages: forceReinstallCredentialProvider: true - script: | - echo ##vso[task.setvariable variable=JI_JAVA_HOME]%JAVA_HOME_11_X64% - echo ##vso[task.setvariable variable=JAVA_HOME]%JAVA_HOME_11_X64% - displayName: set JI_JAVA_HOME, JAVA_HOME + echo ##vso[task.setvariable variable=JI_JAVA_HOME]%JAVA_HOME_17_X64% + echo ##vso[task.setvariable variable=JAVA_HOME]%JAVA_HOME_17_X64% + displayName: set JI_JAVA_HOME, JAVA_HOME to $(JAVA_HOME_17_X64) - task: DownloadPipelineArtifact@2 inputs: diff --git a/build-tools/automation/yaml-templates/build-windows.yaml b/build-tools/automation/yaml-templates/build-windows.yaml index 133c87ba616..389b67f8afb 100644 --- a/build-tools/automation/yaml-templates/build-windows.yaml +++ b/build-tools/automation/yaml-templates/build-windows.yaml @@ -38,8 +38,8 @@ stages: - template: clean.yaml - script: | - echo ##vso[task.setvariable variable=JI_JAVA_HOME]%JAVA_HOME_11_X64% - displayName: set JI_JAVA_HOME + echo ##vso[task.setvariable variable=JI_JAVA_HOME]%JAVA_HOME_17_X64% + displayName: set JI_JAVA_HOME to $(JAVA_HOME_17_X64) - template: use-dot-net.yaml parameters: diff --git a/build-tools/automation/yaml-templates/run-emulator-tests.yaml b/build-tools/automation/yaml-templates/run-emulator-tests.yaml index cd43adf44bf..e3484dd5c5b 100644 --- a/build-tools/automation/yaml-templates/run-emulator-tests.yaml +++ b/build-tools/automation/yaml-templates/run-emulator-tests.yaml @@ -4,6 +4,7 @@ parameters: emulatorMSBuildArgs: '' jobName: CheckTimeZoneInfoIsCorrectNode1 jobTimeout: 360 + jdkTestFolder: $(JAVA_HOME_17_X64) testSteps: [] jobs: @@ -20,12 +21,17 @@ jobs: steps: - template: agent-cleanser/v1.yml@yaml-templates + - script: | + echo "##vso[task.setvariable variable=JAVA_HOME]${{ parameters.jdkTestFolder }}" + displayName: set JAVA_HOME to ${{ parameters.jdkTestFolder }} + - template: setup-test-environment.yaml parameters: installLegacyDotNet: false restoreNUnitConsole: false updateMono: false xaprepareScenario: EmulatorTestDependencies + jdkTestFolder: ${{ parameters.jdkTestFolder }} - task: DownloadPipelineArtifact@2 inputs: diff --git a/build-tools/automation/yaml-templates/setup-test-environment.yaml b/build-tools/automation/yaml-templates/setup-test-environment.yaml index 0a8e6a787fe..bcd91d29145 100644 --- a/build-tools/automation/yaml-templates/setup-test-environment.yaml +++ b/build-tools/automation/yaml-templates/setup-test-environment.yaml @@ -1,7 +1,7 @@ parameters: configuration: $(XA.Build.Configuration) xaSourcePath: $(System.DefaultWorkingDirectory) - jdkTestFolder: $(JAVA_HOME_11_X64) + jdkTestFolder: $(JAVA_HOME_17_X64) remove_dotnet: false installTestSlicer: false installApkDiff: true @@ -26,13 +26,13 @@ steps: - script: | echo "##vso[task.setvariable variable=JI_JAVA_HOME]${{ parameters.jdkTestFolder }}" echo "##vso[task.setvariable variable=DOTNET_TOOL_PATH]${{ parameters.xaSourcePath }}/bin/${{ parameters.configuration }}/dotnet/dotnet" - displayName: set JI_JAVA_HOME + displayName: set JI_JAVA_HOME to ${{ parameters.jdkTestFolder }} condition: and(succeeded(), ne(variables['agent.os'], 'Windows_NT')) - script: | echo ##vso[task.setvariable variable=JI_JAVA_HOME]${{ parameters.jdkTestFolder }} echo ##vso[task.setvariable variable=DOTNET_TOOL_PATH]${{ parameters.xaSourcePath }}\bin\${{ parameters.configuration }}\dotnet\dotnet.exe - displayName: set JI_JAVA_HOME + displayName: set JI_JAVA_HOME to ${{ parameters.jdkTestFolder }} condition: and(succeeded(), eq(variables['agent.os'], 'Windows_NT')) # Install .NET 6 for legacy tests diff --git a/build-tools/scripts/TestApks.targets b/build-tools/scripts/TestApks.targets index 484bf5eadde..95ba391d170 100644 --- a/build-tools/scripts/TestApks.targets +++ b/build-tools/scripts/TestApks.targets @@ -371,7 +371,6 @@ @@ -381,7 +380,6 @@ /> @@ -392,7 +390,6 @@ /> diff --git a/external/xamarin-android-tools b/external/xamarin-android-tools index 8a971d94a3f..08a69900df2 160000 --- a/external/xamarin-android-tools +++ b/external/xamarin-android-tools @@ -1 +1 @@ -Subproject commit 8a971d94a3fa2f0e8f69c5cf742c6836c14be1cd +Subproject commit 08a69900df23e9f95057f3cacae72bd40d640a27 From af27162bee43b7fecdca59b4f67aa8c175cbc875 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 28 Nov 2023 15:34:37 -0600 Subject: [PATCH 52/92] Bump to xamarin/java.interop/release/8.0.1xx@bec0326a (#8509) Changes: https://github.com/xamarin/java.interop/compare/3c831796...bec0326a * [Java.Interop.Tools.JavaCallableWrappers] [Export]+params * [Xamarin.Android.Tools.Bytecode] Kotlin internal prop visibility * [Xamarin.Android.Tools.Bytecode] Kotlin unsigned internal props --- external/Java.Interop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/external/Java.Interop b/external/Java.Interop index 3c83179668c..bec0326a925 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit 3c83179668cf8b6848626be14ddccc3f742a92d3 +Subproject commit bec0326a925ff888d96cb433f5049000a6d32a33 From 9ace5da6460347badf8fbefa6106208ebaf10bf8 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Wed, 29 Nov 2023 12:19:59 -0600 Subject: [PATCH 53/92] Bump to dotnet/installer/release/8.0.1xx@35587e8180 8.0.101-servicing.23572.5 (#8491) Changes: https://github.com/dotnet/installer/compare/ae28d5bc06...35587e8180 Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.100-rtm.23530.12 to 8.0.101-servicing.23572.5 Other changes: * Feeds for dotnet/runtime 6.0.26 * Feeds for dotnet/runtime 7.0.15 * Update `$(RestoreAdditionalProjectSources)` for submodules Co-authored-by: Jonathan Peppers --- NuGet.config | 16 +++++----------- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- external/Java.Interop.override.props | 4 ++-- external/monodroid.override.props | 4 ++-- external/xamarin-android-tools.override.props | 4 ++-- 6 files changed, 14 insertions(+), 20 deletions(-) diff --git a/NuGet.config b/NuGet.config index 3a7e95e5baa..15ea63d5977 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,13 +4,8 @@ - - - - - @@ -22,12 +17,11 @@ - - - - - - + + + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index ce7e056c98b..1d4fda8e6af 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - ae28d5bc061eedfe863ef3e22d090054b69e7685 + 35587e8180f80ecdf6fc36850961c0df40c6207b https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 0af04a99156..013bdc4bed5 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.100-rtm.23530.12 + 8.0.101-servicing.23572.5 8.0.0-rtm.23524.7 8.0.0 8.0.0 diff --git a/external/Java.Interop.override.props b/external/Java.Interop.override.props index ceea3118a00..d9c13475ad0 100644 --- a/external/Java.Interop.override.props +++ b/external/Java.Interop.override.props @@ -4,8 +4,8 @@ $(MSBuildThisFileDirectory)xamarin-android-tools True - https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-35db500c/nuget/v3/index.json; - https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-4a336b1c/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-8473eeb9/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-647b468f/nuget/v3/index.json; diff --git a/external/monodroid.override.props b/external/monodroid.override.props index 894c67a7e15..e29c38a3a21 100644 --- a/external/monodroid.override.props +++ b/external/monodroid.override.props @@ -3,8 +3,8 @@ $(MSBuildThisFileDirectory)xamarin-android-tools - https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-35db500c/nuget/v3/index.json; - https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-4a336b1c/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-8473eeb9/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-647b468f/nuget/v3/index.json; diff --git a/external/xamarin-android-tools.override.props b/external/xamarin-android-tools.override.props index d04a0151ab0..f63648541cd 100644 --- a/external/xamarin-android-tools.override.props +++ b/external/xamarin-android-tools.override.props @@ -1,8 +1,8 @@ - https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-35db500c/nuget/v3/index.json; - https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-4a336b1c/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-8473eeb9/nuget/v3/index.json; + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-647b468f/nuget/v3/index.json; From 93b3d00ac51122331de2b15edec81364aa97c06e Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 2 Nov 2023 15:34:55 -0500 Subject: [PATCH 54/92] [tests] add test for Microsoft.Intune (#7926) Context: https://www.nuget.org/packages/Microsoft.Intune.Maui.Essentials.android/9.5.2-beta The `Microsoft.Intune.Maui.Essentials.android` makes use of specific MSBuild targets and "remapping" features. We should add a test verifying that it stays working over time. Assert `MainActivity.onMAMCreate` exists in `classes.dex`, to verify this package actually "does something". Otherwise, the test would just pass if we removed the Intune package. --- .../Android/KnownPackages.cs | 4 +++ .../Tests/InstallAndRunTests.cs | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs index 5caf109940b..baac0375292 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs @@ -592,6 +592,10 @@ public static class KnownPackages Id = "SkiaSharp.Views", Version = "2.88.3", }; + public static Package Microsoft_Intune_Maui_Essentials_android = new Package { + Id = "Microsoft.Intune.Maui.Essentials.android", + Version = "10.0.0-beta", + }; } } diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index f8ef61db4a4..170b1b7e52b 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -1170,5 +1170,39 @@ public void FixLegacyResourceDesignerStep ([Values (true, false)] bool isRelease Assert.IsTrue (didLaunch, "Activity should have started."); } } + + [Test] + public void MicrosoftIntune ([Values (false, true)] bool isRelease) + { + proj = new XamarinAndroidApplicationProject { + IsRelease = isRelease, + PackageReferences = { + KnownPackages.AndroidXAppCompat, + KnownPackages.Microsoft_Intune_Maui_Essentials_android, + }, + }; + proj.MainActivity = proj.DefaultMainActivity + .Replace ("Icon = \"@drawable/icon\")]", "Icon = \"@drawable/icon\", Theme = \"@style/Theme.AppCompat.Light.DarkActionBar\")]") + .Replace ("public class MainActivity : Activity", "public class MainActivity : AndroidX.AppCompat.App.AppCompatActivity"); + var abis = new string [] { "armeabi-v7a", "arm64-v8a", "x86", "x86_64" }; + proj.SetAndroidSupportedAbis (abis); + builder = CreateApkBuilder (); + builder.BuildLogFile = "install.log"; + Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); + + var intermediate = Path.Combine (Root, builder.ProjectDirectory, proj.IntermediateOutputPath); + var dexFile = Path.Combine (intermediate, "android", "bin", "classes.dex"); + FileAssert.Exists (dexFile); + var className = "Lcom/xamarin/microsoftintune/MainActivity;"; + var methodName = "onMAMCreate"; + Assert.IsTrue (DexUtils.ContainsClassWithMethod (className, methodName, "(Landroid/os/Bundle;)V", dexFile, AndroidSdkPath), $"`{dexFile}` should include `{className}` and `{methodName}!"); + + RunProjectAndAssert (proj, builder); + + WaitForPermissionActivity (Path.Combine (Root, builder.ProjectDirectory, "permission-logcat.log")); + bool didLaunch = WaitForActivityToStart (proj.PackageName, "MainActivity", + Path.Combine (Root, builder.ProjectDirectory, "logcat.log"), 30); + Assert.IsTrue (didLaunch, "Activity should have started."); + } } } From b39aed043d106f11dd884bc812454d7dc519a0ce Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 9 Nov 2023 12:42:45 -0600 Subject: [PATCH 55/92] [tests] update Microsoft.Intune.Maui.Essentials.android (#8495) Context: https://www.nuget.org/packages/Microsoft.Intune.Maui.Essentials.android/10.0.0-beta2 A `MicrosoftIntune(false)` test on xamarin-android/main can fail with: /Users/runner/.nuget/packages/microsoft.intune.maui.essentials.android/10.0.0-beta/build/netstandard2.0/Microsoft.Intune.Maui.Essentials.android.targets(203,9): error : /Users/runner/work/1/s/bin/Release/dotnet/packs/Microsoft.NETCore.App.Runtime.Mono.android-x64/8.0.0-rc.2.23466.4/runtimes/android-x64/native/libSystem.Security.Cryptography.Native.Android.jar doesn't contain /Users/runner/.nuget/packages/ and the mamified library won't be placed in the correct intune directory. This is not expected. This is potentially fixed in the next release, let's try it. --- .../Tests/Xamarin.ProjectTools/Android/KnownPackages.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs index baac0375292..304721be811 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.ProjectTools/Android/KnownPackages.cs @@ -594,7 +594,7 @@ public static class KnownPackages }; public static Package Microsoft_Intune_Maui_Essentials_android = new Package { Id = "Microsoft.Intune.Maui.Essentials.android", - Version = "10.0.0-beta", + Version = "10.0.0-beta2", }; } } From d12da3a1374ee858aa3d510c396a22b75c75d584 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Fri, 1 Dec 2023 08:32:31 -0600 Subject: [PATCH 56/92] [build] set `$(AllowSelfContainedWithoutRuntimeIdentifier)` (#8547) Context: https://github.com/xamarin/xamarin-android/pull/8366 Context: https://github.com/dotnet/sdk/commit/d21e6bf5c5a239892d771f409841ce856bddcd89 Rolf introduced an "escape hatch" in the .NET 9 SDK for emitting a build warning for a case that doesn't make sense on mobile. All mobile apps are self-contained, and we define RIDs by default, so the error is not needed. It appears than when building `net8.0-android` apps on the .NET 9 SDK, we will also need to silence this warning. This property should not have any effect in the stable, .NET 8 SDK. After this change goes in, we'll likely need the .NET 9 Android workload to depend on a newer .NET 8 Android workload with this change in place. --- .../targets/Microsoft.Android.Sdk.DefaultProperties.targets | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 46a750a585b..81d1dedc773 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -14,6 +14,7 @@ true false $(AndroidGenerateResourceDesigner) + true false false false From b0aab545a08c478159f184e4e68ec86a754bacdf Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 20:52:47 -0600 Subject: [PATCH 57/92] Bump to dotnet/installer/release/8.0.1xx@822071c28a 8.0.101-servicing.23578.14 (#8558) Changes: https://github.com/dotnet/installer/compare/35587e8180...822071c28a Updates: Microsoft.Dotnet.Sdk.Internal: from 8.0.101-servicing.23572.5 to 8.0.101-servicing.23578.14 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 1d4fda8e6af..a2d6fa39a18 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - 35587e8180f80ecdf6fc36850961c0df40c6207b + 822071c28a37cfcbf2b32077b6983e1c666160e5 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 013bdc4bed5..67263466859 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.101-servicing.23572.5 + 8.0.101-servicing.23578.14 8.0.0-rtm.23524.7 8.0.0 8.0.0 From c020626b0048204fcadc06f3289777a35600aebb Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 6 Dec 2023 15:47:54 +0000 Subject: [PATCH 58/92] [Xamarin.Android.Build.Tasks] Update XA5207 for VSCode (#8494) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context: https://github.com/xamarin/xamarin-android/issues/8413 Context: https://github.com/xamarin/xamarin-android/issues/8522 The [XA5207][0] error message contained IDE-specific instructions: # Visual Studio error XA5207: Could not find android.jar for API Level 28. This means the Android SDK platform for API Level 28 is not installed. Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change your Xamarin.Android project to target an API version that is installed. # Visual Studio for Mac error XA5207: Could not find android.jar for API Level 28. This means the Android SDK platform for API Level 28 is not installed. Either install it in the Android SDK Manager (Tools > Open Android SDK Manager...), or change your Xamarin.Android project to target an API version that is installed. [Visual Studio for Mac is now deprecated][1]: > Visual Studio for Mac is scheduled for retirement by August 31, 2024 Visual Studio Code is now supported, via [C# Dev Kit][2] and the [.NET MAUI][3] extensions. ([Announcement][4].) These changes mean that our error messages are obsolete (building on macOS) or misleading (building within VSCode on Windows). Update the XA5207 error generation logic to take these changes into consideration. Visual Studio (Windows) will retain the existing error message text. The Visual Studio for Mac instructions are replaced with instructions for command-line builds, for use from Visual Studio Code: # Visual Studio error XA5207: Could not find android.jar for API Level 28. This means the Android SDK platform for API Level 28 is not installed; it was expected to be in `…`. Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. See https://aka.ms/xa5207 for more details. # Visual Studio Code error XA5207: Could not find android.jar for API Level 28. This means the Android SDK platform for API Level 28 is not installed; it was expected to be in `…`. You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f net8.0-android "-p:AndroidSdkDirectory=…"`, or change the project to target an API version that is installed. See https://aka.ms/xa5207 for more details. Update some of the documentation around the `InstallAndroidDependencies` target to mention `dotnet build` options which are required in order for the target to function correctly. Finally, update various error messages, replacing "Xamarin.Android" with ".NET Android". [0]: https://github.com/xamarin/xamarin-android/blob/40cc8eaf78eb9f95abcc0e966ab274cef1692acc/Documentation/guides/messages/xa5207.md [1]: https://learn.microsoft.com/en-us/visualstudio/mac/what-happened-to-vs-for-mac?view=vsmac-2022 [2]: https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit [3]: https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.dotnet-maui [4]: https://devblogs.microsoft.com/visualstudio/announcing-the-dotnet-maui-extension-for-visual-studio-code/ --- .../guides/building-apps/build-targets.md | 14 ++++++++ Documentation/guides/messages/xa5207.md | 27 ++++++++++++-- .../Properties/Resources.Designer.cs | 12 +++---- .../Properties/Resources.resx | 36 ++++++++++--------- .../Tasks/GetJavaPlatformJar.cs | 10 +++++- .../Xamarin.Android.Build.Tests/BuildTest.cs | 7 +++- .../Utilities/MonoAndroidHelper.cs | 6 ++-- .../Xamarin.Android.Tooling.targets | 3 ++ 8 files changed, 85 insertions(+), 30 deletions(-) diff --git a/Documentation/guides/building-apps/build-targets.md b/Documentation/guides/building-apps/build-targets.md index fc6697ce83f..4e62ceab39e 100644 --- a/Documentation/guides/building-apps/build-targets.md +++ b/Documentation/guides/building-apps/build-targets.md @@ -91,6 +91,20 @@ MSBuild /t:Install ProjectName.csproj /p:AdbTarget=-e Calls the [`GetAndroidDependencies`](#getandroiddependencies) target, then installs the Android SDK packages specified in the `@(AndroidDependency)` item group. +```dotnetcli +dotnet build -t:InstallAndroidDependencies -f net8.0-android "-p:AndroidSdkDirectory=" "-p:JavaSdkDirectory=" +``` + +The `-f net8.0-android` is required as this target is a .NET Android specific target. If you omit this argument +you will get the following error: + +``` +error MSB4057: The target "InstallAndroidDependencies" does not exist in the project. +``` + +The `AndroidSdkDirectory` and `JavaSdkDirectory` properties are required as we need to know where to install the required components. These directories can be empty or existing. Sdk components +will be installed on top on an existing sdk installation. + The [`$(AndroidManifestType)`](~/android/deploy-test/building-apps/build-properties.md#androidmanifesttype) MSBuild property controls which [Visual Studio SDK Manager repository](~/android/get-started/installation/android-sdk.md?tabs=windows#repository-selection) diff --git a/Documentation/guides/messages/xa5207.md b/Documentation/guides/messages/xa5207.md index 56ac2937fcd..90e89e21925 100644 --- a/Documentation/guides/messages/xa5207.md +++ b/Documentation/guides/messages/xa5207.md @@ -7,14 +7,35 @@ ms.date: 06/26/2019 ## Example messages -``` +```dotnetcli XA5207: Could not find android.jar for API Level 28. This means the Android SDK platform for API Level 28 is not installed. Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change your Xamarin.Android project to target an API version that is installed. ``` ## Issue -In order to build a project, the Android SDK Platform matching the target API level must be installed. +In order to build a project, the Android SDK Platform matching the target API level must be installed. ## Solution -Use the Android SDK Manager to install the Android SDK Platform for the desired API level. +Use the Android SDK Manager (Tools > Android > Android SDK Manager...) to install the Android SDK Platform for the desired API level. Alternatively you can install the missing API level by running the following command from a terminal or command prompt: + +```dotnetcli +dotnet build -t:InstallAndroidDependencies -f net8.0-android "-p:AndroidSdkDirectory=" +``` + +Part of the new .net android system is when upgrading projects you will automatically be +upgraded to the latest API level. For example net7.0-android allowed you to target API 33, +but net8.0-android will automatically target API 34. If you want to keep your current +target API level you will need to add the 'uses-sdk' `android:targetSdkVersion` to your `AndroidManifest.xml` file. + +```xml + + + + +``` + +You might then need to run the `InstallAndroidDependencies` target as mentioned above to ensure that the required API level is installed. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.Designer.cs b/src/Xamarin.Android.Build.Tasks/Properties/Resources.Designer.cs index 4f8e7e69711..b93a04367ef 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.Designer.cs +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.Designer.cs @@ -1397,20 +1397,20 @@ public static string XA5207 { } /// - /// Looks up a localized string similar to Tools > Open Android SDK Manager.... + /// Looks up a localized string similar to Tools > Android > Android SDK Manager.... /// - public static string XA5207_SDK_Manager_macOS { + public static string XA5207_SDK_Manager_Windows { get { - return ResourceManager.GetString("XA5207_SDK_Manager_macOS", resourceCulture); + return ResourceManager.GetString("XA5207_SDK_Manager_Windows", resourceCulture); } } /// - /// Looks up a localized string similar to Tools > Android > Android SDK Manager.... + /// Looks up a localized string similar to Tools > Open Android SDK Manager.... /// - public static string XA5207_SDK_Manager_Windows { + public static string XA5207_SDK_Manager_CLI { get { - return ResourceManager.GetString("XA5207_SDK_Manager_Windows", resourceCulture); + return ResourceManager.GetString("XA5207_SDK_Manager_CLI", resourceCulture); } } diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx index c591e39618f..5915871c655 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex `LibraryProjectProperties` file `{0}` is located in a parent directory of the bindings project's intermediate output directory. Please adjust the path to use the original `project.properties` file directly from the Android library project directory. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in Xamarin.Android projects that target .NET 6 or higher. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in Xamarin.Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Either change the value in the AndroidManifest.xml to match the $(SupportedOSPla {1} - The SupportedOSPlatformVersion property value - 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. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of Xamarin.Android. Update the project properties to use 'class-parse'. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of Xamarin.Android. Update the project properties to use 'XAJavaInterop1'. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of Xamarin.Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Remove the '{0}' reference from your project and add the '{1}' NuGet package ins {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed. Either install it in the Android SDK Manager ({2}), or change the Xamarin.Android project to target an API version that is installed. ({1} missing.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Tools > Open Android SDK Manager... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Tools > Android > Android SDK Manager... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Embedded Wear app package name differs from handheld app package name ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs index 171913f78e3..cb9b22f88da 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GetJavaPlatformJar.cs @@ -25,8 +25,14 @@ public class GetJavaPlatformJar : AndroidTask public bool DesignTimeBuild { get; set; } + public bool BuildingInsideVisualStudio { get; set; } + public string SupportedOSPlatformVersion { get; set; } + public string TargetFramework { get; set; } + + public string AndroidSdkDirectory { get; set; } + [Output] public string JavaPlatformJarPath { get; set; } @@ -95,7 +101,9 @@ public override bool RunTask () } platform = GetTargetSdkVersion (platform, target_sdk); - JavaPlatformJarPath = MonoAndroidHelper.TryGetAndroidJarPath (Log, platform, designTimeBuild: DesignTimeBuild); + JavaPlatformJarPath = MonoAndroidHelper.TryGetAndroidJarPath (Log, platform, + designTimeBuild: DesignTimeBuild, buildingInsideVisualStudio: BuildingInsideVisualStudio, + targetFramework: TargetFramework, androidSdkDirectory: AndroidSdkDirectory); TargetSdkVersion = MonoAndroidHelper.SupportedVersions.GetApiLevelFromId (platform).ToString (); if (JavaPlatformJarPath == null) return !Log.HasLoggedErrors; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index cd269edafe0..9b6db6e36c9 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -801,7 +801,7 @@ public void BuildInDesignTimeMode ([Values(false, true)] bool useManagedParser) } [Test] - public void IfAndroidJarDoesNotExistThrowXA5207 () + public void IfAndroidJarDoesNotExistThrowXA5207 ([Values(true, false)] bool buildingInsideVisualStudio) { var path = Path.Combine ("temp", TestName); var AndroidSdkDirectory = CreateFauxAndroidSdkDirectory (Path.Combine (path, "android-sdk"), "24.0.1", new ApiInfo [] { new ApiInfo { Id = "30" } }); @@ -814,6 +814,7 @@ public void IfAndroidJarDoesNotExistThrowXA5207 () if (!Builder.UseDotNet) proj.TargetFrameworkVersion = builder.LatestTargetFrameworkVersion (); builder.ThrowOnBuildFailure = false; + builder.BuildingInsideVisualStudio = buildingInsideVisualStudio; Assert.IsTrue (builder.DesignTimeBuild (proj), "DesignTime build should succeed."); Assert.IsFalse (builder.LastBuildOutput.ContainsText ("error XA5207:"), "XA5207 should not have been raised."); builder.Target = "AndroidPrepareForBuild"; @@ -823,6 +824,10 @@ public void IfAndroidJarDoesNotExistThrowXA5207 () }), "Build should have failed"); Assert.IsTrue (builder.LastBuildOutput.ContainsText ("error XA5207:"), "XA5207 should have been raised."); Assert.IsTrue (builder.LastBuildOutput.ContainsText ($"Could not find android.jar for API level {proj.TargetSdkVersion}"), "XA5207 should have had a good error message."); + if (buildingInsideVisualStudio) + Assert.IsTrue (builder.LastBuildOutput.ContainsText ($"Either install it in the Android SDK Manager"), "XA5207 should have an error message for Visual Studio."); + else + Assert.IsTrue (builder.LastBuildOutput.ContainsText ($"You can install the missing API level by running"), "XA5207 should have an error message for the command line."); } Directory.Delete (AndroidSdkDirectory, recursive: true); } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs index d72b347d5e9..4efceda5141 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs @@ -482,14 +482,14 @@ public static IEnumerable Executables (string executable) yield return executable; } - public static string TryGetAndroidJarPath (TaskLoggingHelper log, string platform, bool designTimeBuild = false) + public static string TryGetAndroidJarPath (TaskLoggingHelper log, string platform, bool designTimeBuild = false, bool buildingInsideVisualStudio = false, string targetFramework = "", string androidSdkDirectory = "") { var platformPath = MonoAndroidHelper.AndroidSdk.TryGetPlatformDirectoryFromApiLevel (platform, MonoAndroidHelper.SupportedVersions); if (platformPath == null) { if (!designTimeBuild) { var expectedPath = MonoAndroidHelper.AndroidSdk.GetPlatformDirectoryFromId (platform); - var sdkManagerMenuPath = OS.IsWindows ? Properties.Resources.XA5207_SDK_Manager_Windows : Properties.Resources.XA5207_SDK_Manager_macOS; - log.LogCodedError ("XA5207", Properties.Resources.XA5207, platform, Path.Combine (expectedPath, "android.jar"), sdkManagerMenuPath); + var sdkManagerMenuPath = buildingInsideVisualStudio ? Properties.Resources.XA5207_SDK_Manager_Windows : Properties.Resources.XA5207_SDK_Manager_CLI; + log.LogCodedError ("XA5207", Properties.Resources.XA5207, platform, Path.Combine (expectedPath, "android.jar"), string.Format (sdkManagerMenuPath, targetFramework, androidSdkDirectory)); } return null; } diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets index ff86b19b484..a0c0abd4262 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Tooling.targets @@ -99,9 +99,12 @@ projects. From a1fd1b2cb90323ef5c3005456ef8bc45a10a5c72 Mon Sep 17 00:00:00 2001 From: VS MobileTools Engineering Service 2 Date: Thu, 7 Dec 2023 06:37:24 -0800 Subject: [PATCH 59/92] Localized file check-in by OneLocBuild Task (#8570) Context: https://aka.ms/onelocbuild Context: https://aka.ms/AllAboutLoc Build definition ID 17928: Build ID 8778584 --- .../Properties/Resources.cs.resx | 36 ++++++++++--------- .../Properties/Resources.de.resx | 36 ++++++++++--------- .../Properties/Resources.es.resx | 36 ++++++++++--------- .../Properties/Resources.fr.resx | 36 ++++++++++--------- .../Properties/Resources.it.resx | 36 ++++++++++--------- .../Properties/Resources.ja.resx | 36 ++++++++++--------- .../Properties/Resources.ko.resx | 36 ++++++++++--------- .../Properties/Resources.pl.resx | 36 ++++++++++--------- .../Properties/Resources.pt-BR.resx | 36 ++++++++++--------- .../Properties/Resources.ru.resx | 36 ++++++++++--------- .../Properties/Resources.tr.resx | 36 ++++++++++--------- .../Properties/Resources.zh-Hans.resx | 36 ++++++++++--------- .../Properties/Resources.zh-Hant.resx | 36 ++++++++++--------- 13 files changed, 260 insertions(+), 208 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx index b3ac4ef0c9a..b8b3d72c070 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex Soubor LibraryProjectProperties {0} se nachází v adresáři, který je nadřazený přechodnému výstupnímu adresáři vazebního projektu. Upravte prosím cestu tak, aby se používal původní soubor project.properties přímo z adresáře projektu knihovny Androidu. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoruje se konfigurační soubor {0}. Konfigurační soubory .NET se v projektech Xamarin.Androidu, které cílí na .NET 6 nebo vyšší, nepodporují. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Používání AAPT se v projektech Xamarin.Androidu, které cílí na .NET 6 nebo vyšší, nepodporuje. Povolte prosím možnost Použít systém přírůstkového balení pro Android (aapt2) na stránce vlastností projektu sady Visual Studio, nebo upravte soubor projektu v textovém editoru a nastavte vlastnost MSBuildu AndroidUseAapt2 na true. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Buď změňte hodnotu v souboru AndroidManifest.xml tak, aby odpovídala hodnot {1} - The SupportedOSPlatformVersion property value - Použití funkce AppDomain.CreateDomain() zjištěné v sestavení: {0}. .NET 6 a vyšší bude podporovat jenom jednu doménu AppDomain, takže toto rozhraní API už nebude dostupné v Xamarin.Android po vydání .NET 6. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Hodnota parseru tříd Androidu {0} je zastaralá a v budoucí verzi Xamarin.Androidu se odebere. Aktualizujte vlastnosti projektu tak, aby používaly class-parse. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Cíl generování kódu pro Androidu {0} je zastaralý a v budoucí verzi Xamarin.Androidu se odebere. Aktualizujte vlastnosti projektu tak, aby používaly XAJavaInterop1. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Odkazování na projekt aplikace pro Android Wear {0} z projektu aplikace pro Android je zastaralé a v budoucí verzi Xamarin.Androidu se už nebude podporovat. Odeberte odkaz na projekt aplikace pro Android Wear z projektu aplikace pro Android a distribuujte aplikaci pro Wear jako samostatnou aplikaci. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Odeberte z projektu odkaz na {0} a místo toho přidejte balíček NuGet{1}. {0} - The missing tool name - Nepovedlo se najít android.jar pro úroveň rozhraní API {0}. To znamená, že platforma sady Android SDK pro úroveň rozhraní API {0} není nainstalovaná. Buď ji nainstalujte ve Správci sady Android SDK ({2}), nebo změňte projekt Xamarin.Android tak, aby cílil na verzi rozhraní API, která je nainstalovaná. (Chybí {1}.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Nástroje > Otevřít správce sady Android SDK... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Nástroje > Android > Správce sady Android SDK... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Název vložené aplikace pro Wear se liší od názvu balíčku aplikace pro kapesní zařízení ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx index 584e372be41..c70d4ae09be 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex Die LibraryProjectProperties-Datei "{0}" befindet sich in einem übergeordneten Verzeichnis des Zwischenausgabeverzeichnisses für das Bindungsprojekt. Passen Sie den Pfad so an, dass die ursprüngliche Datei "project.properties" direkt aus dem Android-Bibliotheksprojektverzeichnis verwendet wird. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Die Konfigurationsdatei "{0}" wird ignoriert. .NET-Konfigurationsdateien werden in Xamarin.Android-Projekten für .NET 6 oder höher nicht unterstützt. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Die Verwendung von AAPT wird in Xamarin.Android-Projekten für .NET 6 oder höher nicht unterstützt. Aktivieren Sie "Inkrementelles Android-Paketierungssystem (aapt2) verwenden" in den Visual Studio-Projekteigenschaftenseiten, oder bearbeiten Sie die Projektdatei in einem Text-Editor, und legen Sie die MSBuild-Eigenschaft "AndroidUseAapt2" auf TRUE fest. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Bitte ändern Sie den Wert in einen Assembly-basierten Typnamen, der von „{1} {1} - The SupportedOSPlatformVersion property value - In der Assembly "{0}" wurde die Verwendung von "AppDomain.CreateDomain()" festgestellt. .NET 6 und höher unterstützt nur eine einzelne AppDomain, sodass diese API nach dem Release von .NET 6 nicht mehr in Xamarin.Android verfügbar ist. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Der Wert "{0}" des Android-Klassenparsers ist veraltet und wird in einer zukünftigen Version von Xamarin.Android entfernt. Aktualisieren Sie die Projekteigenschaften auf die Verwendung von "class-parse". + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Das Ziel "{0}" für die Android-Codegenerierung ist veraltet und wird in einer zukünftigen Version von Xamarin.Android entfernt. Aktualisieren Sie die Projekteigenschaften auf die Verwendung von "XAJavaInterop1". + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Verweise von einem Android-Anwendungsprojekt auf das Android Wear-Anwendungsprojekt "{0}" ist veraltet und wird in zukünftigen Versionen von Xamarin.Android nicht mehr unterstützt. Entfernen Sie den Verweis auf das Android Wear-Anwendungsprojekt aus dem Android-Anwendungsprojekt, und verteilen Sie die Wear-Anwendung stattdessen als eigenständige Anwendung. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Entfernen Sie den '{0}' Verweis aus Ihrem Projekt, und fügen Sie stattdessen da {0} - The missing tool name - "android.jar" wurde für API-Ebene {0} nicht gefunden. Dies bedeutet, dass die Android SDK-Plattform für API-Ebene {0} nicht installiert ist. Führen Sie die Installation entweder im Android-SDK-Manager ({2}) durch, oder ändern Sie das Xamarin.Android-Projekt, um eine installierte API-Version als Ziel zu verwenden ("{1}" fehlt.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Extras > Android-SDK-Manager öffnen... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Extras > Android > Android-SDK-Manager... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Der Name des eingebetteten Wear-App-Pakets weicht vom Namen des Handheld-App-Pakets ab ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx index 49188ee7da4..e585dc5cc18 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex El archivo "LibraryProjectProperties" en "{0}" se encuentra en un directorio principal del directorio de salida intermedio del proyecto de enlaces. Ajuste la ruta de acceso para usar el archivo "project.properties" original directamente desde el directorio del proyecto de la biblioteca de Android. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Omitiendo el archivo de configuración "{0}". Los archivos de configuración .NET no se admiten en proyectos Xamarin.Android destinados a .NET 6 o versiones posteriores. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - No se admite el uso de AAPT en los proyectos de Xamarin.Android destinados a .NET 6 o versiones posteriores. Habilite "Use el sistema de empaquetado de Android incremental (aapt2)" en las páginas de propiedades del proyecto de Visual Studio o edite el archivo del proyecto en un editor de texto y establezca la propiedad "AndroidUseAapt2" de MSBuild en "true". + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Cambie el valor de AndroidManifest.xml para que coincida con el valor $(Supporte {1} - The SupportedOSPlatformVersion property value - Se detectó el uso de AppDomain.CreateDomain() en el ensamblado: {0}. En .NET 6 y versiones posteriores solo se admitirá una instancia de AppDomain, por lo que esta API ya no estará disponible en Xamarin.Android una vez que se haya lanzado .NET 6. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - El valor "{0}" del analizador de clases de Android está en desuso y se quitará en una versión futura de Xamarin.Android. Actualice las propiedades del proyecto para usar "class-parse". + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - El destino "{0}" de generación de código de Android está en desuso y se quitará en una versión futura de Xamarin.Android. Actualice las propiedades del proyecto para usar "XAJavaInterop1". + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - La referencia al proyecto de aplicación Android Wear "{0}" de un proyecto de aplicación Android está en desuso y ya no se admitirá en una versión futura de Xamarin.Android. Quítela y distribuya en cambio la aplicación Wear como una aplicación independiente. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Quite la referencia de "{0}" del proyecto y agregue el paquete NuGet "{1}". {0} - The missing tool name - No se encontró ningún archivo android.jar para el nivel de API {0}. Esto significa que la plataforma Android SDK para el nivel de API {0} no está instalada. Instálela en el Administrador de Android SDK ({2}) o cambie el proyecto Xamarin.Android para que tenga como destino una versión de la API que esté instalada. (Falta {1}). + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Herramientas > Abrir el Administrador de Android SDK... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Herramientas > Android > Administrador de Android SDK... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. El nombre del paquete de la aplicación Wear que se ha insertado es distinto del nombre del paquete de la aplicación para dispositivos de mano ({0}! = {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx index 409fdaf0f32..9616c11f774 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex Le fichier 'LibraryProjectProperties' '{0}' se trouve dans un répertoire parent du répertoire de sortie intermédiaire du projet de liaisons. Modifiez le chemin pour utiliser le fichier 'project.properties' d'origine directement à partir du répertoire du projet de bibliothèque Android. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Fichier config '{0}' ignoré. Les fichiers config .NET ne sont pas pris en charge dans les projets Xamarin.Android qui ciblent .NET 6 ou une version ultérieure. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - L'utilisation d'AAPT n'est pas prise en charge dans les projets Xamarin.Android qui ciblent .NET 6 ou une version ultérieure. Activez 'Utiliser le système d'empaquetage Android incrémentiel (aapt2)' dans les pages de propriétés de projet Visual Studio, ou modifiez le fichier projet dans un éditeur de texte, puis affectez la valeur 'true' à la propriété MSBuild 'AndroidUseAapt2'. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Modifiez la valeur dans AndroidManifest.xml pour qu’elle corresponde à la val {1} - The SupportedOSPlatformVersion property value - Utilisation de AppDomain.CreateDomain() détectée dans l'assembly : {0}. .NET 6 et les versions ultérieures prend uniquement en charge un seul AppDomain. Cette API ne sera donc plus disponible dans Xamarin.Android après la publication de .NET 6. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - La valeur '{0}' de l'analyseur de classe Android est dépréciée et va être supprimée dans une future version de Xamarin.Android. Mettez à jour les propriétés du projet pour utiliser 'class-parse'. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - La cible de génération de code Android '{0}' est dépréciée et va être supprimée dans une future version de Xamarin.Android. Mettez à jour les propriétés du projet pour utiliser 'XAJavaInterop1'. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - L'opération qui consiste à référencer le projet d'application Android Wear '{0}' à partir d'un projet d'application Android est dépréciée. Elle ne sera plus prise en charge dans une prochaine version de Xamarin.Android. Supprimez la référence au projet d'application Android Wear du projet d'application Android, et distribuez l'application Wear en tant qu'application autonome à la place. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Supprimez la référence de '{0}' de votre projet et ajoutez plutôt le '{1}'.pa {0} - The missing tool name - Le fichier android.jar est introuvable pour le niveau d'API {0}. Cela signifie que la plateforme du kit Android SDK pour le niveau d'API {0} n'est pas installée. Installez-la dans le Gestionnaire SDK Android ({2}), ou changez le projet Xamarin.Android pour cibler une version d'API installée. ({1} manquant.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Outils > Ouvrir le Gestionnaire SDK Android... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Outils > Android > Gestionnaire SDK Android... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Le nom du package d'application Wear embarqué diffère du nom du package d'application du terminal portable ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx index 220cd4b4170..9ed610f8c39 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex Il file `{0}` di `LibraryProjectProperties` si trova in una directory padre della directory di output intermedia del progetto di binding. Modificare il percorso in modo da usare il file `project.properties` originale della directory del progetto della libreria Android. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Il file di configurazione '{0}' verrà ignorato. I file di configurazione .NET non sono supportati in progetti Xamarin.Android destinati a .NET 6 o versione successiva. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - L'uso di AAPT non è supportato in progetti Xamarin.Android destinati a .NET 6 o versione successiva. Abilitare 'Usa sistema di creazione pacchetti Android incrementale (AAPT2)' nelle pagine delle proprietà del progetto di Visual Studio o modificare il file di progetto in un editor di testo e impostare la proprietà 'AndroidUseAapt2' di MSBuild su 'true'. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Modificare il valore in AndroidManifest.xml in modo che corrisponda al valore $( {1} - The SupportedOSPlatformVersion property value - È stato rilevato l'uso di AppDomain.CreateDomain() nell'assembly: {0}. .NET 6 e versioni successive supporteranno solo un singolo AppDomain, quindi questa API non sarà più disponibile in Xamarin.Android dopo il rilascio di .NET 6. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Il valore '{0}' del parser di classi Android è deprecato e verrà rimosso in una versione futura di Xamarin.Android. Aggiornare le proprietà del progetto in modo da usare 'class-parse'. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - La destinazione '{0}' per la generazione del codice Android è deprecato e verrà rimosso in una versione futura di Xamarin.Android. Aggiornare le proprietà del progetto in modo da usare 'XAJavaInterop1'. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Il riferimento a un progetto applicazione Android Wear '{0}' da un progetto Applicazione Android è deprecato e non sarà più supportato in una versione futura di Xamarin.Android. Rimuovere il riferimento al progetto Applicazione Android Wear dal progetto Applicazione Android e distribuire l'applicazione Wear come applicazione autonoma. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Rimuovere il riferimento '{0}' dal progetto e aggiungere invece il pacchetto NuG {0} - The missing tool name - Non è stato possibile trovare android.jar per il livello API {0}. Questo errore indica che la piattaforma Android SDK per il livello API {0} non è installata. Installarla in Gestione Android SDK ({2}) oppure modificare il progetto Xamarin.Android in modo che la destinazione sia una versione API installata ({1} mancante). + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Strumenti > Apri Gestione Android SDK... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Strumenti > Android > Gestione Android SDK... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Il nome del pacchetto dell'app Wear incorporata è diverso da quello dell'app palmare ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx index 49be2825bbb..3e0451ed16d 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex 'LibraryProjectProperties' ファイル '{0}' は、バインド プロジェクトの中間出力ディレクトリの親ディレクトリにあります。元の 'project.properties' ファイルを Android ライブラリ プロジェクト ディレクトリから直接使用するには、パスを調整してください。 The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - 構成ファイル '{0}' を無視しています。.NET 構成ファイルは、.NET 6 以降を対象とする Xamarin.Android プロジェクトではサポートされていません。 - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - .NET 6 以降を対象とする Xamarin.Android プロジェクトでは、AAPT の使用はサポートされていません。Visual Studio プロジェクトのプロパティ ページで [インクリメンタル Android パッケージ システム (aapt2) を使用します] を有効にするか、テキスト エディターでプロジェクト ファイルを編集して 'AndroidUseAapt2' MSBuild プロパティを 'true' に設定してください。 + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -506,7 +506,7 @@ $(SupportedOSPlatformVersion) 値に一致するように AndroidManifest.xml {1} - The SupportedOSPlatformVersion property value - アセンブリ {0} で AppDomain.CreateDomain() が使用されていることが検出されました。.NET 6 以降では単一の AppDomain のみがサポートされる予定のため、.NET 6 がリリースされるとこの API は Xamarin.Android では使用できなくなります。 + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -705,12 +705,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Android クラス パーサーの値 '{0}' は非推奨であり、Xamarin.Android の今後のバージョンでは削除されます。'class-parse' を使用するようにプロジェクトのプロパティを更新してください。 + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Android コード生成ターゲット '{0}' は非推奨であり、Xamarin.Android の今後のバージョンでは削除されます。'XAJavaInterop1' を使用するようにプロジェクトのプロパティを更新してください。 + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -791,7 +791,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Android アプリケーション プロジェクトから Android Wear アプリケーション プロジェクト '{0}' を参照することは非推奨となり、Xamarin.Android の今後のバージョンではサポートされなくなります。Android アプリケーション プロジェクトから Android Wear アプリケーション プロジェクト参照を削除し、代わりにスタンドアロン アプリケーションとして Wear アプリケーションを配布してください。 + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -862,19 +862,23 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - API レベル {0} の android .jar が見つかりませんでした。これは、API レベル {0} の Android SDK プラットフォームがインストールされていないことを意味します。Android SDK マネージャー ({2}) にインストールするか、インストールされている API バージョンを対象とする Xamarin.Android プロジェクトを変更します。({1} がありません。) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - [ツール] > [Android SDK マネージャーを開く...] - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - [ツール] > [Android] > [Android SDK マネージャー...] - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. 組み込みの Wear アプリ パッケージ名がハンドヘルド アプリ パッケージ名と異なります ({0}! = {1})。 diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx index 1d586b78bb8..2ba344f80bd 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex `LibraryProjectProperties` 파일 `{0}`이(가) 바인딩 프로젝트의 중간 출력 디렉터리의 부모 디렉터리에 있습니다. 경로를 조정하여 Android 라이브러리 프로젝트 디렉터리에서 바로 원본 `project.properties` 파일을 사용하세요. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - 구성 파일 '{0}'을(를) 무시합니다. .Net 6 이상을 대상으로 Xamarin.Android 프로젝트에서 .NET 구성 파일은 지원되지 않습니다. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - AAPT는 .NET 6 이상을 대상으로 하는 Xamarin.Android 프로젝트에서 사용할 수 없습니다. Visual Studio 프로젝트 속성 페이지에서 '증분 Android 패키징 시스템(aapt2) 사용'을 사용하도록 설정하거나 텍스트 편집기에서 프로젝트 파일을 편집하고 'AndroidUseAapt2' MSBuild 속성을 'true'로 설정하세요. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ AndroidManifest.xml의 값을 $(SupportedOSPlatformVersion) 값에 맞도록 변 {1} - The SupportedOSPlatformVersion property value - 어셈블리에서 AppDomain.CreateDomain()의 사용이 검색되었습니다. {0}. .NET 6 이상에서는 단일 AppDomain만 지원하므로 .NET 6이 릴리스된 후에는 이 API를 Xamarin.Android에서 더 이상 사용할 수 없습니다. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Android 클래스 파서 값 '{0}'은(는) 사용되지 않으며 Xamarin.Android의 이후 버전에서 제거됩니다. 'class-parse'를 사용하도록 프로젝트 속성을 업데이트하세요. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Android 코드 생성 대상 '{0}'은(는) 사용되지 않으며 Xamarin.Android의 이후 버전에서 제거됩니다. 'XAJavaInterop1'을 사용하도록 프로젝트 속성을 업데이트하세요. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Android 애플리케이션 프로젝트에서 Android Wear 애플리케이션 프로젝트 '{0}'을(를) 참조하는 기능은 사용되지 않으며 Xamarin.Android의 이후 버전에서 더 이상 지원되지 않습니다. Android 애플리케이션 프로젝트에서 Android Wear 애플리케이션 프로젝트 참조를 제거하고 대신 Wear 애플리케이션을 독립 실행형 애플리케이션으로 배포하세요. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - API 레벨 {0}의 android.jar을 찾을 수 없습니다. API 레벨 {0}의 Android SDK 플랫폼이 설치되어 있지 않습니다. Android SDK 관리자({2})에서 설치하거나, 설치된 API 버전을 대상으로 하도록 Xamarin.Android 프로젝트를 변경하세요.({1}이(가) 없습니다.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - 도구 > Android SDK 관리자 열기... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - 도구 > Android > Android SDK 관리자... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. 포함된 Wear 앱 패키지 이름이 핸드헬드 앱 패키지 이름과 다릅니다({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx index 31bcbfa681d..296db0c5a17 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex Plik „LibraryProjectProperties” „{0}” znajduje się w katalogu nadrzędnym pośredniego katalogu wyjściowego projektu powiązań. Dostosuj ścieżkę tak, aby użyć oryginalnego pliku „project.properties” bezpośrednio z katalogu projektu biblioteki systemu Android. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Plik konfiguracji „{0}” zostanie zignorowany. Pliki konfiguracji platformy .NET nie są obsługiwane w projektach Xamarin.Android, których miejscem docelowym jest platforma .NET 6 lub nowsza. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Używanie narzędzia AAPT nie jest obsługiwane w projektach Xamarin.Android, których miejscem docelowym jest platforma .NET 6 lub nowsza. Włącz opcję „Użyj systemu przyrostowego tworzenia pakietów systemu Android (aapt2)” na stronach właściwości projektu w programie Visual Studio lub zmodyfikuj plik projektu w edytorze tekstów, ustawiając właściwość programu MSBuild o nazwie „AndroidUseAapt2” na wartość „true”. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Zmień wartość w pliku AndroidManifest.xml, aby odpowiadała wartości $(Suppo {1} - The SupportedOSPlatformVersion property value - Wykryto użycie metody AppDomain.CreateDomain() w zestawie: {0}. Platforma .NET 6 lub nowsza wersja obsługuje tylko jedną domenę aplikacji, dlatego ten interfejs API nie będzie już dostępny w rozszerzeniu Xamarin.Android po wydaniu platformy .NET 6. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Wartość analizatora klas systemu Android „{0}” jest przestarzała i zostanie usunięta w przyszłej wersji rozszerzenia Xamarin.Android. Zaktualizuj właściwości projektu, aby używać literału „class-parse”. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Element docelowy generowania kodu systemu Android „{0}” jest przestarzały i zostanie usunięty w przyszłej wersji rozszerzenia Xamarin.Android. Zaktualizuj właściwości projektu, aby używać literału „XAJavaInterop1”. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Odwoływanie się do projektu aplikacji dla systemu Android Wear „{0}” z projektu aplikacji dla systemu Android jest przestarzałe i nie będzie już obsługiwane w przyszłej wersji programu Xamarin.Android. Usuń odwołanie do projektu aplikacji dla systemu Android Wear z projektu aplikacji dla systemu Android i dystrybuuj aplikację dla systemu Wear jako autonomiczną aplikację. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Usuń odwołanie „{0}” z projektu i zamiast niego dodaj pakiet NuGet „{1} {0} - The missing tool name - Nie można było znaleźć pliku android.jar dla poziomu interfejsu API {0}. Oznacza to, że platforma Android SDK dla poziomu interfejsu API {0} nie jest zainstalowana. Zainstaluj ją w Menedżerze zestawów Android SDK ({2}) lub zmień projekt Xamarin.Android tak, aby był przeznaczony dla zainstalowanej wersji interfejsu API. (Brak pliku {1}). + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Narzędzia > Otwórz Menedżer zestawów SDK dla systemu Android... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Narzędzia > Android > Menedżer zestawów Android SDK... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Nazwa pakietu osadzonej aplikacji systemu Wear jest inna niż nazwa pakietu aplikacji dla urządzenia podręcznego ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx index 1dd5676c7f7..797384cfcd8 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex O arquivo `LibraryProjectProperties` `{0}` está localizado em um diretório pai do diretório de saída intermediário do projeto de associações. Ajuste o caminho para usar o arquivo original `project.properties` diretamente no diretório do projeto de biblioteca do Android. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignorando o arquivo de configuração '{0}'. Não há suporte para arquivos de configuração do .NET em projetos Xamarin.Android direcionados ao .NET 6 ou posterior. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Não há suporte para o uso de AAPT nos projetos Xamarin.Android direcionados ao .NET 6 ou superior. Habilite 'Usar o sistema de empacotamento Android incremental (aapt2)' nas páginas de propriedades do projeto do Visual Studio ou edite o arquivo de projeto em um editor de texto e defina a propriedade 'AndroidUseAapt2' do MSBuild como 'true'. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Altere o valor no AndroidManifest.xml para corresponder ao valor $(SupportedOSPl {1} - The SupportedOSPlatformVersion property value - O uso de AppDomain.CreateDomain() foi detectado no assembly: {0}. O .NET 6 e superior dará suporte apenas a um único AppDomain, portanto, esta API não estará mais disponível no Xamarin.Android quando o .NET 6 for lançado. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - O valor do analisador de classe do Android '{0}' foi preterido e será removido em uma versão futura do Xamarin.Android. Atualize as propriedades do projeto para usar 'class-parse'. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - O destino de geração de código Android '{0}' foi preterido e será removido em uma versão futura do Xamarin.Android. Atualize as propriedades do projeto para usar 'XAJavaInterop1'. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - A referência ao projeto de aplicativo Wear Android '{0}' de um projeto de aplicativo Android foi preterida e não haverá mais suporte para ela em uma versão futura do Xamarin.Android. Remova a referência ao projeto de aplicativo Wear Android do projeto de aplicativo Android e distribua o aplicativo Wear como um aplicativo autônomo. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Remover a referência '{0}' de seu projeto e adicionar o pacote NuGet '{1}' em v {0} - The missing tool name - Não foi possível encontrar android.jar para o nível da API {0}. Isso significa que a plataforma do SDK do Android para o nível da API {0} não está instalada. Instale-a no Gerenciador de SDK Android ({2}) ou altere o projeto Xamarin.Android para que ele seja direcionado a uma versão da API instalada. ({1} ausente.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Ferramentas > Abrir o Gerenciador de SDK Android... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Ferramentas > Android > Gerenciador de SDK Android... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. O nome do pacote do aplicativo Wear inserido difere do nome do pacote do aplicativo portátil ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx index 9092c451346..87031e119f2 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex Файл "LibraryProjectProperties" "{0}" находится в родительском каталоге промежуточного выходного каталога проекта привязок. Измените путь, чтобы использовать исходный файл "project.properties" непосредственно из каталога проекта библиотеки Android. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Пропуск файла конфигурации "{0}". Файлы конфигурации .NET не поддерживаются в проектах Xamarin.Android для .NET 6 и более поздних версиях. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Использование AAPT не поддерживается в проектах Xamarin.Android для .NET 6 и более поздних версий. Установите параметр "Использование инкрементной системы создания пакетов Android (AAPT2)" на страницах свойств проекта в Visual Studio или откройте файл проекта в текстовом редакторе и задайте значение "true" для свойства MSBuild "AndroidUseAapt2". + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ In this message, the term "binding" means a piece of generated code that makes i {1} - The SupportedOSPlatformVersion property value - В сборке обнаружено использование AppDomain.CreateDomain(): {0}. .NET 6 и более поздние версии будут поддерживать только один домен AppDomain, поэтому этот API больше не будет доступен в Xamarin.Android после выпуска .NET 6. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Значение "{0}" синтаксического анализатора класса Android является устаревшим и будет удалено в следующей версии Xamarin.Android. Обновите свойства проекта, чтобы использовать "class-parse". + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Целевой объект "{0}" создания кода Android является устаревшим и будет удален в следующей версии Xamarin.Android. Обновите свойства проекта, чтобы использовать "XAJavaInterop1". + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Использование ссылки на проект приложения Android Wear "{0}" из проекта приложения Android является нерекомендуемым, и в будущей версии Xamarin.Android поддержка такой ссылки будет прекращена. Удалите ссылку на проект приложения Android Wear из проекта приложения Android и распространяйте приложение Wear в качестве автономного приложения. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - Не удалось найти файл android.jar для уровня API {0}. Это означает, что платформа SDK для Android для уровня API {0} не установлена. Установите его в Диспетчере SDK Android ({2}) или измените проект Xamarin.Android, чтобы установленная версия API использовалась в нем в качестве целевой. (Отсутствует файл {1}.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Средства > Открыть Диспетчер SDK Android… - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Средства > Android > Диспетчер SDK Android… - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Имя пакета приложения Wear для встроенных устройств отличается от имени пакета приложения для наладонных устройств ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx index d194aea0bc5..adfb700964d 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex `LibraryProjectProperties` dosyası `{0}`, bağlama projesinin ara çıkış dizininin bir üst dizininde yer alıyor. Lütfen yolu özgün `project.properties` dosyasını doğrudan Android kitaplığı proje dizininden kullanacak şekilde ayarlayın. The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - '{0}' yapılandırma dosyası yoksayılıyor. .NET yapılandırma dosyaları, .NET 6 veya üstünü hedefleyen Xamarin.Android projelerinde desteklenmiyor. - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - .NET 6 veya üstünü hedefleyen Xamarin.Android projelerinde AAPT kullanımı desteklenmiyor. Lütfen Visual Studio projesinin özellik sayfalarındaki 'Artımlı Android paketleme sistemini (aapt2) kullan' seçeneğini etkinleştirin veya proje dosyasını bir metin düzenleyicisinde düzenleyip 'AndroidUseAapt2' MSBuild özelliğini 'true' olarak ayarlayın. + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ AndroidManifest.xml dosyasındaki değeri $(SupportedOSPlatformVersion) değeriy {1} - The SupportedOSPlatformVersion property value - {0} bütünleştirilmiş kodunda AppDomain.CreateDomain() metodunun kullanıldığı saptandı. .NET 6 üstünde yalnızca tek bir AppDomain destekleneceğinden bu API, .NET 6 yayımlandıktan sonra artık Xamarin.Android içinde bulunmayacaktır. + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - '{0}' Android sınıf ayrıştırıcı değeri kullanımdan kaldırıldı ve Xamarin.Android'in gelecekteki bir sürümünde kaldırılacak. Proje özelliklerini 'class-parse' kullanacak şekilde güncelleştirin. + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - '{0}' Android kod oluşturma hedefi kullanımdan kaldırıldı ve Xamarin.Android'in gelecekteki bir sürümünde kaldırılacak. Proje özelliklerini 'XAJavaInterop1' kullanacak şekilde güncelleştirin. + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Android uygulama projesinden '{0}' Android Wear uygulama projesine başvurulması kullanımdan kaldırıldı ve artık Xamarin.Android'in gelecekteki sürümlerinde desteklenmeyecek. Android uygulama projesinden Android Wear uygulama projesi başvurusunu kaldırın ve bunun yerine Wear uygulamasını bağımsız bir uygulama olarak dağıtın. + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ Projenizden '{0}' başvurusunu kaldırın ve yerine '{1}' NuGet paketini ekleyin {0} - The missing tool name - API düzeyi {0} için android.jar bulunamadı. Bu, API düzeyi {0} için Android SDK platformunun yüklü olmadığı anlamına gelir. Bu platformu Android SDK Yöneticisi'nde ({2}) yükleyin veya Xamarin.Android projesini, yüklü bir API sürümünü hedefleyecek şekilde değiştirin. ({1} eksik.) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - Araçlar > Android SDK Yöneticisi'ni Aç... - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - Araçlar > Android > Android SDK Yöneticisi... - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. Eklenmiş Wear uygulama paketi adı, el bilgisayarı uygulama paketi adından farklı ({0} != {1}). diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx index b02794b3f15..a9109e7f1ae 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex "LibraryProjectProperties" 文件“{0}”位于绑定项目的中间输出目录的父目录中。请调整路径,以直接从 Android 库项目目录使用原始 "project.properties" 文件。 The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - 将忽略配置文件“{0}”。在面向 .NET 6 或更高版本的 Xamarin.Android 项目中不支持 .NET 配置文件。 - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - 在面向 .NET 6 或更高版本的 Xamarin.Android 项目中不支持使用 AAPT。请在 Visual Studio 项目属性页面中启用“使用增量 Android 打包系统(aapt2)”,或者在文本编辑器中编辑项目文件,并将 "AndroidUseAapt2" MSBuild 属性设置为 "true"。 + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ In this message, the term "binding" means a piece of generated code that makes i {1} - The SupportedOSPlatformVersion property value - 在程序集 {0} 中检测到使用了 AppDomain.CreateDomain()。.NET 6 及更高版本将仅支持一个 AppDomain,因此 .NET 6 发布后,将无法再在 Xamarin.Android 中使用此 API。 + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Android 类分析器值“{0}”已被弃用,并将在 Xamarin.Android 的未来版本中被删除。要使用 "class-parse",请更新项目属性。 + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Android 代码生成目标“{0}”已被弃用,并将在 Xamarin.Android 的未来版本中被删除。要使用 "XAJavaInterop1",请更新项目属性。 + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - 已弃用从 Android 应用程序项目中引用 Android Wear 应用程序项目“{0}”的功能,并且未来版本的 Xamarin.Android 中将不再支持此功能。请从 Android 应用程序项目中删除 Android Wear 应用程序项目引用,并将 Wear 应用程序作为独立应用程序进行分发。 + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - 找不到 API 级别 {0} 的 android jar。这意味着未安装 API 级别 {0} 的 Android SDK 平台。请在 Android SDK 管理器 {2} 中安装它,或更改 Xamarin.Android 项目,使其将安装的 API 版本作为目标。(缺少 {1}。) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - “工具”>“打开 Android SDK 管理器”… - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - “工具”>“ Android”>“Android SDK 管理器”… - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. 嵌入的 Wear 应用包名称与手持式应用包名称不同({0} != {1})。 diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx index a5f5014da91..b43ecb1cd56 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx @@ -416,7 +416,7 @@ The capitalized word "Portable" that appears earlier in the message is plain tex 'LibraryProjectProperties' 檔案 '{0}' 位於繫結專案之中繼輸出目錄的父目錄中。請將該路徑調整為直接使用 Android 程式庫專案目錄中的原始 'project. properties' 檔案。 The following are literal names and should not be translated: LibraryProjectProperties, project.properties, Android -In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a Xamarin.Android project written in C# or F#. +In this message, the term "binding" means a piece of generated code that makes it easy to access an Android API written in Java from a .NET Android project written in C# or F#. {0} - The path of the LibraryProjectProperties file @@ -438,8 +438,8 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - 正在忽略組態檔 '{0}'。以 .NET 6 或更新版本為目標的 Xamarin.Android 專案不支援 .NET 組態檔。 - The following are literal names and should not be translated: .NET, Xamarin.Android. + Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - 以 .NET 6 或更新版本為目標的 Xamarin.Android 專案不支援使用 AAPT。請在 Visual Studio 專案屬性頁中啟用 [使用增量 Android 套件系統 (aapt2)],或在文字編輯器中編輯專案檔,並將 'AndroidUseAapt2' MSBuild 屬性設定為 'true'。 + Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ In this message, the term "binding" means a piece of generated code that makes i {1} - The SupportedOSPlatformVersion property value - 在下列組件中偵測到使用 AppDomain.CreateDomain(): {0}。.NET 6 及更新版本只支援單一 AppDomain,因此在 .NET 6 發行之後,此 API 就無法再於 Xamarin.Android 中使用。 + 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 .NET Android once .NET 6 is released. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - Android 類別剖析器值 '{0}' 即將退場,將會從後續版本的 Xamarin.Android 版本中移除。請更新專案屬性,以使用 'class-parse'。 + The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - Android 程式碼產生目標 '{0}' 即將退場,將會從後續版本的 Xamarin.Android 版本中移除。請更新專案屬性,以使用 'XAJavaInterop1'。 + The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - 從 Android 應用程式專案參考 Android Wear 應用程式專案 '{0}' 的功能已淘汰,且日後的 Xamarin.Android 版本將不再予以支援。從 Android 應用程式專案移除 Android Wear 應用程式專案參考,並將 Wear 應用程式改為以獨立應用程式發佈。 + Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,19 +861,23 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - 找不到 API 層級 {0} 的 android.jar。這表示未安裝 API 層級 {0} 的 Android SDK 平台。請將其安裝在 Android SDK 管理員 ({2}) 中,或將 Xamarin.Android 專案變更成以已安裝的 API 版本作為目標。(缺少 {1}。) + Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. +{2} +See https://aka.ms/xa5207 for more details. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file -{2} - The menu location in Visual Studio that can be used to launch the Android SDK Manager - - - [工具] > [開啟 Android SDK 管理員...] - This string is the location of a menu command in Visual Studio for Mac. +{2} - The instructions to install the missing component - [工具] > [Android] > [Android SDK 管理員...] - This string is the location of a menu command in Visual Studio. + Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + This string is the instrucitons to install the component + + + You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + This string is the instrucitons to install the component +{0} - The TargetFramework the app is targeting. +{1} - The current AndroidSdkDirectory path. 內嵌 Wear 應用程式套件名稱與手持功能應用程式套件名稱不同 ({0} != {1})。 From 607115fd5c17035aeb5dd518b700a296fb604a13 Mon Sep 17 00:00:00 2001 From: "CSIGS@microsoft.com" Date: Fri, 8 Dec 2023 03:38:03 -0800 Subject: [PATCH 60/92] LEGO: Merge pull request 8575 LEGO: Merge pull request 8575 --- .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ 6 files changed, 264 insertions(+), 120 deletions(-) diff --git a/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index f94907d61fa..a2afd34ff84 100644 --- a/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Správce sady Android SDK...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Otevřít správce sady Android SDK...]]> + Android > Správce sady Android SDK…), nebo změňte projekt .NET pro Android tak, aby cílil na nainstalovanou verzi rozhraní API.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index a533166ebb9..6cd825a7b5c 100644 --- a/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Android-SDK-Manager...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Android-SDK-Manager öffnen...]]> + Android > Android SDK-Manager...), oder ändern Sie das .NET Android-Projekt so, dass es auf eine installierte API-Version abzielt.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 078081cfbbc..54ce7399887 100644 --- a/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Administrador de Android SDK...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Abrir el Administrador de Android SDK...]]> + Android > Android SDK Manager...) o cambie el proyecto .NET Android para que se dirija a una versión de la API que esté instalada.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index e63f00d1a22..33b285bb66a 100644 --- a/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Gestionnaire SDK Android...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Ouvrir le Gestionnaire SDK Android...]]> + Android > Gestionnaire SDK Android...), ou modifiez le projet Android .NET pour cibler une version d’API installée.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 489c35d80b0..b13268a351d 100644 --- a/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Диспетчер SDK Android…]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Открыть Диспетчер SDK Android…]]> + Android > Диспетчер SDK Android...) или измените проект .NET Android, выбрав для него в качестве цели установленную версию API.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 3c34695d749..330c2217c32 100644 --- a/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - [Android]5D; > [Android SDK 管理員...]5D;]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - [開啟 Android SDK 管理員...]5D;]]> + Android > Android SDK 管理員...),或將 .NET Android 專案變更為針對已安裝的 API 版本為目標。]]> + + Android > Android SDK Manager...]]> + From 38e950b41081c1bb04d46f2ddca26a71d9f25e3e Mon Sep 17 00:00:00 2001 From: VS MobileTools Engineering Service 2 Date: Mon, 11 Dec 2023 06:43:52 -0800 Subject: [PATCH 61/92] Localized file check-in by OneLocBuild Task (#8576) Context: https://aka.ms/onelocbuild Context: https://aka.ms/AllAboutLoc Build definition ID 17928: Build ID 8789978 --- .../Properties/Resources.cs.resx | 20 +++++++++---------- .../Properties/Resources.de.resx | 20 +++++++++---------- .../Properties/Resources.es.resx | 20 +++++++++---------- .../Properties/Resources.fr.resx | 20 +++++++++---------- .../Properties/Resources.ru.resx | 20 +++++++++---------- .../Properties/Resources.zh-Hant.resx | 20 +++++++++---------- 6 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx index b8b3d72c070..510be7e908f 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Ignoruje se konfigurační soubor {0}. Konfigurační soubory .NET se v projektech .NET pro Android, které cílí na .NET 6 nebo vyšší, nepodporují. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + Používání AAPT se v projektech .NET pro Android, které cílí na .NET 6 nebo vyšší, nepodporuje. Povolte prosím možnost Použít systém přírůstkového balení pro Android (aapt2) na stránce vlastností projektu sady Visual Studio, nebo upravte soubor projektu v textovém editoru a nastavte vlastnost MSBuildu AndroidUseAapt2 na true. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Buď změňte hodnotu v souboru AndroidManifest.xml tak, aby odpovídala hodnot {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + Použití funkce AppDomain.CreateDomain() zjištěné v sestavení: {0}. .NET 6 a vyšší bude podporovat jenom jednu doménu AppDomain, takže toto rozhraní API po vydání .NET 6 už v .NET pro Android nebude dostupné. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Hodnota analyzátoru tříd Androidu {0} je zastaralá a v budoucí verzi .NET pro Android se odebere. Aktualizujte vlastnosti projektu tak, aby používaly class-parse. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Cíl generování kódu pro Androidu {0} je zastaralý a v budoucí verzi .NET pro Android se odebere. Aktualizujte vlastnosti projektu tak, aby používaly XAJavaInterop1. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Odkazování na projekt aplikace pro Android Wear {0} z projektu aplikace pro Android je zastaralé a v budoucí verzi .NET pro Android se už nebude podporovat. Odeberte odkaz na projekt aplikace pro Android Wear z projektu aplikace pro Android a distribuujte aplikaci pro Wear jako samostatnou aplikaci. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Odeberte z projektu odkaz na {0} a místo toho přidejte balíček NuGet{1}. {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + Soubor android.jar pro úroveň rozhraní API {0} nebyl nalezen. To znamená, že platforma Android SDK pro úroveň rozhraní API {0} není nainstalovaná. Očekávalo se, že bude v: {1}. {2} -See https://aka.ms/xa5207 for more details. +Další podrobnosti najdete na https://aka.ms/xa5207. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Buď tuto komponentu nainstalujte ve Správci sady Android SDK (Nástroje > Android > Správce sady Android SDK…), nebo změňte projekt .NET pro Android tak, aby cílil na nainstalovanou verzi rozhraní API. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Chybějící úroveň rozhraní API můžete nainstalovat spuštěním příkazu dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}", případně můžete změnit projekt tak, aby cílil na nainstalovanou verzi rozhraní API. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx index c70d4ae09be..0af8228576e 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Die Konfigurationsdatei "{0}" wird ignoriert. .NET-Konfigurationsdateien werden in .NET Android-Projekten, die auf .NET 6 oder höher ausgerichtet sind, nicht unterstützt. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + Die Verwendung von AAPT wird in .NET Android-Projekten, die auf .NET 6 oder höher ausgerichtet sind, nicht unterstützt. Aktivieren Sie "Inkrementelles Android-Paketierungssystem (aapt2) verwenden" in den Visual Studio-Projekteigenschaftsseiten, oder bearbeiten Sie die Projektdatei in einem Text-Editor, und legen Sie die MSBuild-Eigenschaft "AndroidUseAapt2" auf WAHR fest. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Bitte ändern Sie den Wert in einen Assembly-basierten Typnamen, der von „{1} {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + Die Verwendung von AppDomain.CreateDomain() wurde in der Assembly {0} erkannt. .NET 6 und höher unterstützt nur eine einzelne AppDomain, sodass diese API nach der Veröffentlichung von .NET 6 nicht mehr in .NET Android verfügbar ist. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Der Android-Klassenparserwert "{0}" ist veraltet und wird in einer zukünftigen Version von .NET Android entfernt. Aktualisieren Sie die Projekteigenschaften, um "class-parse" zu verwenden. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Das Android-Codegenerierungsziel "{0}" ist veraltet und wird in einer zukünftigen Version von .NET Android entfernt. Aktualisieren Sie die Projekteigenschaften, um "XAJavaInterop1" zu verwenden. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Das Verweisen auf das Android Wear-Anwendungsprojekt "{0}" aus einem Android-Anwendungsprojekt ist veraltet und wird in einer zukünftigen Version von .NET Android nicht mehr unterstützt. Entfernen Sie den Verweis auf das Android Wear-Anwendungsprojekt aus dem Android-Anwendungsprojekt, und verteilen Sie die Wear-Anwendung stattdessen als eigenständige Anwendung. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Entfernen Sie den '{0}' Verweis aus Ihrem Projekt, und fügen Sie stattdessen da {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + android.jar für API-Ebene {0} wurde nicht gefunden. Dies bedeutet, dass die Android SDK-Plattform für die API-Ebene {0} nicht installiert ist. Es wurde erwartet, dass sie sich in "{1}" befindet. {2} -See https://aka.ms/xa5207 for more details. +Weitere Informationen finden Sie unter https://aka.ms/xa5207. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Installieren Sie es entweder im Android SDK-Manager (Tools > Android > Android SDK-Manager...), oder ändern Sie das .NET Android-Projekt so, dass es auf eine installierte API-Version abzielt. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Sie können die fehlende API-Ebene installieren, indem Sie "dotnet build -t:InstallAndroidDependencies -f" {0} "-p:AndroidSdkDirectory={1}" ausführen oder das Projekt so ändern, dass es auf eine installierte API-Version ausgerichtet wird. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx index e585dc5cc18..b6e15881793 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Ignorando el archivo de configuración "{0}". Los archivos de configuración .NET no son compatibles con proyectos .NET Android que tengan como objetivo .NET 6 o superior. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + El uso de AAPT no es compatible con proyectos .NET Android que tengan como objetivo .NET 6 o superior. Habilite "Use el sistema de empaquetado de Android incremental (aapt2)" en las páginas de propiedades del proyecto de Visual Studio o edite el archivo del proyecto en un editor de texto y establezca la propiedad "AndroidUseAapt2" de MSBuild en "true". The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Cambie el valor de AndroidManifest.xml para que coincida con el valor $(Supporte {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + Uso de AppDomain.CreateDomain() detectado en el ensamblado: {0}.NET 6 y superiores solo admitirán un único AppDomain, por lo que esta API dejará de estar disponible en .NET Android una vez que se publique .NET 6. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + El valor "{0}" del analizador de clases de Android está obsoleto y se eliminará en una futura versión de .NET Android. Actualice las propiedades del proyecto para usar "class-parse". The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + El objetivo de generación de código Android "{0}" está obsoleto y se eliminará en una futura versión de .NET Android. Actualice las propiedades del proyecto para usar "XAJavaInterop1". The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Hacer referencia al proyecto de aplicación Android Wear "{0}" desde un proyecto de aplicación Android está obsoleto y ya no se admitirá en una versión futura de .NET Android. Elimine la referencia al proyecto de la aplicación Android Wear del proyecto de la aplicación Android y distribuya en su lugar la aplicación Wear como una aplicación independiente. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Quite la referencia de "{0}" del proyecto y agregue el paquete NuGet "{1}". {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + No se ha podido encontrar android.jar para el nivel API {0}. Esto significa que la plataforma Android SDK para el nivel API {0} no está instalada; se esperaba que estuviera en "{1}". {2} -See https://aka.ms/xa5207 for more details. +Consulte https://aka.ms/xa5207 para obtener más detalles. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Instálelo en el Android SDK Manager (herramientas > Android > Android SDK Manager...) o cambie el proyecto .NET Android para que se dirija a una versión de la API que esté instalada. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Puede instalar el nivel de API que falta ejecutando "dotnet build -t:InstallAndroidDependencies -f {0}"-p:AndroidSdkDirectory={1}"`, o cambiar el proyecto para que tenga como objetivo una versión de API que esté instalada. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx index 9616c11f774..5c79b721976 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Fichier de configuration «{0}» ignoré. Les fichiers de configuration .NET ne sont pas pris en charge dans les projets Android .NET qui ciblent .NET 6 ou une version ultérieure. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + L’utilisation d’AAPT n’est pas prise en charge dans les projets Android .NET qui ciblent .NET 6 ou une version ultérieure. Activez 'Utiliser le système d'empaquetage Android incrémentiel (aapt2)' dans les pages de propriétés de projet Visual Studio, ou modifiez le fichier projet dans un éditeur de texte, puis affectez la valeur 'true' à la propriété MSBuild 'AndroidUseAapt2'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Modifiez la valeur dans AndroidManifest.xml pour qu’elle corresponde à la val {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + Utilisation d’AppDomain.CreateDomain() détectée dans l’assembly : {0}. .NET 6 et versions ultérieures ne prennent en charge qu’un seul AppDomain. Cette API ne sera donc plus disponible dans .NET Android une fois .NET 6 publié. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + La valeur de l’analyseur de classe Android «{0}» est déconseillée et sera supprimée dans une future version de .NET Android. Mettez à jour les propriétés du projet pour utiliser 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + La cible de génération de code Android «{0}» est déconseillée et sera supprimée dans une future version de .NET Android. Mettez à jour les propriétés du projet pour utiliser 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Le référencement du projet d’application Android Wear «{0}» à partir d’un projet d’application Android est déconseillé et ne sera plus pris en charge dans une future version de .NET Android. Supprimez la référence du projet d’application Android Wear du projet d’application Android et distribuez l’application Wear en tant qu’application autonome à la place. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Supprimez la référence de '{0}' de votre projet et ajoutez plutôt le '{1}'.pa {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + Android.jar introuvable pour le niveau d’API {0}. Cela signifie que la plateforme Android SDK pour le niveau d’API {0} n’est pas installée ; il était attendu dans «{1}». {2} -See https://aka.ms/xa5207 for more details. +Pour plus d’informations, consultez https://aka.ms/xa5207. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Installez-le dans le Gestionnaire SDK Android (Outils > Android > Gestionnaire SDK Android...), ou modifiez le projet Android .NET pour cibler une version d’API installée. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Vous pouvez installer le niveau d’API manquant en exécutant « dotnet build -t :InstallAndroidDependencies -f {0} « -p :AndroidSdkDirectory={1}« », ou modifiez le projet pour cibler une version d’API installée. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx index 87031e119f2..e699494cd93 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Пропуск файла конфигурации "{0}". Файлы конфигурации .NET не поддерживаются в проектах .NET Android для .NET 6 и более поздних версий. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + Использование AAPT не поддерживается в проектах .NET Android для .NET 6 и более поздних версий. Установите параметр "Использование инкрементной системы создания пакетов Android (AAPT2)" на страницах свойств проекта в Visual Studio или откройте файл проекта в текстовом редакторе и задайте значение "true" для свойства MSBuild "AndroidUseAapt2". The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ In this message, the term "binding" means a piece of generated code that makes i {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + В сборке обнаружено использование AppDomain.CreateDomain(): {0}. .NET 6 и более поздние версии будут поддерживать только один домен AppDomain, поэтому этот API больше не будет доступен в .NET Android после выпуска .NET 6. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Значение "{0}" синтаксического анализатора класса Android является устаревшим и будет удалено в будущей версии .NET Android. Обновите свойства проекта, чтобы использовать "class-parse". The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Целевой объект "{0}" создания кода Android является устаревшим и будет удален в следующей версии .NET Android. Обновите свойства проекта, чтобы использовать "XAJavaInterop1". The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Использование ссылки на проект приложения Android Wear "{0}" из проекта приложения Android является нерекомендуемым, и в будущей версии .NET Android поддержка такой ссылки будет прекращена. Удалите ссылку на проект приложения Android Wear из проекта приложения Android и распространяйте приложение Wear в качестве автономного приложения. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + Не удалось найти android.jar для уровня API {0}. Это означает, что платформа Android SDK для уровня API {0} не установлена. Ожидалось ее нахождение в "{1}". {2} -See https://aka.ms/xa5207 for more details. +Дополнительные сведения см. на странице https://aka.ms/xa5207. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Установите его в Диспетчере SDK Android (Инструменты > Android > Диспетчер SDK Android...) или измените проект .NET Android, выбрав для него в качестве цели установленную версию API. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Вы можете установить отсутствующий уровень API, выполнив команду "dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"" или изменив проект путем выбора установленной версии API в качестве цели. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx index b43ecb1cd56..a131b204b49 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + 正在忽略組態檔 '{0}'。以 .NET 6 或更新版本為目標的 .NET Android 專案不支援 .NET 組態檔。 The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + 以 .NET 6 或更新版本為目標的 .NET Android 專案不支援使用 AAPT。請在 Visual Studio 專案屬性頁中啟用 [使用增量 Android 套件系統 (aapt2)],或在文字編輯器中編輯專案檔,並將 'AndroidUseAapt2' MSBuild 屬性設定為 'true'。 The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ In this message, the term "binding" means a piece of generated code that makes i {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + 在下列組件中偵測到使用 AppDomain.CreateDomain(): {0}。.NET 6 及更新版本只支援單一 AppDomain,因此在 .NET 6 發行之後,此 API 就無法再於 .NET Android 中使用。 The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Android 類別剖析器值 '{0}' 即將退場,將會從後續版本的 .NET Android 版本中移除。請更新專案屬性,以使用 'class-parse'。 The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Android 程式碼產生目標 '{0}' 即將退場,將會從後續版本的 .NET Android 版本中移除。請更新專案屬性,以使用 'XAJavaInterop1'。 The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + 從 Android 應用程式專案參考 Android Wear 應用程式專案 '{0}' 的功能已淘汰,且日後的 .NET Android 版本將不再予以支援。從 Android 應用程式專案移除 Android Wear 應用程式專案參考,並將 Wear 應用程式改為以獨立應用程式發佈。 The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + 找不到 API 層級 {0} 的 android.jar。這表示未安裝 API 層級的 Android SDK {0}; 該平台應位於 `{1}` 中。 {2} -See https://aka.ms/xa5207 for more details. +如需詳細資料,請參閱 https://aka.ms/xa5207。 The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + 請將其安裝在 Android SDK 管理員中 (工具 > Android > Android SDK 管理員...),或將 .NET Android 專案變更為針對已安裝的 API 版本為目標。 This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + 您可以執行 `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"` 來安裝遺失的 API 層級,或將專案變更為針對已安裝的 API 版本為目標。 This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. From 3333306b876ccddd4ae4fdf6af7ccbc330468fb3 Mon Sep 17 00:00:00 2001 From: "CSIGS@microsoft.com" Date: Tue, 12 Dec 2023 03:35:59 -0800 Subject: [PATCH 62/92] LEGO: Merge pull request 8587 LEGO: Merge pull request 8587 --- .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ .../Properties/Resources.resx.lcl | 64 +++++++++++++------ 7 files changed, 308 insertions(+), 140 deletions(-) diff --git a/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 0f09feaab4f..35471fd1c4d 100644 --- a/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Gestione Android SDK...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Apri Gestione Android SDK...]]> + Android > Gestione Android SDK...) oppure modifica il progetto Android .NET in modo che sia destinato a una versione API installata.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 6ec4c9ac8eb..b0a8df350d2 100644 --- a/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - [Android]5D; > [Android SDK マネージャー...]5D;]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - [Android SDK マネージャーを開く...]5D;]]> + [Android]5D; > [Android SDK マネージャー]5D;...) にインストールするか、インストールされている API バージョンを対象とするように .NET Android プロジェクトを変更してください。]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index d989e0217f8..629c6109d13 100644 --- a/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Android SDK 관리자...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Android SDK 관리자 열기...]]> + Android > Android SDK 관리자...) 설치된 API 버전을 대상으로 하도록 .NET Android 프로젝트를 변경합니다.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index be85483ab31..ae6e8464580 100644 --- a/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Menedżer zestawów Android SDK...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Otwórz Menedżer zestawów SDK dla systemu Android...]]> + Android > Menedżer zestawów Android SDK...) lub zmień projekt platformy .NET dla systemu Android, tak aby był przeznaczony dla zainstalowanej wersji interfejsu API.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 54e9045ba51..d4b84d22f9c 100644 --- a/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Gerenciador de SDK Android...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Abrir o Gerenciador de SDK Android...]]> + Android > Gerenciador de SDK Android...) ou altere o projeto do Android .NET para direcionar a uma versão de API instalada.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index e4a3aeaf274..1d941c9f5e4 100644 --- a/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - Android > Android SDK Yöneticisi...]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - Android SDK Yöneticisi'ni Aç...]]> + Android > Android SDK Yöneticisi...) veya .NET Android projesini, yüklü bir API sürümünü hedefleyecek şekilde değiştirin.]]> + + Android > Android SDK Manager...]]> + diff --git a/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 89b965f9e8e..2f0da1e9395 100644 --- a/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -617,10 +617,13 @@ - + - + + + + @@ -644,10 +647,13 @@ - + - + + + + @@ -743,10 +749,13 @@ - + - + + + + @@ -1094,19 +1103,25 @@ - + - + + + + - + - + + + + @@ -1265,10 +1280,13 @@ - + - + + + + @@ -1382,28 +1400,34 @@ - + - + + + + - + - Android > Android SDK Manager...]]> + - “ Android”>“Android SDK 管理器”…]]> + - + - Open Android SDK Manager...]]> + Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed.]]> - “打开 Android SDK 管理器”…]]> + Android > Android SDK 管理器...),要么将 .NET Android 项目更改为面向已安装的 API 版本。]]> + + Android > Android SDK Manager...]]> + From 73efcfcad027bbab036ecc4e06293b20cee93d11 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 13 Dec 2023 16:00:01 -0600 Subject: [PATCH 63/92] [Xamarin.Android.Buid.Tasks] don't set $(PublishSelfContained) for .NET 9 (#8565) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context: https://github.com/dotnet/sdk/commit/d21e6bf5c5a239892d771f409841ce856bddcd89 Context: 8fa5d99341b868795b54bfa9d087bda38151a4d2 Context: 0cd963ac03fbd3d7370221adbc65b099e18f6565 Context: 95946d2e7f745ecc93efcd57cb862ae5d0912618 Context: 964746e83a85926b93057559dac70844b2ab3055 Building a `net8.0-android` project with a .NET 9 SDK will fail when providing an RID: > dotnet publish # works > dotnet publish -r android-arm64 MSBuild version 17.9.0-preview-23577-01+31108edc1 for .NET … bin\Debug\dotnet\sdk\9.0.100-alpha.1.23603.1\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.FrameworkReferenceResolution.targets(494,5): error NETSDK1112: The runtime pack for Microsoft.Android.Runtime.34.android-arm64 was not downloaded. Try running a NuGet restore with the RuntimeIdentifier 'android-arm64'. Our repo also sets `$(DisableTransitiveFrameworkReferenceDownloads)` within unit tests (95946d2e), which causes a slightly different error message: error NETSDK1185: The Runtime Pack for FrameworkReference 'Microsoft.Android.Runtime.34.android-arm' was not available. This may be because DisableTransitiveFrameworkReferenceDownloads was set to true. which matches the TODO within 8fa5d993: > * A specific case of `dotnet publish -f net8.0-android -r android-arm` > is failing with: > > error NETSDK1185: The Runtime Pack for FrameworkReference 'Microsoft.Android.Runtime.34.android-arm' was not available. This may be because DisableTransitiveFrameworkReferenceDownloads was set to true. > > This is related to `$(AllowSelfContainedWithoutRuntimeIdentifier)`, > but I will address in a future PR. This will likely require .NET 8 > Android workload changes. In .NET 8, 0cd963ac0 began setting `$(PublishSelfContained)`=false as a way to avoid the error: Microsoft.NET.RuntimeIdentifierInference.targets(212,5): error NETSDK1191: A runtime identifier for the property 'SelfContained' couldn't be inferred. Specify a rid explicitly. Because Android is always self-contained, we set `$(SelfContained)` through other means (964746e8; `$(SelfContained)` is set as part of the inner builds), and everything worked. In .NET 9, other changes were made such that this "workaround" no longer works. To fix this, @@rolfbjarne introduced dotnet/sdk@d21e6bf5 and `$(AllowSelfContainedWithoutRuntimeIdentifier)` as a way to fix the issue going forward in .NET 9. We are using the new property in .NET 9 since 8fa5d993. Unfortunately, this leaves one case that is still broken: 1. Create a new project with `$(TargetFramework)`=net8.0-android (i.e. a .NET 8 project) 2. Using the .NET 9 SDK 3. Building while specifying a RID, e.g. dotnet publish -r android-arm64 It seems like, for now, we can just condition our workaround for .NET 8 and below: false Making this change locally, both cases work for me: * .NET 8 project, .NET 8 SDK: `dotnet publish -r android-arm64` * .NET 8 project, .NET 9 SDK: `dotnet publish -r android-arm64` The only other solution would be to create our own empty `_CheckForUnsupportedAppHostUsage` target to avoid errors, but that seems explicitly worse. We should also backport dotnet/sdk#d21e6bf5 to .NET 8 SDKs, but it will probably take a month for that to ship. After this is merged and we have a new, nightly .NET 8 build, we can restore the [`XASdkTests.DotNetPublish()` unit test][0] on main. [0]: https://github.com/xamarin/xamarin-android/blob/40cc8eaf78eb9f95abcc0e966ab274cef1692acc/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/XASdkTests.cs#L202-L205 --- .../targets/Microsoft.Android.Sdk.DefaultProperties.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets index 81d1dedc773..9430a8a63d3 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.Android.Sdk/targets/Microsoft.Android.Sdk.DefaultProperties.targets @@ -75,7 +75,7 @@ This prevents an early error message during 'dotnet publish'. We handle $(SelfContained) in a custom way where it is forced to be true. --> - false + false SdkOnly None From 6972027f09d8efe64b131937562c2533e69b9dec Mon Sep 17 00:00:00 2001 From: VS MobileTools Engineering Service 2 Date: Wed, 13 Dec 2023 12:58:29 -0800 Subject: [PATCH 64/92] Localized file check-in by OneLocBuild Task (#8589) Context: https://aka.ms/onelocbuild Context: https://aka.ms/AllAboutLoc Build definition ID 17928: Build ID 8805099 --- .../Properties/Resources.it.resx | 20 +++++++++---------- .../Properties/Resources.ja.resx | 20 +++++++++---------- .../Properties/Resources.ko.resx | 20 +++++++++---------- .../Properties/Resources.pl.resx | 20 +++++++++---------- .../Properties/Resources.pt-BR.resx | 20 +++++++++---------- .../Properties/Resources.tr.resx | 20 +++++++++---------- .../Properties/Resources.zh-Hans.resx | 20 +++++++++---------- 7 files changed, 70 insertions(+), 70 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx index 9ed610f8c39..7a17e66fd24 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Il file di configurazione '{0}' verrà ignorato. I file di configurazione .NET non sono supportati in progetti .NET Android destinati a .NET 6 o versione successiva. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + L'uso di AAPT non è supportato in progetti .NET Android destinati a .NET 6 o versione successiva. Abilitare 'Usa sistema di creazione pacchetti Android incrementale (AAPT2)' nelle pagine delle proprietà del progetto di Visual Studio o modificare il file di progetto in un editor di testo e impostare la proprietà 'AndroidUseAapt2' di MSBuild su 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Modificare il valore in AndroidManifest.xml in modo che corrisponda al valore $( {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + È stato rilevato l'uso di AppDomain.CreateDomain() nell'assembly: {0}. .NET 6 e versioni successive supporteranno solo un singolo AppDomain, quindi questa API non sarà più disponibile in .NET Android dopo il rilascio di .NET 6. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Il valore '{0}' del parser di classi Android è deprecato e verrà rimosso in una versione futura di .NET Android. Aggiornare le proprietà del progetto in modo da usare 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + La destinazione '{0}' per la generazione del codice Android è deprecato e verrà rimosso in una versione futura di .NET Android. Aggiornare le proprietà del progetto in modo da usare 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Il riferimento a un progetto applicazione Android Wear '{0}' da un progetto Applicazione Android è deprecato e non sarà più supportato in una versione futura di .NET Android. Rimuovere il riferimento al progetto Applicazione Android Wear dal progetto Applicazione Android e distribuire l'applicazione Wear come applicazione autonoma. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Rimuovere il riferimento '{0}' dal progetto e aggiungere invece il pacchetto NuG {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + Non è stato possibile trovare android.jar per il livello API {0}. Ciò significa che la piattaforma Android SDK per {0} a livello di API non è installata; si prevedeva che fosse in '{1}'. {2} -See https://aka.ms/xa5207 for more details. +Per altri dettagli, vedi https://aka.ms/xa5207. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Installalo in Gestione Android SDK (Strumenti > Android > Gestione Android SDK...) oppure modifica il progetto Android .NET in modo che sia destinato a una versione API installata. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Puoi installare il livello API mancante eseguendo 'dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"' o modifica il progetto in modo che sia destinato a una versione API installata. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx index 3e0451ed16d..7fb8714447f 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + 構成ファイル '{0}' を無視しています。.NET 構成ファイルは、.NET 6 以降を対象とする .NET Android プロジェクトではサポートされていません。 The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + .NET 6 以降を対象とする .NET Android プロジェクトでは、AAPT の使用はサポートされていません。Visual Studio プロジェクトのプロパティ ページで [インクリメンタル Android パッケージ システム (aapt2) を使用します] を有効にするか、テキスト エディターでプロジェクト ファイルを編集して 'AndroidUseAapt2' MSBuild プロパティを 'true' に設定してください。 The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -506,7 +506,7 @@ $(SupportedOSPlatformVersion) 値に一致するように AndroidManifest.xml {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + アセンブリ {0} で AppDomain.CreateDomain() が使用されていることが検出されました。.NET 6 以降では単一の AppDomain のみがサポートされる予定のため、.NET 6 がリリースされるとこの API は .NET Android では使用できなくなります。 The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -705,12 +705,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Android クラス パーサーの値 '{0}' は非推奨であり、.NET Android の今後のバージョンでは削除されます。'class-parse' を使用するようにプロジェクトのプロパティを更新してください。 The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Android コード生成ターゲット '{0}' は非推奨であり、.NET Android の今後のバージョンでは削除されます。'XAJavaInterop1' を使用するようにプロジェクトのプロパティを更新してください。 The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -791,7 +791,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Android アプリケーション プロジェクトから Android Wear アプリケーション プロジェクト '{0}' を参照することは非推奨となり、.NET Android の今後のバージョンではサポートされなくなります。Android アプリケーション プロジェクトから Android Wear アプリケーション プロジェクト参照を削除し、代わりにスタンドアロン アプリケーションとして Wear アプリケーションを配布してください。 The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -862,20 +862,20 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + API レベル {0} の android.jar が見つかりません。これは、API レベル {0} の Android SDK プラットフォームがインストールされていないことを意味します。これは、`{1}` であることが想定されます。 {2} -See https://aka.ms/xa5207 for more details. +詳しくは https://aka.ms/xa5207 を参照してください。 The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Android SDK マネージャー ([ツール] > [Android] > [Android SDK マネージャー]...) にインストールするか、インストールされている API バージョンを対象とするように .NET Android プロジェクトを変更してください。 This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + 不足している API レベルをインストールするには、`dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"` を実行するか、インストールされている API バージョンを対象とするようにプロジェクトを変更します。 This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx index 2ba344f80bd..bc9aeaddf20 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + 구성 파일 '{0}'을(를) 무시합니다. .Net 6 이상을 대상으로 .NET Android 프로젝트에서 .NET 구성 파일은 지원되지 않습니다. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + AAPT는 .NET 6 이상을 대상으로 하는 .NET Android 프로젝트에서 사용할 수 없습니다. Visual Studio 프로젝트 속성 페이지에서 '증분 Android 패키징 시스템(aapt2) 사용'을 사용하도록 설정하거나 텍스트 편집기에서 프로젝트 파일을 편집하고 'AndroidUseAapt2' MSBuild 속성을 'true'로 설정하세요. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ AndroidManifest.xml의 값을 $(SupportedOSPlatformVersion) 값에 맞도록 변 {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + 어셈블리에서 AppDomain.CreateDomain() 사용이 검색되었습니다. {0}. .NET 6 이상에서는 단일 AppDomain만 지원하므로 .NET 6이 릴리스된 후에는 이 API를 .NET Android에서 더 이상 사용할 수 없습니다. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Android 클래스 파서 값 '{0}'은(는) 사용되지 않으며 .NET Android의 이후 버전에서 제거됩니다. 'class-parse'를 사용하도록 프로젝트 속성을 업데이트하세요. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Android 코드 생성 대상 '{0}'은(는) 사용되지 않으며 .NET Android의 이후 버전에서 제거됩니다. 'XAJavaInterop1'을 사용하도록 프로젝트 속성을 업데이트하세요. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Android 애플리케이션 프로젝트에서 Android Wear 애플리케이션 프로젝트 '{0}'을(를) 참조하는 기능은 사용되지 않으며 .NET Android의 이후 버전에서 더 이상 지원되지 않습니다. Android 애플리케이션 프로젝트에서 Android Wear 애플리케이션 프로젝트 참조를 제거하고 대신 Wear 애플리케이션을 독립 실행형 애플리케이션으로 배포하세요. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + API 수준 {0}에 대해 android.jar을 찾을 수 없습니다. 즉, API 수준 {0}에 대한 Android SDK 플랫폼이 설치되어 있지 않습니다. '{1}'에 있어야 합니다. {2} -See https://aka.ms/xa5207 for more details. +자세한 내용은 https://aka.ms/xa5207을 참조하세요. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Android SDK 관리자에 설치하거나(도구 > Android > Android SDK 관리자...) 설치된 API 버전을 대상으로 하도록 .NET Android 프로젝트를 변경합니다. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`을 실행하여 누락된 API 레벨을 설치하거나 설치된 API 버전을 대상으로 하는 프로젝트를 변경할 수 있습니다. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx index 296db0c5a17..1730da75797 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Plik konfiguracji „{0}” zostanie zignorowany. Pliki konfiguracji platformy .NET nie są obsługiwane w projektach .NET dla systemu Android, których miejscem docelowym jest platforma .NET 6 lub nowsza. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + Używanie narzędzia AAPT nie jest obsługiwane w projektach platformy .NET dla systemu Android przeznaczonych dla platformy .NET 6 lub nowszej. Włącz opcję „Użyj systemu przyrostowego tworzenia pakietów systemu Android (aapt2)” na stronach właściwości projektu w programie Visual Studio lub zmodyfikuj plik projektu w edytorze tekstów, ustawiając właściwość programu MSBuild o nazwie „AndroidUseAapt2” na wartość „true”. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Zmień wartość w pliku AndroidManifest.xml, aby odpowiadała wartości $(Suppo {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + Wykryto użycie metody AppDomain.CreateDomain() w zestawie: {0}. Platforma .NET 6 lub nowsza wersja obsługuje tylko jedną domenę aplikacji, dlatego ten interfejs API nie będzie już dostępny na platformie .NET dla systemu Android po wydaniu platformy .NET 6. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Wartość analizatora klas systemu Android „{0}” jest przestarzała i zostanie usunięta w przyszłej wersji platformy .NET dla systemu Android. Zaktualizuj właściwości projektu, aby używać literału „class-parse”. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Element docelowy generowania kodu systemu Android „{0}” jest przestarzały i zostanie usunięty w przyszłej wersji platformy .NET dla systemu Android. Zaktualizuj właściwości projektu, aby używać literału „XAJavaInterop1”. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Odwoływanie się do projektu aplikacji dla systemu Android Wear „{0}” z projektu aplikacji dla systemu Android jest przestarzałe i nie będzie już obsługiwane w przyszłej wersji platformy .NET dla systemu Android. Usuń odwołanie do projektu aplikacji dla systemu Android Wear z projektu aplikacji dla systemu Android i dystrybuuj aplikację dla systemu Wear jako autonomiczną aplikację. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Usuń odwołanie „{0}” z projektu i zamiast niego dodaj pakiet NuGet „{1} {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + Nie można odnaleźć pliku android.jar dla poziomu interfejsu API {0}. Oznacza to, że platforma zestawu Android SDK dla poziomu interfejsu API {0} nie jest zainstalowana. Oczekiwano, że będzie w „{1}”. {2} -See https://aka.ms/xa5207 for more details. +Aby uzyskać więcej informacji, zobacz https://aka.ms/xa5207. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Zainstaluj go w Menedżer zestawów Android SDK (Narzędzia > Android > Menedżer zestawów Android SDK...) lub zmień projekt platformy .NET dla systemu Android, tak aby był przeznaczony dla zainstalowanej wersji interfejsu API. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Brakujący poziom interfejsu API można zainstalować, uruchamiając polecenie „dotnet build -t:InstallAndroidDependencies -f {0} „-p:AndroidSdkDirectory={1}”” lub zmień projekt tak, aby był przeznaczony dla zainstalowanej wersji interfejsu API. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx index 797384cfcd8..8cf2b33ecec 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + Ignorando o arquivo de configuração '{0}'. Não há suporte para os arquivos de configuração do .NET nos projetos Android do .NET direcionados ao .NET 6 ou superior. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + Não há suporte usar o AAPT nos projetos Xamarin.Android direcionados ao .NET 6 ou superior. Habilite 'Usar o sistema de empacotamento Android incremental (aapt2)' nas páginas de propriedades do projeto do Visual Studio ou edite o arquivo de projeto em um editor de texto e defina a propriedade 'AndroidUseAapt2' do MSBuild como 'true'. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ Altere o valor no AndroidManifest.xml para corresponder ao valor $(SupportedOSPl {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + O uso do AppDomain.CreateDomain() foi detectado no assembly: {0}. O .NET 6 e superior dará suporte apenas a um único AppDomain, portanto, essa API não estará mais disponível no Xamarin.Android quando o .NET 6 for lançado. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + O valor do analisador de classe do Android '{0}' foi preterido e será removido em uma versão futura do .NET Android. Atualize as propriedades do projeto para usar 'class-parse'. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + O destino de geração de código android '{0}' foi preterido e será removido em uma versão futura do .NET Android. Atualize as propriedades do projeto para usar 'XAJavaInterop1'. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + A referência ao projeto do aplicativo Android Wear '{0}' de um projeto de aplicativo Android foi preterida e não terá mais suporte em uma versão futura do .NET Android. Remova a referência ao projeto de aplicativo Wear Android do projeto de aplicativo Android e distribua o aplicativo Wear como um aplicativo autônomo. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Remover a referência '{0}' de seu projeto e adicionar o pacote NuGet '{1}' em v {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + Não foi possível localizar android.jar no nível da API {0}. Isso significa que o SDK do Android no nível da API {0} não está instalado; era esperado que ele estivesse em '{1}'. {2} -See https://aka.ms/xa5207 for more details. +Consulte https://aka.ms/xa5207 para obter mais detalhes. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Instale-o no Gerenciador de SDK Android (Ferramentas > Android > Gerenciador de SDK Android...) ou altere o projeto do Android .NET para direcionar a uma versão de API instalada. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Você pode instalar o nível de API ausente executando 'dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"' ou alterar o projeto para ter como destino uma versão de API instalada. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx index adfb700964d..99504d855b2 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + '{0}' yapılandırma dosyası göz ardı ediliyor. .NET yapılandırma dosyaları, .NET 6 veya üstünü hedefleyen .NET Android projelerinde desteklenmez. The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + .NET 6 veya üstünü hedefleyen .NET Android projelerinde AAPT kullanımı desteklenmez. Lütfen Visual Studio projesinin özellik sayfalarındaki 'Artımlı Android paketleme sistemini (aapt2) kullan' seçeneğini etkinleştirin veya proje dosyasını bir metin düzenleyicisinde düzenleyip 'AndroidUseAapt2' MSBuild özelliğini 'true' olarak ayarlayın. The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ AndroidManifest.xml dosyasındaki değeri $(SupportedOSPlatformVersion) değeriy {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + Derlemede AppDomain.CreateDomain() kullanımı algılandı: {0}. .NET 6 ve üzeri yalnızca tek bir AppDomain'i destekleyeceğinden, .NET 6 yayımlandıktan sonra bu API artık .NET Android'de kullanılamayacaktır. The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Android sınıfı ayrıştırıcı değeri '{0}' kullanımdan kaldırıldı ve .NET Android'in gelecekteki bir sürümünde kaldırılacak. Proje özelliklerini 'class-parse' kullanacak şekilde güncelleştirin. The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Android kod oluşturma hedefi '{0}' kullanımdan kaldırıldı ve .NET Android'in gelecekteki bir sürümünde kaldırılacak. Proje özelliklerini 'XAJavaInterop1' kullanacak şekilde güncelleştirin. The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + Bir Android uygulama projesinden Android Wear uygulama projesine '{0}' başvurmak artık kullanımdan kaldırıldı ve .NET Android'in gelecekteki bir sürümünde artık desteklenmeyecek. Android Wear uygulama projesi referansını Android uygulama projesinden kaldırın ve bunun yerine Wear uygulamasını bağımsız bir uygulama olarak dağıtın. The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ Projenizden '{0}' başvurusunu kaldırın ve yerine '{1}' NuGet paketini ekleyin {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + {0} API düzeyi için android.jar bulunamadı . Bu, {0} API düzeyi için Android SDK platformunun kurulu olmadığı anlamına gelir; `{1}`de olması bekleniyordu. {2} -See https://aka.ms/xa5207 for more details. +Daha fazla ayrıntı için https://aka.ms/xa5207 adresine bakın. The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + Bunu Android SDK Yöneticisi'ne yükleyin (Araçlar > Android > Android SDK Yöneticisi...) veya .NET Android projesini, yüklü bir API sürümünü hedefleyecek şekilde değiştirin. This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + Eksik API düzeyini `dotnet build -t:InstallAndroidDependegency -f {0} "-p:AndroidSdkDirectory={1}"` komutunu çalıştırarak yükleyebilir veya yüklü olan bir API sürümünü hedefleyecek şekilde projeyi değiştirebilirsiniz. This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx index a9109e7f1ae..170541b4ecf 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx @@ -438,7 +438,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: DX, DEX, d8, AndroidDexTool. - Ignoring configuration file '{0}'. .NET configuration files are not supported in .NET Android projects that target .NET 6 or higher. + 将忽略配置文件“{0}”。在面向 .NET 6 或更高版本的 .NET Android 项目中不支持 .NET 配置文件。 The following are literal names and should not be translated: .NET, .NET Android. {0} - The file name such as 'Foo.dll.config' @@ -451,7 +451,7 @@ In this message, the term "binding" means a piece of generated code that makes i The following are literal names and should not be translated: AAPT, AAPT2, Android, AndroidUseAapt2, true. - Using AAPT is not supported in .NET Android projects that target .NET 6 or higher. Please enable 'Use incremental Android packaging system (aapt2)' in the Visual Studio project property pages or edit the project file in a text editor and set the 'AndroidUseAapt2' MSBuild property to 'true'. + 在面向 .NET 6 或更高版本的 .NET Android 项目中不支持使用 AAPT。请在 Visual Studio 项目属性页面中启用“使用增量 Android 打包系统(aapt2)”,或者在文本编辑器中编辑项目文件,并将 "AndroidUseAapt2" MSBuild 属性设置为 "true"。 The following are literal names and should not be translated: AAPT, Android, AndroidUseAapt2, true. @@ -505,7 +505,7 @@ In this message, the term "binding" means a piece of generated code that makes i {1} - The SupportedOSPlatformVersion property value - 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 .NET Android once .NET 6 is released. + 在程序集 {0} 中检测到使用了 AppDomain.CreateDomain()。.NET 6 及更高版本将仅支持一个 AppDomain,因此 .NET 6 发布后,将无法再在 .NET Android 中使用此 API。 The following are literal names and should not be translated: AppDomain.CreateDomain(), AppDomain {0} - The name of the assembly @@ -704,12 +704,12 @@ In this message, "root element" refers to the root element of an XML file. {0} - The exception message and stack trace of the associated exception - The Android class parser value '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'class-parse'. + Android 类分析器值“{0}”已被弃用,并将在 .NET Android 的未来版本中被删除。要使用 "class-parse",请更新项目属性。 The following are literal names and should not be translated: class-parse {0} - The name of the current class parser value - The Android code generation target '{0}' is deprecated and will be removed in a future version of .NET Android. Update the project properties to use 'XAJavaInterop1'. + Android 代码生成目标“{0}”已被弃用,并将在 .NET Android 的未来版本中被删除。要使用 "XAJavaInterop1",请更新项目属性。 The following are literal names and should not be translated: XAJavaInterop1 {0} - The name of the current code generation target @@ -790,7 +790,7 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi "Wear" is a short version of the full product name "Wear OS" and so should not be translated. - Referencing the Android Wear application project '{0}' from an Android application project is deprecated and will no longer be supported in a future version of .NET Android. Remove the Android Wear application project reference from the Android application project and distribute the Wear application as a standalone application instead. + 已弃用从 Android 应用程序项目中引用 Android Wear 应用程序项目“{0}”的功能,并且未来版本的 .NET Android 中将不再支持此功能。请从 Android 应用程序项目中删除 Android Wear 应用程序项目引用,并将 Wear 应用程序作为独立应用程序进行分发。 The following are literal names and should not be translated: Android Wear, Android, Wear. {0} - The referenced Android Wear project. @@ -861,20 +861,20 @@ The following are literal names and should not be translated: ABI, 'libs/armeabi {0} - The missing tool name - Could not find android.jar for API level {0}. This means the Android SDK platform for API level {0} is not installed; it was expected to be in `{1}`. + 找不到适用于 API 级别 {0} 的 android.jar。这意味着适用于 API 级别 {0} 的 Android SDK 平台未安装;它应位于 `{1}` 中。 {2} -See https://aka.ms/xa5207 for more details. +有关更多详细信息,请参阅 https://aka.ms/xa5207。 The following are literal names and should not be translated: android.jar {0} - The API level name {1} - The expected path of the android.jar file {2} - The instructions to install the missing component - Either install it in the Android SDK Manager (Tools > Android > Android SDK Manager...), or change the .NET Android project to target an API version that is installed. + 要么将其安装在 Android SDK 管理器中(工具 > Android > Android SDK 管理器...),要么将 .NET Android 项目更改为面向已安装的 API 版本。 This string is the instrucitons to install the component - You can install the missing API level by running `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"`, or change the project to target an API version that is installed. + 可以通过运行 `dotnet build -t:InstallAndroidDependencies -f {0} "-p:AndroidSdkDirectory={1}"` 来安装缺少的 API 级别,或将项目更改为面向已安装的 API 版本。 This string is the instrucitons to install the component {0} - The TargetFramework the app is targeting. {1} - The current AndroidSdkDirectory path. From 26752564def6cadd4dcf243bafbb5f1e5815bca6 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 13:02:01 -0700 Subject: [PATCH 65/92] Bump to dotnet/installer@461c776642 8.0.101-servicing.23614.6 Changes: https://github.com/dotnet/installer/compare/822071c28a...461c776642 Updates: * Microsoft.Dotnet.Sdk.Internal: from 8.0.101-servicing.23578.14 to 8.0.101-servicing.23614.6 --- eng/Version.Details.xml | 4 ++-- eng/Versions.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index a2d6fa39a18..761c2f43d81 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,8 +1,8 @@ - + https://github.com/dotnet/installer - 822071c28a37cfcbf2b32077b6983e1c666160e5 + 461c7766428ba2782725d89d95d3f4f414ff8c92 https://github.com/dotnet/runtime diff --git a/eng/Versions.props b/eng/Versions.props index 67263466859..ed78e2ded02 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -1,7 +1,7 @@ - 8.0.101-servicing.23578.14 + 8.0.101-servicing.23614.6 8.0.0-rtm.23524.7 8.0.0 8.0.0 From 64363367df30dea655d01cda27daa87d8ac9b8a7 Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Wed, 10 Jan 2024 14:19:45 -0500 Subject: [PATCH 66/92] [Microsoft.Android.Templates] New files should open editor (#8623) Fixes: https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1918037 Context: https://github.com/dotnet/templating/wiki/Reference-for-template.json Context: https://github.com/dotnet/templating/wiki/Post-Action-Registry#open-a-file-in-the-editor Within Visual Studio, if you: 1. Create a new .NET MAUI or .NET Android app, then 2. Go to the Solution Explorer, then 3. Right-click a folder, then click Add > New Item > Android, then 4. Double-click the **Android Activity** template. The expected result is that a new Android Activity based on the Android Activity template will be added to your solution *and opened in the editor*. Instead, a new Android Activity is added, but it is *not* opened. Update the `.template.config/template.json` files to contain a `postActions` section with a `openInEditor` id. This *should* cause Visual Studio to open the new files within the editor. --- .../.template.config/template.json | 15 ++++++++++++++- .../android-layout/.template.config/template.json | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/template.json b/src/Microsoft.Android.Templates/android-activity/.template.config/template.json index b729622d9c3..be928b8a921 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/template.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/template.json @@ -21,5 +21,18 @@ "replaces": "AndroidApp1", "type": "parameter" } - } + }, + "postActions": [ + { + "id": "openInEditor", + "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", + "description": "Opens Activity1.cs in the editor", + "manualInstructions": [], + "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", + "args": { + "files": "0" + }, + "continueOnError": true + } + ] } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/template.json b/src/Microsoft.Android.Templates/android-layout/.template.config/template.json index 2d1d8c72fb7..c3cea066474 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/template.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/template.json @@ -14,5 +14,18 @@ "primaryOutputs": [ { "path": "Layout1.xml" } ], - "defaultName": "Layout1" + "defaultName": "Layout1", + "postActions": [ + { + "id": "openInEditor", + "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", + "description": "Opens Layout1.xml in the editor", + "manualInstructions": [], + "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", + "args": { + "files": "0" + }, + "continueOnError": true + } + ] } \ No newline at end of file From 351bfa3f0925e315c716c7e5c6887443336067e4 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 11 Jan 2024 09:57:14 -0600 Subject: [PATCH 67/92] Bump to dotnet/runtime/release/8.0@a6e4834d53 8.0.1 (#8616) Changes: https://github.com/dotnet/runtime/compare/59edaad404...a6e4834d53 Updates: * Microsoft.NET.ILLink: from 8.0.0-rtm.23524.7 to 8.0.1-servicing.23579.14 * Microsoft.NET.ILLink.Tasks: from 8.0.0 to 8.0.1 * Microsoft.NETCore.App.Ref: from 8.0.0 to 8.0.1 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100: from 8.0.0 to 8.0.1 Other changes: * Keep System.IO.Hashing on 8.0.0, there is no 8.0.1 version yet Co-authored-by: Jonathan Peppers --- NuGet.config | 6 ++++++ eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 10 +++++----- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/NuGet.config b/NuGet.config index 15ea63d5977..0ee6692bdf5 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,8 +4,14 @@ + + + + + + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 761c2f43d81..cbfc2556d83 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,21 +4,21 @@ https://github.com/dotnet/installer 461c7766428ba2782725d89d95d3f4f414ff8c92 - + https://github.com/dotnet/runtime - 59edaad404d1b8e47080015ae8d0787f94c970df + a6e4834d53ac591a4b3d4a213a8928ad685f7ad8 - + https://github.com/dotnet/runtime - 59edaad404d1b8e47080015ae8d0787f94c970df + a6e4834d53ac591a4b3d4a213a8928ad685f7ad8 - + https://github.com/dotnet/runtime - 59edaad404d1b8e47080015ae8d0787f94c970df + a6e4834d53ac591a4b3d4a213a8928ad685f7ad8 - + https://github.com/dotnet/emsdk - 51bf18a2e20024dfa89d63e20b0c3b695b5c1eed + 201f4dae9d1a1e105d8ba86d7ece61eed1f665e0 https://github.com/dotnet/cecil diff --git a/eng/Versions.props b/eng/Versions.props index ed78e2ded02..98f7d57405d 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,16 +2,16 @@ 8.0.101-servicing.23614.6 - 8.0.0-rtm.23524.7 - 8.0.0 - 8.0.0 + 8.0.1-servicing.23579.14 + 8.0.1 + 8.0.1 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.0 + 8.0.1 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version) 7.0.100-rc.1.22410.7 0.11.4-alpha.23509.2 - $(MicrosoftNETCoreAppRefPackageVersion) + 8.0.0 From 940f059b824520278e50f4c4969c7fc18f46738e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Rozs=C3=ADval?= Date: Wed, 3 Jan 2024 11:42:57 +0100 Subject: [PATCH 68/92] [Mono.Android] Fix ServerCertificateCustomValidator (#8594) Fixes: https://github.com/dotnet/runtime/issues/95506 In Release configuration the `X509ExtendedTrustManagerInvoker` class is trimmed and so the `trustManager is IX509TrustManager tm` pattern matching doesn't work. This PR addresses the problem in two ways: * an internal X509 trust manager is now required - it can't silently work with a null internal trust manager anymore * `[DynamicDependency]` attribute to prevent trimming of the invoker classes for the `IX509TrustManager` interface and for the `X509ExtendedTrustManager` abstract class --- .../ServerCertificateCustomValidator.cs | 29 +++++++--------- .../Tasks/LinkerTests.cs | 34 +++++++++++++++++++ 2 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs b/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs index ac6cb91d599..fdcec5d33e7 100644 --- a/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs +++ b/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Net.Security; using System.Security.Cryptography.X509Certificates; @@ -31,12 +32,12 @@ public ITrustManager[] ReplaceX509TrustManager (ITrustManager[]? trustManagers, private sealed class TrustManager : Java.Lang.Object, IX509TrustManager { - private readonly IX509TrustManager? _internalTrustManager; + private readonly IX509TrustManager _internalTrustManager; private readonly HttpRequestMessage _request; private readonly Func _serverCertificateCustomValidationCallback; public TrustManager ( - IX509TrustManager? internalTrustManager, + IX509TrustManager internalTrustManager, HttpRequestMessage request, Func serverCertificateCustomValidationCallback) { @@ -50,7 +51,7 @@ public void CheckServerTrusted (JavaX509Certificate[] javaChain, string authType var sslPolicyErrors = SslPolicyErrors.None; try { - _internalTrustManager?.CheckServerTrusted (javaChain, authType); + _internalTrustManager.CheckServerTrusted (javaChain, authType); } catch (JavaCertificateException) { sslPolicyErrors |= SslPolicyErrors.RemoteCertificateChainErrors; } @@ -158,33 +159,29 @@ private sealed class AlwaysAcceptingHostnameVerifier : Java.Lang.Object, IHostna public bool Verify (string? hostname, ISSLSession? session) => true; } - private static IX509TrustManager? FindX509TrustManager(ITrustManager[]? trustManagers) + [DynamicDependency(nameof(IX509TrustManager.CheckServerTrusted), typeof(IX509TrustManagerInvoker))] + [DynamicDependency(nameof(IX509TrustManager.CheckServerTrusted), typeof(X509ExtendedTrustManagerInvoker))] + private static IX509TrustManager FindX509TrustManager(ITrustManager[] trustManagers) { - if (trustManagers is null) - return null; - foreach (var trustManager in trustManagers) { if (trustManager is IX509TrustManager tm) return tm; } - return null; + throw new InvalidOperationException($"Could not find {nameof(IX509TrustManager)} in {nameof(ITrustManager)} array."); } - private static ITrustManager[] ModifyTrustManagersArray (ITrustManager[] trustManagers, IX509TrustManager? original, IX509TrustManager replacement) + private static ITrustManager[] ModifyTrustManagersArray (ITrustManager[] trustManagers, IX509TrustManager original, IX509TrustManager replacement) { - var modifiedTrustManagersCount = original is null ? trustManagers.Length + 1 : trustManagers.Length; - var modifiedTrustManagersArray = new ITrustManager [modifiedTrustManagersCount]; - - modifiedTrustManagersArray [0] = replacement; - int nextIndex = 1; + var modifiedTrustManagersArray = new ITrustManager [trustManagers.Length]; for (int i = 0; i < trustManagers.Length; i++) { if (trustManagers [i] == original) { - continue; + modifiedTrustManagersArray [i] = replacement; + } else { + modifiedTrustManagersArray [i] = trustManagers [i]; } - modifiedTrustManagersArray [nextIndex++] = trustManagers [i]; } return modifiedTrustManagersArray; diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs index 5a9cabe50a5..407c32176a0 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/LinkerTests.cs @@ -516,6 +516,40 @@ public void AndroidUseNegotiateAuthentication ([Values (true, false, null)] bool } } + [Test] + public void PreserveIX509TrustManagerSubclasses ([Values(true, false)] bool hasServerCertificateCustomValidationCallback) + { + var proj = new XamarinAndroidApplicationProject { IsRelease = true }; + proj.AddReferences ("System.Net.Http"); + proj.MainActivity = proj.DefaultMainActivity.Replace ( + "base.OnCreate (bundle);", + "base.OnCreate (bundle);\n" + + (hasServerCertificateCustomValidationCallback + ? "var handler = new Xamarin.Android.Net.AndroidMessageHandler { ServerCertificateCustomValidationCallback = (message, certificate, chain, errors) => true };\n" + : "var handler = new Xamarin.Android.Net.AndroidMessageHandler();\n") + + "var client = new System.Net.Http.HttpClient (handler);\n" + + "client.GetAsync (\"https://microsoft.com\").GetAwaiter ().GetResult ();"); + + using (var b = CreateApkBuilder ()) { + Assert.IsTrue (b.Build (proj), "Build should have succeeded."); + var assemblyPath = BuildTest.GetLinkedPath (b, true, "Mono.Android.dll"); + + using (var assembly = AssemblyDefinition.ReadAssembly (assemblyPath)) { + Assert.IsTrue (assembly != null); + + var types = new[] { "Javax.Net.Ssl.X509ExtendedTrustManager", "Javax.Net.Ssl.IX509TrustManagerInvoker" }; + foreach (var typeName in types) { + var td = assembly.MainModule.GetType (typeName); + if (hasServerCertificateCustomValidationCallback) { + Assert.IsNotNull (td, $"{typeName} shouldn't have been linked out"); + } else { + Assert.IsNull (td, $"{typeName} should have been linked out"); + } + } + } + } + } + [Test] public void DoNotErrorOnPerArchJavaTypeDuplicates ([Values(true, false)] bool enableMarshalMethods) { From 66677724836a964da3e00834fc643edd53e176d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Rozs=C3=ADval?= Date: Tue, 16 Jan 2024 11:50:46 +0100 Subject: [PATCH 69/92] Fix ServerCertificateCustomValidator on API 21-23 (#8637) Follow-up to https://github.com/xamarin/xamarin-android/pull/8594 to fix https://github.com/dotnet/runtime/issues/95506 on Android API 21-23 --- .../ServerCertificateCustomValidator.cs | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs b/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs index fdcec5d33e7..77427cfea10 100644 --- a/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs +++ b/src/Mono.Android/Xamarin.Android.Net/ServerCertificateCustomValidator.cs @@ -5,6 +5,8 @@ using System.Net.Security; using System.Security.Cryptography.X509Certificates; +using Android.OS; +using Android.Runtime; using Javax.Net.Ssl; using JavaCertificateException = Java.Security.Cert.CertificateException; @@ -25,9 +27,9 @@ public ServerCertificateCustomValidator (Func (); + } + } } throw new InvalidOperationException($"Could not find {nameof(IX509TrustManager)} in {nameof(ITrustManager)} array."); + + static bool IsTrustManagerImpl (ITrustManager trustManager) + { + var javaClassName = JNIEnv.GetClassNameFromInstance (trustManager.Handle); + return javaClassName.Equals ("com/android/org/conscrypt/TrustManagerImpl", StringComparison.Ordinal); + } } - private static ITrustManager[] ModifyTrustManagersArray (ITrustManager[] trustManagers, IX509TrustManager original, IX509TrustManager replacement) + private static ITrustManager[] ModifyTrustManagersArray (ITrustManager[] trustManagers, int originalTrustManagerIndex, IX509TrustManager replacement) { var modifiedTrustManagersArray = new ITrustManager [trustManagers.Length]; for (int i = 0; i < trustManagers.Length; i++) { - if (trustManagers [i] == original) { + if (i == originalTrustManagerIndex) { modifiedTrustManagersArray [i] = replacement; } else { modifiedTrustManagersArray [i] = trustManagers [i]; } - } return modifiedTrustManagersArray; From 9f9114afca9e31b0923fd167637f016da28a6a96 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 09:49:17 -0600 Subject: [PATCH 70/92] Bump com.android.tools:r8 from 8.1.56 to 8.1.72 (#8532) Context: https://r8.googlesource.com/r8/+/refs/tags/8.1.72 Context: https://maven.google.com/web/index.html?q=r8#com.android.tools:r8:8.1.72 --- src/r8/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/r8/build.gradle b/src/r8/build.gradle index dfabca72b4c..6c6c325b7d7 100644 --- a/src/r8/build.gradle +++ b/src/r8/build.gradle @@ -15,7 +15,7 @@ repositories { } dependencies { - implementation 'com.android.tools:r8:8.1.56' + implementation 'com.android.tools:r8:8.1.72' } jar { From d2da5bf4e464fc3ec7f60381acabeae60c150662 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:41:42 -0600 Subject: [PATCH 71/92] Bump com.android.tools:r8 from 8.1.72 to 8.2.33 (#8577) Context: https://r8.googlesource.com/r8/+/refs/tags/8.2.23 Context: https://maven.google.com/web/index.html?q=r8#com.android.tools:r8:8.2.33 --- src/r8/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/r8/build.gradle b/src/r8/build.gradle index 6c6c325b7d7..41aa49470f0 100644 --- a/src/r8/build.gradle +++ b/src/r8/build.gradle @@ -15,7 +15,7 @@ repositories { } dependencies { - implementation 'com.android.tools:r8:8.1.72' + implementation 'com.android.tools:r8:8.2.33' } jar { From dbf100d49296f6d23e5e11ee804d75a556bdc586 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Fri, 12 Jan 2024 17:38:51 +0000 Subject: [PATCH 72/92] Update a number of l18n files (#8633) Context: 97819d81b3f08d2e3dc5359d250634c49f0b0783 These files are modified on each build, with new content referring to the changes in 97819d81. Commit the files since the new content must be translated. --- .../.template.config/localize/templatestrings.cs.json | 3 ++- .../.template.config/localize/templatestrings.de.json | 3 ++- .../.template.config/localize/templatestrings.en.json | 11 ++++++----- .../.template.config/localize/templatestrings.es.json | 3 ++- .../.template.config/localize/templatestrings.fr.json | 3 ++- .../.template.config/localize/templatestrings.it.json | 3 ++- .../.template.config/localize/templatestrings.ja.json | 3 ++- .../.template.config/localize/templatestrings.ko.json | 3 ++- .../.template.config/localize/templatestrings.pl.json | 3 ++- .../localize/templatestrings.pt-BR.json | 3 ++- .../.template.config/localize/templatestrings.ru.json | 3 ++- .../.template.config/localize/templatestrings.tr.json | 3 ++- .../localize/templatestrings.zh-Hans.json | 3 ++- .../localize/templatestrings.zh-Hant.json | 3 ++- .../.template.config/localize/templatestrings.cs.json | 3 ++- .../.template.config/localize/templatestrings.de.json | 3 ++- .../.template.config/localize/templatestrings.en.json | 9 +++++---- .../.template.config/localize/templatestrings.es.json | 3 ++- .../.template.config/localize/templatestrings.fr.json | 3 ++- .../.template.config/localize/templatestrings.it.json | 3 ++- .../.template.config/localize/templatestrings.ja.json | 3 ++- .../.template.config/localize/templatestrings.ko.json | 3 ++- .../.template.config/localize/templatestrings.pl.json | 3 ++- .../localize/templatestrings.pt-BR.json | 3 ++- .../.template.config/localize/templatestrings.ru.json | 3 ++- .../.template.config/localize/templatestrings.tr.json | 3 ++- .../localize/templatestrings.zh-Hans.json | 3 ++- .../localize/templatestrings.zh-Hant.json | 3 ++- 28 files changed, 63 insertions(+), 35 deletions(-) diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json index 96b6c6bace5..2d4b50ea6b6 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Šablona aktivity Androidu", "description": "Třída aktivity Androidu", - "symbols/namespace/description": "obor názvů pro vygenerovaný kód" + "symbols/namespace/description": "obor názvů pro vygenerovaný kód", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json index 9ab59500642..a5adb998843 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Android-Aktivitätsvorlage", "description": "Eine Android-Aktivitätsklasse", - "symbols/namespace/description": "Namespace für den generierten Code" + "symbols/namespace/description": "Namespace für den generierten Code", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.en.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.en.json index 49e602ae83c..66a04db062c 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.en.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.en.json @@ -1,6 +1,7 @@ -{ - "author": "Microsoft", - "name": "Android Activity template", - "description": "An Android Activity class", - "symbols/namespace/description": "namespace for the generated code" +{ + "author": "Microsoft", + "name": "Android Activity template", + "description": "An Android Activity class", + "symbols/namespace/description": "namespace for the generated code", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json index c2c4b99609a..3ba732ac7e0 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Plantilla de actividad de Android", "description": "Una clase de actividad de Android", - "symbols/namespace/description": "espacio de nombres para el código generado" + "symbols/namespace/description": "espacio de nombres para el código generado", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json index d39d18bdcc1..e19f7434be5 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Modèle d’activité Android", "description": "Une classe d’activité Android", - "symbols/namespace/description": "espace de noms pour le code généré" + "symbols/namespace/description": "espace de noms pour le code généré", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json index c21590dc729..f26bd97997a 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Modello di attività Android", "description": "Classe di attività Android", - "symbols/namespace/description": "spazio dei nomi per il codice generato" + "symbols/namespace/description": "spazio dei nomi per il codice generato", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json index 040ce9e560a..1978f9b18d3 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Android アクティビティ テンプレート", "description": "Android アクティビティ クラス", - "symbols/namespace/description": "生成されたコードの名前空間" + "symbols/namespace/description": "生成されたコードの名前空間", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json index 4b7836a4823..93569cf106e 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Android 활동 템플릿", "description": "Android 활동 클래스", - "symbols/namespace/description": "생성된 코드의 네임스페이스" + "symbols/namespace/description": "생성된 코드의 네임스페이스", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json index f786efc3b6c..64cd628fce6 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Szablon Aktywność systemu Android", "description": "Klasa Aktywność systemu Android", - "symbols/namespace/description": "przestrzeń nazw wygenerowanego kodu." + "symbols/namespace/description": "przestrzeń nazw wygenerowanego kodu.", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json index b24983ffa21..65709d2d53d 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Modelo de Atividade do Android", "description": "Uma classe de Atividade do Android", - "symbols/namespace/description": "namespace do código gerado" + "symbols/namespace/description": "namespace do código gerado", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json index 816867363e4..1d8a77cf250 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Шаблон действий Android", "description": "Класс активности Android", - "symbols/namespace/description": "пространство имен для созданного кода" + "symbols/namespace/description": "пространство имен для созданного кода", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json index 28816a8a679..b59d136b023 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Android Etkinlik şablonu", "description": "Android Etkinlik sınıfı", - "symbols/namespace/description": "oluşturulan kod için ad alanı" + "symbols/namespace/description": "oluşturulan kod için ad alanı", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json index c1869379ee6..1ca1645ed23 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Android 活动模板", "description": "Android 活动类", - "symbols/namespace/description": "生成的代码的命名空间" + "symbols/namespace/description": "生成的代码的命名空间", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json index 3ff5e84fc93..9289a5aca44 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json @@ -2,5 +2,6 @@ "author": "Microsoft", "name": "Android 活動範本", "description": "Android 活動類別", - "symbols/namespace/description": "適用於產生之程式碼的命名空間" + "symbols/namespace/description": "適用於產生之程式碼的命名空間", + "postActions/openInEditor/description": "Opens Activity1.cs in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json index 19468f6c06b..e7df33892b0 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Šablona rozložení pro Android", - "description": "Soubor rozložení Androidu (XML)" + "description": "Soubor rozložení Androidu (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json index 9efa2e625d4..e06116083db 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Android-Layoutvorlage", - "description": "Eine Android-Layoutdatei (XML)" + "description": "Eine Android-Layoutdatei (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.en.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.en.json index 576c1260aa9..97dd8ac01e3 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.en.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.en.json @@ -1,5 +1,6 @@ -{ - "author": "Microsoft", - "name": "Android Layout template", - "description": "An Android layout (XML) file" +{ + "author": "Microsoft", + "name": "Android Layout template", + "description": "An Android layout (XML) file", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json index a4ba036b699..6024c63403a 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Plantilla de diseño de Android", - "description": "Un archivo de diseño de Android (XML)" + "description": "Un archivo de diseño de Android (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json index 0510754c32f..bcb4100be6c 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Modèle de disposition Android", - "description": "Fichier de disposition Android (XML)" + "description": "Fichier de disposition Android (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json index 6312b8fe267..008fd522a22 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Modello di layout Android", - "description": "File di layout Android (XML)" + "description": "File di layout Android (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json index 88961b84322..d73e996289b 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Android レイアウト テンプレート", - "description": "Android レイアウト (XML) ファイル" + "description": "Android レイアウト (XML) ファイル", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json index b3453aea66d..08999834454 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Android 레이아웃 템플릿", - "description": "Android 레이아웃(XML) 파일" + "description": "Android 레이아웃(XML) 파일", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json index d3d13274490..c696b001f50 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Szablon Układ systemu Android", - "description": "Plik układu systemu Android (XML)" + "description": "Plik układu systemu Android (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json index 2352aa236ca..ba1b1470a48 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Modelo de Layout do Android", - "description": "Um arquivo de layout do Android (XML)" + "description": "Um arquivo de layout do Android (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json index 1649b2f1dfa..563979403c4 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Шаблон макета Android", - "description": "Файл макета Android (XML)" + "description": "Файл макета Android (XML)", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json index 9106f4a1483..8ccb7620316 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Android Düzeni şablonu", - "description": "Android düzeni (XML) dosyası" + "description": "Android düzeni (XML) dosyası", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json index c7fb9a8681b..a56ebef7e32 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Android 布局模板", - "description": "Android 布局 (XML) 文件" + "description": "Android 布局 (XML) 文件", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json index 4d4caa80e3e..70cf426b1e4 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json @@ -1,5 +1,6 @@ { "author": "Microsoft", "name": "Android 版面配置範本", - "description": "Android 配置 (XML) 檔案" + "description": "Android 配置 (XML) 檔案", + "postActions/openInEditor/description": "Opens Layout1.xml in the editor" } \ No newline at end of file From 3da479192bb536e58910c4afff653b54f0063eb7 Mon Sep 17 00:00:00 2001 From: "CSIGS@microsoft.com" Date: Tue, 16 Jan 2024 17:03:32 -0800 Subject: [PATCH 73/92] LEGO: Merge pull request 8642 LEGO: Merge pull request 8642 --- .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ .../.template.config/localize/templatestrings.json.lcl | 9 +++++++++ 26 files changed, 234 insertions(+) diff --git a/Localize/loc/cs/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/cs/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 57b29ff1153..f6586705089 100644 --- a/Localize/loc/cs/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/cs/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/cs/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/cs/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 2af7bcd2bcf..1d128039578 100644 --- a/Localize/loc/cs/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/cs/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/de/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/de/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 416a91ea7f3..b37273d5fd6 100644 --- a/Localize/loc/de/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/de/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/de/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/de/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 9e7711054ce..81656e3e69f 100644 --- a/Localize/loc/de/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/de/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/es/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/es/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index c1f58460510..d97d95502ad 100644 --- a/Localize/loc/es/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/es/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/es/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/es/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 6249b186046..f7542997362 100644 --- a/Localize/loc/es/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/es/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/fr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/fr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 0d77453419b..571b9b17ced 100644 --- a/Localize/loc/fr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/fr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/fr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/fr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index ebe089dd64e..9bb670674bf 100644 --- a/Localize/loc/fr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/fr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/it/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/it/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 4115cf37263..b3052669481 100644 --- a/Localize/loc/it/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/it/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/it/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/it/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 2efc8d263c8..c9969e1ba3c 100644 --- a/Localize/loc/it/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/it/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/ja/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/ja/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index a077b3871d8..86369bde99e 100644 --- a/Localize/loc/ja/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/ja/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/ja/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/ja/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 1c634412cc2..4339d218eaf 100644 --- a/Localize/loc/ja/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/ja/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/ko/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/ko/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 4c11f582cf5..437763db39a 100644 --- a/Localize/loc/ko/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/ko/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/ko/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/ko/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 650b88247b1..055c047f213 100644 --- a/Localize/loc/ko/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/ko/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/pl/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/pl/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 945c15e757b..37c8bf71751 100644 --- a/Localize/loc/pl/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/pl/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/pl/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/pl/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index f23f6216abf..0166133ee4b 100644 --- a/Localize/loc/pl/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/pl/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index d354cc8e5c8..bbe1854eb90 100644 --- a/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 6658a10cea8..c45b5bcf109 100644 --- a/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/pt-BR/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/ru/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/ru/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 1eb7d78f47c..88cac291c43 100644 --- a/Localize/loc/ru/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/ru/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/ru/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/ru/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index fb67dc19c2f..a5a70383648 100644 --- a/Localize/loc/ru/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/ru/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/tr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/tr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 9b8611baeb6..0a170e08624 100644 --- a/Localize/loc/tr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/tr/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/tr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/tr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 5cd5922e507..fffa1f923b0 100644 --- a/Localize/loc/tr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/tr/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 41d686a0d52..2f5d90b3342 100644 --- a/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 2a3496f9d53..aba4d641e40 100644 --- a/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/zh-Hans/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file diff --git a/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl b/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl index 8c490c513ce..93e4d41a1a7 100644 --- a/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + diff --git a/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl b/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl index 133e19f0903..e4a16c9bc7b 100644 --- a/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl +++ b/Localize/loc/zh-Hant/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.json.lcl @@ -36,6 +36,15 @@ + + + + + + + + + \ No newline at end of file From 31f031a675b68783fb9a6e52784601f342ae2816 Mon Sep 17 00:00:00 2001 From: VS MobileTools Engineering Service 2 Date: Wed, 17 Jan 2024 14:25:24 -0800 Subject: [PATCH 74/92] Localized file check-in by OneLocBuild Task (#8643) Context: https://aka.ms/onelocbuild Context: https://aka.ms/AllAboutLoc * Build definition ID 17928: Build ID 8930705 --- .../.template.config/localize/templatestrings.cs.json | 2 +- .../.template.config/localize/templatestrings.de.json | 2 +- .../.template.config/localize/templatestrings.es.json | 2 +- .../.template.config/localize/templatestrings.fr.json | 2 +- .../.template.config/localize/templatestrings.it.json | 2 +- .../.template.config/localize/templatestrings.ja.json | 2 +- .../.template.config/localize/templatestrings.ko.json | 2 +- .../.template.config/localize/templatestrings.pl.json | 2 +- .../.template.config/localize/templatestrings.pt-BR.json | 2 +- .../.template.config/localize/templatestrings.ru.json | 2 +- .../.template.config/localize/templatestrings.tr.json | 2 +- .../.template.config/localize/templatestrings.zh-Hans.json | 2 +- .../.template.config/localize/templatestrings.zh-Hant.json | 2 +- .../.template.config/localize/templatestrings.cs.json | 2 +- .../.template.config/localize/templatestrings.de.json | 2 +- .../.template.config/localize/templatestrings.es.json | 2 +- .../.template.config/localize/templatestrings.fr.json | 2 +- .../.template.config/localize/templatestrings.it.json | 2 +- .../.template.config/localize/templatestrings.ja.json | 2 +- .../.template.config/localize/templatestrings.ko.json | 2 +- .../.template.config/localize/templatestrings.pl.json | 2 +- .../.template.config/localize/templatestrings.pt-BR.json | 2 +- .../.template.config/localize/templatestrings.ru.json | 2 +- .../.template.config/localize/templatestrings.tr.json | 2 +- .../.template.config/localize/templatestrings.zh-Hans.json | 2 +- .../.template.config/localize/templatestrings.zh-Hant.json | 2 +- 26 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json index 2d4b50ea6b6..209e3191423 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.cs.json @@ -3,5 +3,5 @@ "name": "Šablona aktivity Androidu", "description": "Třída aktivity Androidu", "symbols/namespace/description": "obor názvů pro vygenerovaný kód", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Otevře soubor Activity1.cs v editoru" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json index a5adb998843..054d3423f73 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.de.json @@ -3,5 +3,5 @@ "name": "Android-Aktivitätsvorlage", "description": "Eine Android-Aktivitätsklasse", "symbols/namespace/description": "Namespace für den generierten Code", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Öffnet Activity1.cs im Editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json index 3ba732ac7e0..a2b0fdd88b3 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.es.json @@ -3,5 +3,5 @@ "name": "Plantilla de actividad de Android", "description": "Una clase de actividad de Android", "symbols/namespace/description": "espacio de nombres para el código generado", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Abre Activity1.cs en el editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json index e19f7434be5..7384adafecb 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.fr.json @@ -3,5 +3,5 @@ "name": "Modèle d’activité Android", "description": "Une classe d’activité Android", "symbols/namespace/description": "espace de noms pour le code généré", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Ouvre Activity1.cs dans l’éditeur" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json index f26bd97997a..6f449315d1f 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.it.json @@ -3,5 +3,5 @@ "name": "Modello di attività Android", "description": "Classe di attività Android", "symbols/namespace/description": "spazio dei nomi per il codice generato", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Apre Activity1.cs nell'editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json index 1978f9b18d3..58eca70a69b 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ja.json @@ -3,5 +3,5 @@ "name": "Android アクティビティ テンプレート", "description": "Android アクティビティ クラス", "symbols/namespace/description": "生成されたコードの名前空間", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "エディターで Activity1.cs を開きます" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json index 93569cf106e..3fb98e6fa19 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ko.json @@ -3,5 +3,5 @@ "name": "Android 활동 템플릿", "description": "Android 활동 클래스", "symbols/namespace/description": "생성된 코드의 네임스페이스", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "편집기에서 Activity1.cs를 엽니다." } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json index 64cd628fce6..b79c2185192 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pl.json @@ -3,5 +3,5 @@ "name": "Szablon Aktywność systemu Android", "description": "Klasa Aktywność systemu Android", "symbols/namespace/description": "przestrzeń nazw wygenerowanego kodu.", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Otwiera plik Activity1.cs w edytorze" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json index 65709d2d53d..a3050741c5a 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.pt-BR.json @@ -3,5 +3,5 @@ "name": "Modelo de Atividade do Android", "description": "Uma classe de Atividade do Android", "symbols/namespace/description": "namespace do código gerado", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Abre Activity1.cs no editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json index 1d8a77cf250..feacd4ee7f1 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.ru.json @@ -3,5 +3,5 @@ "name": "Шаблон действий Android", "description": "Класс активности Android", "symbols/namespace/description": "пространство имен для созданного кода", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Открывает Activity1.cs в редакторе" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json index b59d136b023..ccbe7a76c6d 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.tr.json @@ -3,5 +3,5 @@ "name": "Android Etkinlik şablonu", "description": "Android Etkinlik sınıfı", "symbols/namespace/description": "oluşturulan kod için ad alanı", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "Activity1.cs dosyasını düzenleyicide açar" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json index 1ca1645ed23..7e9e2fb2073 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hans.json @@ -3,5 +3,5 @@ "name": "Android 活动模板", "description": "Android 活动类", "symbols/namespace/description": "生成的代码的命名空间", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "在编辑器中打开 Activity1.cs" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json index 9289a5aca44..a7501e3e863 100644 --- a/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json +++ b/src/Microsoft.Android.Templates/android-activity/.template.config/localize/templatestrings.zh-Hant.json @@ -3,5 +3,5 @@ "name": "Android 活動範本", "description": "Android 活動類別", "symbols/namespace/description": "適用於產生之程式碼的命名空間", - "postActions/openInEditor/description": "Opens Activity1.cs in the editor" + "postActions/openInEditor/description": "在編輯器中開啟 Activity1.cs" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json index e7df33892b0..98469f9b720 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.cs.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Šablona rozložení pro Android", "description": "Soubor rozložení Androidu (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Otevře soubor Layout1.xml v editoru" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json index e06116083db..7082b64b9ef 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.de.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Android-Layoutvorlage", "description": "Eine Android-Layoutdatei (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Öffnet Layout1.xml im Editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json index 6024c63403a..6f69c4da7a9 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.es.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Plantilla de diseño de Android", "description": "Un archivo de diseño de Android (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Abre Layout1.xml en el editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json index bcb4100be6c..d4f92089e84 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.fr.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Modèle de disposition Android", "description": "Fichier de disposition Android (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Ouvre Layout1.xml dans l’éditeur" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json index 008fd522a22..40c52301a2b 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.it.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Modello di layout Android", "description": "File di layout Android (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Apre Layout1.xml nell'editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json index d73e996289b..4f0ab4f5fbc 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ja.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Android レイアウト テンプレート", "description": "Android レイアウト (XML) ファイル", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "エディターで Layout1.xml を開きます" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json index 08999834454..3766f60e2fc 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ko.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Android 레이아웃 템플릿", "description": "Android 레이아웃(XML) 파일", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "편집기에서 Layout1.xml 엽니다." } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json index c696b001f50..0421f11b109 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pl.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Szablon Układ systemu Android", "description": "Plik układu systemu Android (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Otwiera plik Layout1.xml w edytorze" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json index ba1b1470a48..43039dbe9a4 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.pt-BR.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Modelo de Layout do Android", "description": "Um arquivo de layout do Android (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Abre Layout1.xml no editor" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json index 563979403c4..46f7d0395a3 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.ru.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Шаблон макета Android", "description": "Файл макета Android (XML)", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Открывает Layout1.xml в редакторе" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json index 8ccb7620316..d42375f3fe5 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.tr.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Android Düzeni şablonu", "description": "Android düzeni (XML) dosyası", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "Layout1.xml dosyasını düzenleyicide açar" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json index a56ebef7e32..f1e39eb23c9 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hans.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Android 布局模板", "description": "Android 布局 (XML) 文件", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "在编辑器中打开 Layout1.xml" } \ No newline at end of file diff --git a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json index 70cf426b1e4..54370db861f 100644 --- a/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json +++ b/src/Microsoft.Android.Templates/android-layout/.template.config/localize/templatestrings.zh-Hant.json @@ -2,5 +2,5 @@ "author": "Microsoft", "name": "Android 版面配置範本", "description": "Android 配置 (XML) 檔案", - "postActions/openInEditor/description": "Opens Layout1.xml in the editor" + "postActions/openInEditor/description": "在編輯器中開啟 Layout1.xml" } \ No newline at end of file From c22c17fbe9c37d1152b8413d418a197079bb2361 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 17 Jan 2024 01:35:21 +0000 Subject: [PATCH 75/92] [Xamarin.Android.Build.Tasks] fix warning when missing `proguard-android.txt` (#8641) We are seeing numerous test failures because of this warning. warning XA4304: ProGuard configuration file 'C:\Android\android-sdk\tools\proguard\proguard-android.txt' was not found. This is because the `proguard-android.txt` file no longer ships with the Android SDK. We should check this file exists before adding it to the list of `@(_ProguardConfiguration)` files. This way if a user still does have it, it will be included. --- src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 895c6a7585f..8c51829f920 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -1940,7 +1940,7 @@ because xbuild doesn't support framework reference assemblies. <_ProguardConfiguration Include="$(ProguardConfigFiles)" /> - <_ProguardConfiguration Include="$(_AndroidSdkDirectory)tools\proguard\proguard-android.txt" /> + <_ProguardConfiguration Include="$(_AndroidSdkDirectory)tools\proguard\proguard-android.txt" Condition=" Exists ('$(_AndroidSdkDirectory)tools\proguard\proguard-android.txt') " /> <_ProguardConfiguration Include="$(IntermediateOutputPath)proguard\proguard_xamarin.cfg" Condition=" '$(AndroidLinkTool)' != '' " /> <_ProguardConfiguration Include="$(_ProguardProjectConfiguration)" Condition=" '$(AndroidLinkTool)' != '' " /> <_ProguardConfiguration Include="$(IntermediateOutputPath)proguard\proguard_project_primary.cfg" Condition=" '$(AndroidLinkTool)' != '' " /> From 77ac82a1109f5bfc885b9f6389ba509381234808 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 25 Jan 2024 09:55:53 -0600 Subject: [PATCH 76/92] [release/8.0.1xx] [Xamarin.Android.Build.Tasks] XA1039 warning for Android.Support (#8648) Context: 2f192386e8072f8e0ecaf0de2fe48654f3ade423 Commit 2f192386 introduces a new XA1039 error when the Android Support libraries are referenced by a .NET 9 project. For .NET 8, partially backport 2f192386 to emit an XA1039 *warning* when the Android Support libraries are referenced by a .NET 8 project. Also introduce a new `$(_AndroidIgnoreAndroidSupportWarning)` MSBuild property as an escape hatch if someone needs to completely disable the warning: <_AndroidIgnoreAndroidSupportWarning>true .NET 9 will not honor or support `$(_AndroidIgnoreAndroidSupportWarning)`. --- Documentation/guides/messages/xa1039.md | 47 +++++++++++++++++++ .../Properties/Resources.resx | 4 ++ .../Xamarin.Android.Build.Tests/BuildTest.cs | 13 +++++ .../Xamarin.Android.Common.targets | 17 +++++++ 4 files changed, 81 insertions(+) create mode 100644 Documentation/guides/messages/xa1039.md diff --git a/Documentation/guides/messages/xa1039.md b/Documentation/guides/messages/xa1039.md new file mode 100644 index 00000000000..ec43ce6721b --- /dev/null +++ b/Documentation/guides/messages/xa1039.md @@ -0,0 +1,47 @@ +--- +title: Xamarin.Android warning XA1039 +description: XA1039 warning code +ms.date: 1/10/2024 +--- +# Xamarin.Android warning XA1039 + +## Example messages + +``` +warning XA1039: The Android Support libraries are not supported in .NET 9 and later, please migrate to AndroidX. See https://aka.ms/xamarin/androidx for more details. +``` + +## Issue + +Outdated "Android Support Library" packages are no longer supported in .NET 9: + +* `Xamarin.Android.Arch.*` +* `Xamarin.Android.Support.*` + +The underlying Java libraries are no longer supported by Google since the final +28.0.0 release. See the [Android Support Library Documentation][support] for +details. + +Some example prefixes of the newer, supported AndroidX packages are: + +* `Xamarin.AndroidX.*` +* `Xamarin.AndroidX.Arch.*` + +For more information about the Android Support libraries or AndroidX, see: + +* [Android Support Library Documentation][support] +* [AndroidX Documentation](https://developer.android.com/jetpack/androidx) + +[support]: https://developer.android.com/topic/libraries/support-library/packages + +## Solution + +Remove all NuGet package references to `Xamarin.Android.Support` or +`Xamarin.Android.Arch` in favor of the new AndroidX equivalents. + +This also can occur if you are using a NuGet package with a transitive +dependency on the Android support packages. In this case, you will need to +remove the package or contact the package author. + +See the [AndroidX migration documentation](https://aka.ms/xamarin/androidx) for +details. diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx index 5915871c655..09fb910bdeb 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx @@ -947,4 +947,8 @@ To use a custom JDK path for a command line build, set the 'JavaSdkDirectory' MS {0} - An Android Resource Identifier. + + The Android Support libraries are not supported in .NET 9 and later, please migrate to AndroidX. See https://aka.ms/xamarin/androidx for more details. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs index 9b6db6e36c9..e8dde8d8c3d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BuildTest.cs @@ -1463,6 +1463,19 @@ public void XA4310 ([Values ("apk", "aab")] string packageFormat) } } + [Test] + public void XA1039 () + { + var proj = new XamarinAndroidApplicationProject { + PackageReferences = { + KnownPackages.SupportCompat_27_0_2_1 + } + }; + using var builder = CreateApkBuilder (); + Assert.IsTrue (builder.Build (proj), "build should have succeeded"); + StringAssertEx.Contains ("warning XA1039", builder.LastBuildOutput, "Should get XA1039 warning"); + } + [Test] [NonParallelizable] public void CheckLintErrorsAndWarnings () diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index 8c51829f920..ece4ee9b83e 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -499,6 +499,23 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved. /> + + + <_AndroidUnsupportedPackages + Include="%(ResolvedCompileFileDefinitions.NuGetPackageId)" + Condition=" '%(ResolvedCompileFileDefinitions.NuGetPackageId)' != '' and + ( $([System.String]::Copy(%(ResolvedCompileFileDefinitions.NuGetPackageId)).StartsWith ('Xamarin.Android.Arch.')) or + $([System.String]::Copy(%(ResolvedCompileFileDefinitions.NuGetPackageId)).StartsWith ('Xamarin.Android.Support.')) )" + /> + + + + Date: Tue, 23 Jan 2024 16:04:34 -0600 Subject: [PATCH 77/92] [Xamarin.Android.build.Tasks] `` ignores `repackaged.jar` (#8664) Context: https://maven.google.com/androidx/emoji2/emoji2/1.4.0/emoji2-1.4.0.aar Context: https://maven.google.com/androidx/health/connect/connect-client/1.1.0-alpha07/connect-client-1.1.0-alpha07.aar When using the two AARs linked above, you get the build error: Xamarin.Android.Common.targets(845,3): error XA1014: JAR library references with identical file names but different contents were found: repackaged.jar. Please remove any conflicting libraries from EmbeddedJar, InputJar and AndroidJavaLibrary. They both contain `libs/repackaged.jar`, which I'm not able to find any information about. I can reproduce this problem in an MSBuild test. Unfortunately, the only way to workaround the error message is to: * Unzip the `.aar` * Rename `libs/repackaged.jar` to `libs/repackaged-emoji2-1.4.0.jar`, for example * Re-zip the `.aar` a9ca3d46 had a similar problem with `r-classes.jar`. Let's expand upon this change by introducing a private item group: <_AndroidExcludedDuplicateJavaLibraries Include="classes.jar" /> <_AndroidExcludedDuplicateJavaLibraries Include="r-classes.jar" /> <_AndroidExcludedDuplicateJavaLibraries Include="repackaged.jar" /> So if this occurs in the future, we can add future files to this list without rebuilding the Android workload. --- .../Tasks/CheckDuplicateJavaLibraries.cs | 6 +---- .../BindingBuildTest.cs | 24 +++++++++++++++---- .../Xamarin.Android.Common.targets | 9 ++++++- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/CheckDuplicateJavaLibraries.cs b/src/Xamarin.Android.Build.Tasks/Tasks/CheckDuplicateJavaLibraries.cs index 2f7f199111c..5739e3cf40d 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/CheckDuplicateJavaLibraries.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/CheckDuplicateJavaLibraries.cs @@ -9,16 +9,12 @@ namespace Xamarin.Android.Tasks { public class CheckDuplicateJavaLibraries : AndroidTask { - readonly static string [] ExcludedFiles = new [] { - "classes.jar", - "r-classes.jar", - }; - public override string TaskPrefix => "CDJ"; public ITaskItem [] JavaSourceFiles { get; set; } public ITaskItem[] JavaLibraries { get; set; } public ITaskItem[] LibraryProjectJars { get; set; } + public string [] ExcludedFiles { get; set; } public override bool RunTask () { diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs index 7fb2f61bfd7..b98cc2951ab 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/BindingBuildTest.cs @@ -780,31 +780,45 @@ public void LibraryProjectZipWithLint () } /// - /// Tests two .aar files with r-classes.jar + /// Tests two .aar files with r-classes.jar, repackaged.jar /// [Test] - public void AarWithRClassesJar () + public void CheckDuplicateJavaLibraries () { var path = Path.Combine ("temp", TestName); var lib1 = new XamarinAndroidBindingProject { ProjectName = "Library1", AndroidClassParser = "class-parse", Jars = { + // r-classes.jar new AndroidItem.LibraryProjectZip ("Library1.aar") { BinaryContent = () => ResourceData.Library1Aar - } + }, + // repackaged.jar + new AndroidItem.AndroidLibrary ("emoji2-1.4.0.aar") { + MetadataValues = "Bind=false", + WebContent = "https://maven.google.com/androidx/emoji2/emoji2/1.4.0/emoji2-1.4.0.aar", + }, }, }; var lib2 = new XamarinAndroidBindingProject { ProjectName = "Library2", AndroidClassParser = "class-parse", Jars = { + // r-classes.jar new AndroidItem.LibraryProjectZip ("Library2.aar") { BinaryContent = () => ResourceData.Library2Aar - } + }, + // repackaged.jar + new AndroidItem.AndroidLibrary ("connect-client-1.1.0-alpha07.aar") { + MetadataValues = "Bind=false", + WebContent = "https://maven.google.com/androidx/health/connect/connect-client/1.1.0-alpha07/connect-client-1.1.0-alpha07.aar", + }, }, }; - var app = new XamarinAndroidApplicationProject (); + var app = new XamarinAndroidApplicationProject { + SupportedOSPlatformVersion = "30", // androidx.health requires minSdkVersion="30" + }; app.AddReference (lib1); app.AddReference (lib2); using (var lib1Builder = CreateDllBuilder (Path.Combine (path, lib1.ProjectName))) diff --git a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets index ece4ee9b83e..5cc9dd4b521 100644 --- a/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets +++ b/src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets @@ -882,10 +882,17 @@ because xbuild doesn't support framework reference assemblies. + + <_AndroidExcludedDuplicateJavaLibraries Include="classes.jar" /> + <_AndroidExcludedDuplicateJavaLibraries Include="r-classes.jar" /> + <_AndroidExcludedDuplicateJavaLibraries Include="repackaged.jar" /> + + LibraryProjectJars="@(ExtractedJarImports)" + ExcludedFiles="@(_AndroidExcludedDuplicateJavaLibraries)" + /> From f61c76030a439a40e7f87086512b93cb9f304194 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Tue, 5 Dec 2023 17:55:41 -0500 Subject: [PATCH 78/92] [workload] Allow installation on linux-arm64 (#8500) We currently do not allow installation of the `android` workload on linux-arm64, but suspect that it may work for some customers. Given that our [runtime dependencies][0] are now available for linux-arm64, we can stop restricting installation to solicit feedback. [0]: https://github.com/dotnet/runtime/blob/087ca4662309f3db40b3096cbf89853d9c292e16/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net8.Manifest/WorkloadManifest.json.in#L44 --- .../Microsoft.NET.Sdk.Android/WorkloadManifest.in.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json index 8ab0ca24494..df89fd896b1 100644 --- a/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json +++ b/src/Xamarin.Android.Build.Tasks/Microsoft.NET.Sdk.Android/WorkloadManifest.in.json @@ -13,7 +13,7 @@ "Microsoft.Android.Runtime.34.android-x64", "Microsoft.Android.Templates" ], - "platforms": [ "win-x64", "win-arm64", "linux-x64", "osx-x64", "osx-arm64" ], + "platforms": [ "win-x64", "win-arm64", "linux-x64", "linux-arm64", "osx-x64", "osx-arm64" ], "extends" : [ "microsoft-net-runtime-android-net7", "microsoft-net-runtime-android-aot-net7", @@ -32,7 +32,8 @@ "win-x86": "Microsoft.Android.Sdk.Windows", "win-x64": "Microsoft.Android.Sdk.Windows", "win-arm64": "Microsoft.Android.Sdk.Windows", - "linux-x64": "Microsoft.Android.Sdk.Linux" + "linux-x64": "Microsoft.Android.Sdk.Linux", + "linux-arm64": "Microsoft.Android.Sdk.Linux" } }, "Microsoft.Android.Sdk.net7": { @@ -44,7 +45,8 @@ "win-x86": "Microsoft.Android.Sdk.Windows", "win-x64": "Microsoft.Android.Sdk.Windows", "win-arm64": "Microsoft.Android.Sdk.Windows", - "linux-x64": "Microsoft.Android.Sdk.Linux" + "linux-x64": "Microsoft.Android.Sdk.Linux", + "linux-arm64": "Microsoft.Android.Sdk.Linux" } }, "Microsoft.Android.Ref.34": { From 87e4a6d890397c13b2572ce01d4b57874ecef9b0 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Thu, 25 Jan 2024 13:48:32 -0600 Subject: [PATCH 79/92] [release/8.0.1xx] localization changes for `XA1039` (#8674) * Localized file check-in by OneLocBuild Task (#8652) Context: https://aka.ms/onelocbuild Context: https://aka.ms/AllAboutLoc Build definition ID 17928: Build ID 8944839 * LEGO: Merge pull request 8656 LEGO: Merge pull request 8656 * Localized file check-in by OneLocBuild Task (#8657) Context: https://aka.ms/onelocbuild Context: https://aka.ms/AllAboutLoc Build definition ID 17928: Build ID 8952275 * LEGO: Merge pull request 8665 LEGO: Merge pull request 8665 * Localized file check-in by OneLocBuild Task (#8668) Context: https://aka.ms/onelocbuild Context: https://aka.ms/AllAboutLoc Build definition ID 17928: Build ID 8968258 --------- Co-authored-by: VS MobileTools Engineering Service 2 Co-authored-by: CSIGS@microsoft.com --- .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.resx.lcl | 9 +++++++++ .../Properties/Resources.cs.resx | 4 ++++ .../Properties/Resources.de.resx | 4 ++++ .../Properties/Resources.es.resx | 4 ++++ .../Properties/Resources.fr.resx | 4 ++++ .../Properties/Resources.it.resx | 4 ++++ .../Properties/Resources.ja.resx | 4 ++++ .../Properties/Resources.ko.resx | 4 ++++ .../Properties/Resources.pl.resx | 4 ++++ .../Properties/Resources.pt-BR.resx | 4 ++++ .../Properties/Resources.ru.resx | 4 ++++ .../Properties/Resources.tr.resx | 4 ++++ .../Properties/Resources.zh-Hans.resx | 4 ++++ .../Properties/Resources.zh-Hant.resx | 4 ++++ 26 files changed, 169 insertions(+) diff --git a/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index a2afd34ff84..2359c767a9b 100644 --- a/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/cs/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 6cd825a7b5c..26a9c423984 100644 --- a/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/de/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 54ce7399887..576868789e9 100644 --- a/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/es/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 33b285bb66a..664ff88d2b2 100644 --- a/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/fr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 35471fd1c4d..a053422e937 100644 --- a/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/it/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index b0a8df350d2..ba2589f94ce 100644 --- a/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/ja/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 629c6109d13..85344811a11 100644 --- a/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/ko/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index ae6e8464580..7821a088777 100644 --- a/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/pl/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index d4b84d22f9c..7f3a2cecafb 100644 --- a/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/pt-BR/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index b13268a351d..83357e0ea25 100644 --- a/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/ru/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 1d941c9f5e4..df69fadd938 100644 --- a/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/tr/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 2f0da1e9395..a37bd031631 100644 --- a/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/zh-Hans/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl b/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl index 330c2217c32..f3229bbe1a7 100644 --- a/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl +++ b/Localize/loc/zh-Hant/src/Xamarin.Android.Build.Tasks/Properties/Resources.resx.lcl @@ -747,6 +747,15 @@ + + + + + + + + + diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx index 510be7e908f..75c9bb27c46 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.cs.resx @@ -947,4 +947,8 @@ Pokud chcete pro sestavení z příkazového řádku použít vlastní cestu JDK {0} - An Android Resource Identifier. + + Knihovny podpory pr Android se v .NET 9 a novějších verzích nepodporují. Migrujte prosím na AndroidX. Další podrobnosti najdete v https://aka.ms/xamarin/androidx. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx index 0af8228576e..61506030467 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.de.resx @@ -947,4 +947,8 @@ Um einen benutzerdefinierten JDK-Pfad für einen Befehlszeilenbuild zu verwenden {0} - An Android Resource Identifier. + + Die Android-Unterstützungsbibliotheken werden in .NET 9 und höher nicht unterstützt. Migrieren Sie zu AndroidX. Weitere Informationen finden Sie https://aka.ms/xamarin/androidx. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx index b6e15881793..2349d3b98d2 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.es.resx @@ -947,4 +947,8 @@ Para usar una ruta de acceso de JDK personalizada para una compilación de líne {0} - An Android Resource Identifier. + + Las bibliotecas de compatibilidad con Android no se admiten en .NET 9 y versiones posteriores. Migre a AndroidX. Consulte https://aka.ms/xamarin/androidx para obtener más detalles. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx index 5c79b721976..f723bbbfe55 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.fr.resx @@ -947,4 +947,8 @@ Pour utiliser un chemin JDK personnalisé pour une build de ligne de commande, d {0} - An Android Resource Identifier. + + Les bibliothèques Android Support ne sont pas prises en charge dans .NET 9 et les versions ultérieures, veuillez migrer vers AndroidX. Pour plus d’informations, consultez https://aka.ms/xamarin/androidx. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx index 7a17e66fd24..28e7961196f 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.it.resx @@ -947,4 +947,8 @@ Per usare un percorso JDK personalizzato per una compilazione della riga di coma {0} - An Android Resource Identifier. + + Le librerie di supporto Android non sono supportate in .NET 9 e versioni successive. Esegui la migrazione ad AndroidX. Per altri dettagli, vedi https://aka.ms/xamarin/androidx. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx index 7fb8714447f..7a49dccde6f 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ja.resx @@ -948,4 +948,8 @@ In this message, the term "handheld app" means "app for handheld devices." {0} - An Android Resource Identifier. + + Android サポート ライブラリは .NET 9 以降ではサポートされていません。AndroidX に移行してください。詳細については、https://aka.ms/xamarin/androidx を参照してください。 + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx index bc9aeaddf20..67ac7f3cbb8 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ko.resx @@ -947,4 +947,8 @@ In this message, the term "handheld app" means "app for handheld devices." {0} - An Android Resource Identifier. + + Android 지원 라이브러리는 .NET 9 이상에서 지원되지 않습니다. AndroidX로 마이그레이션하세요. 자세한 내용은 https://aka.ms/xamarin/androidx 페이지를 참조하세요. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx index 1730da75797..f795f7ff424 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pl.resx @@ -947,4 +947,8 @@ Aby użyć niestandardowej ścieżki zestawu JDK dla kompilacji wiersza poleceni {0} - An Android Resource Identifier. + + Biblioteki pomocy technicznej systemu Android nie są obsługiwane na platformie .NET 9 i nowszych. Przeprowadź migrację do systemu AndroidX. Aby uzyskać więcej informacji, zobacz https://aka.ms/xamarin/androidx. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx index 8cf2b33ecec..90b270b82a4 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.pt-BR.resx @@ -947,4 +947,8 @@ Para usar um caminho JDK personalizado para um build de linha de comando, defina {0} - An Android Resource Identifier. + + Não há suporte para as bibliotecas de suporte do Android no .NET 9 e posterior; migre para o AndroidX. Para obter detalhes, confira https://aka.ms/xamarin/androidx. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx index e699494cd93..bb1b12237fa 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.ru.resx @@ -947,4 +947,8 @@ In this message, the term "handheld app" means "app for handheld devices." {0} - An Android Resource Identifier. + + Библиотеки поддержки Android не поддерживаются в .NET 9 и более поздних версиях. Перейдите на AndroidX. Дополнительные сведения: https://aka.ms/xamarin/androidx. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx index 99504d855b2..cb9c791d71c 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.tr.resx @@ -947,4 +947,8 @@ Bir komut satırı derlemesi için özel bir SDK yolu kullanmak için 'JavaSdkDi {0} - An Android Resource Identifier. + + Android Destek kitaplıkları .NET 9 ve sonraki sürümlerde desteklenmiyor, lütfen AndroidX'e geçin. Daha fazla ayrıntı için https://aka.ms/xamarin/androidx adresini ziyaret edin. + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx index 170541b4ecf..41f60195732 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hans.resx @@ -947,4 +947,8 @@ In this message, the term "handheld app" means "app for handheld devices." {0} - An Android Resource Identifier. + + .NET 9 及更高版本不支持 Android 支持库,请迁移到 AndroidX。有关详细信息,请参阅 https://aka.ms/xamarin/androidx。 + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file diff --git a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx index a131b204b49..d953e20c7df 100644 --- a/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx +++ b/src/Xamarin.Android.Build.Tasks/Properties/Resources.zh-Hant.resx @@ -947,4 +947,8 @@ In this message, the term "handheld app" means "app for handheld devices." {0} - An Android Resource Identifier. + + .NET 9 及更新版本不支援 Android 支持連結庫,請移轉至 AndroidX。如需詳細資料,請參閱 https://aka.ms/xamarin/androidx。 + The following are literal names and should not be translated: Android Support, AndroidX, .NET. + \ No newline at end of file From 751e84584090d098cf2f3f270b0a3da11393bef5 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 14:02:52 -0600 Subject: [PATCH 80/92] Bump to dotnet/runtime/release/8.0@c987e4f902 (#8636) Context: https://github.com/dotnet/runtime/compare/a6e4834d53...c987e4f902 Context: https://github.com/dotnet/emsdk/compare/201f4dae9d...2fc2ffd960 Updates: * Microsoft.NET.ILLink: from 8.0.1-servicing.23579.14 to 8.0.2-servicing.24067.8 * Microsoft.NET.ILLink.Tasks: from 8.0.1 to 8.0.2 * Microsoft.NETCore.App.Ref: from 8.0.1 to 8.0.2 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100: from 8.0.1 to 8.0.2 Co-authored-by: Jonathan Peppers --- NuGet.config | 8 ++------ eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 8 ++++---- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/NuGet.config b/NuGet.config index 0ee6692bdf5..3835bcd2ed9 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,14 +4,10 @@ - - - - + - - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index cbfc2556d83..e70686f6c32 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,21 +4,21 @@ https://github.com/dotnet/installer 461c7766428ba2782725d89d95d3f4f414ff8c92 - + https://github.com/dotnet/runtime - a6e4834d53ac591a4b3d4a213a8928ad685f7ad8 + c987e4f902859d4f80a24b45c5b2a7e4222b6c0e - + https://github.com/dotnet/runtime - a6e4834d53ac591a4b3d4a213a8928ad685f7ad8 + c987e4f902859d4f80a24b45c5b2a7e4222b6c0e - + https://github.com/dotnet/runtime - a6e4834d53ac591a4b3d4a213a8928ad685f7ad8 + c987e4f902859d4f80a24b45c5b2a7e4222b6c0e - + https://github.com/dotnet/emsdk - 201f4dae9d1a1e105d8ba86d7ece61eed1f665e0 + 2fc2ffd960930318f33fcaa690cbdbc55d72f52d https://github.com/dotnet/cecil diff --git a/eng/Versions.props b/eng/Versions.props index 98f7d57405d..12e5b6eb945 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,12 +2,12 @@ 8.0.101-servicing.23614.6 - 8.0.1-servicing.23579.14 - 8.0.1 - 8.0.1 + 8.0.2-servicing.24067.8 + 8.0.2 + 8.0.2 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.1 + 8.0.2 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version) 7.0.100-rc.1.22410.7 0.11.4-alpha.23509.2 From 7a5784b9d1c71df995f84dc1158526ec5379a610 Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Wed, 17 Jan 2024 11:39:01 +0000 Subject: [PATCH 81/92] [Xamarin.Android.Build.Tasks] Add check for aapt2 invalid data path error (#8640) Fixes https://dev.azure.com/devdiv/DevDiv/_workitems/edit/1922983 Our error matching in Aapt2.cs did not include a new error message which has been introduced. As a result we got a APT2000 error instead of an actual error message which we get for other errors. --- .../Tasks/Aapt2.cs | 3 ++- .../ManifestTest.cs | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/Aapt2.cs b/src/Xamarin.Android.Build.Tasks/Tasks/Aapt2.cs index 1c51cb5980e..7f35ba57894 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/Aapt2.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/Aapt2.cs @@ -541,7 +541,8 @@ static string GetErrorCode (string message) Tuple.Create ("APT2262", "unexpected element found in "), Tuple.Create ("APT2263", "found in "), // unexpected element found in Tuple.Create ("APT2264", "The system cannot find the file specified. (2)"), // Windows Long Path error from aapt2 - Tuple.Create ("APT2265", "The system cannot find the file specified. (2)") // Windows non-ASCII characters error from aapt2 + Tuple.Create ("APT2265", "The system cannot find the file specified. (2)"), // Windows non-ASCII characters error from aapt2 + Tuple.Create ("APT2266", "in tag has value of") // error: attribute ‘android:path’ in tag has value of ‘code/fooauth://com.foo.foo, it must start with a leading slash ‘/’. }; } } diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs index fdb987dbf5b..ce6c48b0b90 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/ManifestTest.cs @@ -568,6 +568,32 @@ public void ApplicationVersionTests (string applicationVersion, bool seperateApk } } + [Test] + public void ManifestDataPathError () + { + var proj = new XamarinAndroidApplicationProject () { + IsRelease = true, + }; + var s = proj.AndroidManifest.Replace ("", @" + + + + + + + + +"); + proj.AndroidManifest = s; + using (var builder = CreateApkBuilder (Path.Combine ("temp", TestContext.CurrentContext.Test.Name))) { + builder.ThrowOnBuildFailure = false; + Assert.IsFalse (builder.Build (proj), "Build should have failed."); + var messages = builder.LastBuildOutput.SkipWhile (x => !x.StartsWith ("Build FAILED.", StringComparison.Ordinal)); + string error = messages.FirstOrDefault (x => x.Contains ("error APT2266:")); + Assert.IsNotNull (error, "Warning should be APT2266"); + } + } + [Test] public void ManifestPlaceholders ([Values ("legacy", "manifestmerger.jar")] string manifestMerger) { From a5257f4c73b26d72c1e76808807059948b524bf6 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Fri, 9 Feb 2024 12:20:10 -0600 Subject: [PATCH 82/92] Bump to xamarin/monodroid/release/8.0.1xx@7edfb4a9 (#8712) Changes: https://github.com/xamarin/monodroid/compare/7b6faa34...7edfb4a9 * [ci] Fix monodroid component inclusion * [release/8.0.1xx] Bump xamarin-android and yaml ref * [release/8.0.1xx] Bump to xamarin/androidtools@6993959a --- .external | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.external b/.external index 0a2df102e2c..71b3d68c546 100644 --- a/.external +++ b/.external @@ -1,2 +1,2 @@ -xamarin/monodroid:release/8.0.1xx@7b6faa349a2e8587b6e55357fcf007a5790f1555 +xamarin/monodroid:release/8.0.1xx@7edfb4a9c1daa49216d193db6aa8b986483cf5fa mono/mono:2020-02@6dd9def57ce969ca04a0ecd9ef72c0a8f069112d From 737a8ede5d1f6163bfac0cbad4d8afbca7906c3a Mon Sep 17 00:00:00 2001 From: Dean Ellis Date: Thu, 15 Feb 2024 20:26:50 +0000 Subject: [PATCH 83/92] Bump to xamarin/LibZipSharp/3.1.1@7abbbf4 (#8723) Changes: https://github.com/xamarin/LibZipSharp/compare/3.0.0...3.1.1 * xamarin/LibZipSharp@7abbbf4: Bump Version to 3.1.1 (xamarin/LibZipSharp#136) * xamarin/LibZipSharp@ca8a64a: [CMake] Add /PROFILE to MSVC link flags (xamarin/LibZipSharp#134) * xamarin/LibZipSharp@22957e4: Bump to microsoft/vcpkg@c8696863d3 (xamarin/LibZipSharp#133) * xamarin/LibZipSharp@ed2ccd5: A round of library version updates (xamarin/LibZipSharp#131) Various compiler and linker flag changes to assist APIScan. --- Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 644f5daa690..b6e76813d65 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -43,7 +43,7 @@ - 3.0.0 + 3.1.1 1.0.0 0.11.4 13.0.1 From e222c43a4a44ccfc04e08c65fc4cddde147fd306 Mon Sep 17 00:00:00 2001 From: "dotnet-maestro[bot]" <42748379+dotnet-maestro[bot]@users.noreply.github.com> Date: Fri, 16 Feb 2024 10:24:14 -0600 Subject: [PATCH 84/92] Bump to dotnet/runtime/release/8.0@62304a6d70 8.0.3 (#8726) Changes: https://github.com/dotnet/runtime/compare/c987e4f902...62304a6d70 Changes: https://github.com/dotnet/emsdk/compare/2fc2ffd960...9a29abdd76 Updates: * Microsoft.NET.ILLink: from 8.0.2-servicing.24067.8 to 8.0.3-servicing.24114.15 * Microsoft.NET.ILLink.Tasks: from 8.0.2 to 8.0.3 * Microsoft.NETCore.App.Ref: from 8.0.2 to 8.0.3 * Microsoft.NET.Workload.Emscripten.Current.Manifest-8.0.100: from 8.0.2 to 8.0.3 --- NuGet.config | 4 ++-- eng/Version.Details.xml | 16 ++++++++-------- eng/Versions.props | 8 ++++---- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/NuGet.config b/NuGet.config index 3835bcd2ed9..2783eb6d08f 100644 --- a/NuGet.config +++ b/NuGet.config @@ -4,10 +4,10 @@ - + - + diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index e70686f6c32..202a1b1ce84 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -4,21 +4,21 @@ https://github.com/dotnet/installer 461c7766428ba2782725d89d95d3f4f414ff8c92 - + https://github.com/dotnet/runtime - c987e4f902859d4f80a24b45c5b2a7e4222b6c0e + 62304a6d7085e32672ec988835eab41d89b82e25 - + https://github.com/dotnet/runtime - c987e4f902859d4f80a24b45c5b2a7e4222b6c0e + 62304a6d7085e32672ec988835eab41d89b82e25 - + https://github.com/dotnet/runtime - c987e4f902859d4f80a24b45c5b2a7e4222b6c0e + 62304a6d7085e32672ec988835eab41d89b82e25 - + https://github.com/dotnet/emsdk - 2fc2ffd960930318f33fcaa690cbdbc55d72f52d + 9a29abdd764a4de0f253ed368871877a47725247 https://github.com/dotnet/cecil diff --git a/eng/Versions.props b/eng/Versions.props index 12e5b6eb945..7f3a8ff84e0 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -2,12 +2,12 @@ 8.0.101-servicing.23614.6 - 8.0.2-servicing.24067.8 - 8.0.2 - 8.0.2 + 8.0.3-servicing.24114.15 + 8.0.3 + 8.0.3 7.0.0-beta.22103.1 7.0.0-beta.22103.1 - 8.0.2 + 8.0.3 $(MicrosoftNETWorkloadEmscriptenCurrentManifest80100Version) 7.0.100-rc.1.22410.7 0.11.4-alpha.23509.2 From f68622cf6b97fa23cc3d3105a52ef5b2e31d52a1 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Wed, 21 Feb 2024 14:41:12 -0600 Subject: [PATCH 85/92] [xamarin-android-tools] import $(LibZipSharpVersion) value (#8738) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: https://github.com/dotnet/maui/issues/20752 Context: d1ba2ccdd1377677a6dd24dc13c7a23fd1b8b930 Context: https://github.com/xamarin/xamarin-android-tools/commit/34e98e2b65917d105169f868b5648f67e68b6784 Context: https://github.com/xamarin/xamarin-android/pull/8746 `dotnet build` (.NET Core) ignores assembly versions. `msbuild.exe` (.NET Framework) does not. Enter d1ba2ccd, which updates the `libZipSharp.dll` assembly version from 3.0.0.0 to 3.1.1.0. However, this change only impacted `Xamarin.Android.Build.Tasks.dll`: % monodis --assemblyref bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/34.99.0/tools/Xamarin.Android.Build.Tasks.dll … 11: Version=3.1.1.0 Name=libZipSharp Flags=0x00000000 It did *not* impact `Microsoft.Android.Build.BaseTasks.dll`, as it is built by `external/xamarin-android-tools` and was using a `@(PackageReference)` for libZipSharp 3.0.0: % monodis --assemblyref bin/Release/lib/packs/Microsoft.Android.Sdk.Darwin/34.99.0/tools/Microsoft.Android.Build.BaseTasks.dll … 5: Version=3.0.0.0 Name=libZipSharp Flags=0x00000000 The resulting NuGet package only contains *one* `libZipSharp.dll`, the 3.1.1.0 version (what `Xamarin.Android.Build.Tasks.dll` refs). On PR builds and CI, everything was fine, because all the tests we have use `dotnet build`, and .NET Core ignores assembly versions. However, if you use *`msbuild.exe`* to invoke the tasks within `Microsoft.Android.Build.BaseTasks.dll`, things fail: XARLP7028 System.IO.FileNotFoundException: Could not load file or assembly 'libZipSharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=276db85bc4e20efc' or one of its dependencies. The system cannot find the file specified.File name: 'libZipSharp, Version=3.0.0.0, Culture=neutral, PublicKeyToken=276db85bc4e20efc' at Xamarin.Android.Tasks.ResolveLibraryProjectImports.Extract(IDictionary`2 jars, ICollection`1 resolvedResourceDirectories, ICollection`1 resolvedAssetDirectories, ICollection`1 resolvedEnvironments, ICollection`1 proguardConfigFiles) at Xamarin.Android.Tasks.ResolveLibraryProjectImports.RunTask() at Microsoft.Android.Build.Tasks.AndroidTask.Execute() in /Users/runner/work/1/s/xamarin-android/external/xamarin-android-tools/src/Microsoft.Android.Build.BaseTasks/AndroidTask.cs:line 25 Fix this by adding an `external/xamarin-android-tools.override.props` file (xamarin/xamarin-android-tools@34e98e2b) which imports `Directory.Build.props`, which causes `$(LibZipSharpVersion)` to be set so that the xamarin-android-tools build uses values provided by xamarin-android. TODO: xamarin/xamarin-android#8746 adds a unit test for the "build with `msbuild.exe`" scenario. --- external/xamarin-android-tools.override.props | 2 ++ 1 file changed, 2 insertions(+) diff --git a/external/xamarin-android-tools.override.props b/external/xamarin-android-tools.override.props index f63648541cd..1e921795c87 100644 --- a/external/xamarin-android-tools.override.props +++ b/external/xamarin-android-tools.override.props @@ -1,4 +1,6 @@ + + https://pkgs.dev.azure.com/dnceng/public/_packaging/darc-pub-dotnet-runtime-8473eeb9/nuget/v3/index.json; From d5011ac4387194503f3e0e6dfc07a66f35ee98d7 Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Wed, 6 Mar 2024 09:43:54 -0800 Subject: [PATCH 86/92] [build] Include MIT license in most NuGet packages (#8787) Fixes: https://github.com/xamarin/xamarin-android/issues/8779 Updates all NuGet packages other than Microsoft.Android.Sdk to include the MIT license at the root of the repo. The license file name and contents have also been updated to improve consistency with other dotnet repos. --- LICENSE => LICENSE.TXT | 5 +---- build-tools/create-packs/Directory.Build.targets | 3 +-- build-tools/create-packs/License.targets | 6 +++--- 3 files changed, 5 insertions(+), 9 deletions(-) rename LICENSE => LICENSE.TXT (94%) diff --git a/LICENSE b/LICENSE.TXT similarity index 94% rename from LICENSE rename to LICENSE.TXT index a9eb82df55a..984713a4962 100644 --- a/LICENSE +++ b/LICENSE.TXT @@ -1,8 +1,6 @@ -Xamarin.Android SDK - The MIT License (MIT) -Copyright (c) .NET Foundation Contributors +Copyright (c) .NET Foundation and Contributors All rights reserved. @@ -23,4 +21,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/build-tools/create-packs/Directory.Build.targets b/build-tools/create-packs/Directory.Build.targets index ce8b9733314..689142072ac 100644 --- a/build-tools/create-packs/Directory.Build.targets +++ b/build-tools/create-packs/Directory.Build.targets @@ -47,7 +47,6 @@ <_GlobalProperties Include="-p:Configuration=$(Configuration)" /> - <_GlobalProperties Include="-p:NuGetLicense=$(NuGetLicense)" /> <_GlobalProperties Include="-p:IncludeSymbols=False" /> @@ -103,7 +102,7 @@ /> - <_WLExtractedFiles Include="$(_SdkManifestsFolder)temp\LICENSE" /> + <_WLExtractedFiles Include="$(_SdkManifestsFolder)temp\LICENSE.TXT" /> <_WLExtractedFiles Include="$(_SdkManifestsFolder)temp\data\*" /> diff --git a/build-tools/create-packs/License.targets b/build-tools/create-packs/License.targets index b711f0a54fb..d25cf36da9c 100644 --- a/build-tools/create-packs/License.targets +++ b/build-tools/create-packs/License.targets @@ -1,12 +1,12 @@ - + Microsoft © Microsoft Corporation. All rights reserved. https://github.com/xamarin/xamarin-android $(XamarinAndroidSourcePath)external\monodroid\tools\scripts\License.txt - $(XamarinAndroidSourcePath)LICENSE - LICENSE + $(XamarinAndroidSourcePath)LICENSE.TXT + LICENSE.TXT _GetLicense;$(BeforePack) From c37b4f6b4d9a8ccadcc6aa7e8e24eb647c38695c Mon Sep 17 00:00:00 2001 From: Jonathan Pryor Date: Thu, 7 Mar 2024 12:52:43 -0500 Subject: [PATCH 87/92] Bump to xamarin/java.interop/release/8.0.1xx@3c5cf34b (#8791) Changes: https://github.com/xamarin/java.interop/compare/bec0326a925ff888d96cb433f5049000a6d32a33...3c5cf34b0e3cc9427521530db9aa4b4abe39d20d * xamarin/java.interop@3c5cf34b: [generator] Extend `skipInvokerMethods` support to interfaces. (xamarin/java.interop#1203) --- .gitmodules | 2 +- external/Java.Interop | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index ab79ccab656..fcf1e2f78c3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,7 +9,7 @@ [submodule "external/Java.Interop"] path = external/Java.Interop url = https://github.com/xamarin/java.interop.git - branch = main + branch = release/8.0.1xx [submodule "external/lz4"] path = external/lz4 url = https://github.com/lz4/lz4.git diff --git a/external/Java.Interop b/external/Java.Interop index bec0326a925..3c5cf34b0e3 160000 --- a/external/Java.Interop +++ b/external/Java.Interop @@ -1 +1 @@ -Subproject commit bec0326a925ff888d96cb433f5049000a6d32a33 +Subproject commit 3c5cf34b0e3cc9427521530db9aa4b4abe39d20d From c9b7b23819cbab988ae4bc6d1fd6ee16cb32905e Mon Sep 17 00:00:00 2001 From: Peter Collins Date: Fri, 20 Oct 2023 14:10:56 -0400 Subject: [PATCH 88/92] [build] Remove MONOANDROID, NET, and NETCOREAPP directives (#8434) Removes the conditional compiler directives used to swap between `.NET` and `MonoAndroid`. These are no longer needed in main as `.NET` is the only supported target. --- .../Application/NullableAttributes.cs | 13 ----- src/Mono.Android/Android.App/Activity.cs | 2 - .../Android.Runtime/AndroidEnvironment.cs | 4 -- .../Android.Runtime/AndroidRuntime.cs | 13 +---- .../Android.Runtime/AndroidRuntimeInternal.cs | 8 +-- src/Mono.Android/Android.Runtime/JNIEnv.cs | 25 -------- .../Android.Runtime/JNIEnvInit.cs | 14 ----- .../Android.Runtime/JNINativeWrapper.g.cs | 4 -- .../Android.Runtime/JNINativeWrapper.g.tt | 4 -- .../Android.Runtime/LogCategories.cs | 4 +- src/Mono.Android/Android.Runtime/LogLevel.cs | 4 +- .../Android.Runtime/PreserveAttribute.cs | 2 - .../Android.Runtime/RuntimeConstants.cs | 4 +- .../Android.Runtime/RuntimeNativeMethods.cs | 7 +-- src/Mono.Android/Android.Views/View.cs | 4 +- .../WindowManagerLayoutParams.cs | 2 +- .../Android/LinkerSafeAttribute.cs | 2 - .../JavaTypeParametersAttribute.cs | 18 ------ src/Mono.Android/Java.Interop/TypeManager.cs | 3 +- .../Properties/AssemblyInfo.cs.in | 2 - .../AndroidHttpResponseMessage.cs | 13 ----- .../AndroidMessageHandler.cs | 27 ++------- .../Xamarin.Android.Net/AuthModuleDigest.cs | 4 -- .../Xamarin.Android.Net/AuthenticationData.cs | 16 ------ .../AuthenticationScheme.cs | 8 --- .../IAndroidAuthenticationModule.cs | 14 ----- .../Resources/LinkDescTest/Bug36250.cs | 57 ------------------- .../LinkDescTest/MainActivityReplacement.cs | 9 +-- .../Tests/InstallAndRunTests.cs | 42 +------------- .../Android.Runtime/AndroidEnvironmentTest.cs | 6 -- .../Mono.Android-Tests/System.Net/SslTest.cs | 4 -- .../AndroidMessageHandlerTests.cs | 6 -- 32 files changed, 22 insertions(+), 323 deletions(-) delete mode 100644 build-tools/xaprepare/xaprepare/Application/NullableAttributes.cs delete mode 100644 tests/MSBuildDeviceIntegration/Resources/LinkDescTest/Bug36250.cs diff --git a/build-tools/xaprepare/xaprepare/Application/NullableAttributes.cs b/build-tools/xaprepare/xaprepare/Application/NullableAttributes.cs deleted file mode 100644 index 35dbd04b0d1..00000000000 --- a/build-tools/xaprepare/xaprepare/Application/NullableAttributes.cs +++ /dev/null @@ -1,13 +0,0 @@ -#if !NETCOREAPP -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -namespace System.Diagnostics.CodeAnalysis -{ - /// Specifies that an output may be null even if the corresponding type disallows it. - [AttributeUsage (AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, Inherited = false)] - internal sealed class MaybeNullAttribute : Attribute - { } -} -#endif diff --git a/src/Mono.Android/Android.App/Activity.cs b/src/Mono.Android/Android.App/Activity.cs index 87f30d8a254..a8156ec04c6 100644 --- a/src/Mono.Android/Android.App/Activity.cs +++ b/src/Mono.Android/Android.App/Activity.cs @@ -12,7 +12,6 @@ partial class Activity { return this.FindViewById (id)!.JavaCast (); } -#if NET7_0_OR_GREATER || (NET6_0_OR_GREATER && ANDROID_33) || ANDROID_34 // See: https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/app/Activity.java;l=3430 public T RequireViewById (int id) where T : Android.Views.View @@ -23,7 +22,6 @@ public T RequireViewById (int id) } return view; } -#endif // NET7_0_OR_GREATER || (NET6_0_OR_GREATER && ANDROID_33) || ANDROID_34 public void StartActivityForResult (Type activityType, int requestCode) { diff --git a/src/Mono.Android/Android.Runtime/AndroidEnvironment.cs b/src/Mono.Android/Android.Runtime/AndroidEnvironment.cs index f81a0b5c0bc..edfe42ec449 100644 --- a/src/Mono.Android/Android.Runtime/AndroidEnvironment.cs +++ b/src/Mono.Android/Android.Runtime/AndroidEnvironment.cs @@ -332,9 +332,7 @@ static IWebProxy GetDefaultProxy () // This is invoked by // System.Net.Http.dll!System.Net.Http.HttpClient.cctor // DO NOT REMOVE -#if !MONOANDROID1_0 [DynamicDependency (DynamicallyAccessedMemberTypes.PublicParameterlessConstructor, typeof (Xamarin.Android.Net.AndroidMessageHandler))] -#endif static object GetHttpMessageHandler () { if (httpMessageHandlerType is null) { @@ -357,14 +355,12 @@ static object GetHttpMessageHandler () static bool IsAcceptableHttpMessageHandlerType (Type handlerType) { -#if !MONOANDROID1_0 if (Extends (handlerType, "System.Net.Http.HttpClientHandler, System.Net.Http")) { // It's not possible to construct HttpClientHandler in this method because it would cause infinite recursion // as HttpClientHandler's constructor calls the GetHttpMessageHandler function Logger.Log (LogLevel.Warn, "MonoAndroid", $"The type {handlerType.AssemblyQualifiedName} cannot be used as the native HTTP handler because it is derived from System.Net.Htt.HttpClientHandler. Use a type that extends System.Net.Http.HttpMessageHandler instead."); return false; } -#endif if (!Extends (handlerType, "System.Net.Http.HttpMessageHandler, System.Net.Http")) { Logger.Log (LogLevel.Warn, "MonoAndroid", $"The type {handlerType.AssemblyQualifiedName} set as the default HTTP handler is invalid. Use a type that extends System.Net.Http.HttpMessageHandler."); return false; diff --git a/src/Mono.Android/Android.Runtime/AndroidRuntime.cs b/src/Mono.Android/Android.Runtime/AndroidRuntime.cs index 9e67d00721c..cd815b76391 100644 --- a/src/Mono.Android/Android.Runtime/AndroidRuntime.cs +++ b/src/Mono.Android/Android.Runtime/AndroidRuntime.cs @@ -33,11 +33,9 @@ internal AndroidRuntime (IntPtr jnienv, classLoader_loadClass, jniAddNativeMethodRegistrationAttributePresent)) { -#if NETCOREAPP // This is not ideal, but we need to set this while the runtime is initializing but we can't do it directly from the `JNIEnvInit.Initialize` method, since // it lives in an assembly that does not reference Mono.Android. So we do it here, because this class is instantiated by JNIEnvInit.Initialize. AndroidEnvironmentInternal.UnhandledExceptionHandler = AndroidEnvironment.UnhandledException; -#endif } public override void FailFast (string? message) @@ -268,11 +266,7 @@ protected override IEnumerable GetTypesForSimpleReference (string jniSimpl { string? j = JNIEnv.TypemapManagedToJava (type); if (j != null) { - return -#if NET - GetReplacementTypeCore (j) ?? -#endif // NET - j; + return GetReplacementTypeCore (j) ?? j; } if (JNIEnvInit.IsRunningOnDesktop) { return JavaNativeTypeManager.ToJniName (type); @@ -283,9 +277,8 @@ protected override IEnumerable GetTypesForSimpleReference (string jniSimpl protected override IEnumerable GetSimpleReferences (Type type) { string? j = JNIEnv.TypemapManagedToJava (type); -#if NET j = GetReplacementTypeCore (j) ?? j; -#endif // NET + if (JNIEnvInit.IsRunningOnDesktop) { string? d = JavaNativeTypeManager.ToJniName (type); if (j != null && d != null) { @@ -301,7 +294,6 @@ protected override IEnumerable GetSimpleReferences (Type type) return Array.Empty (); } -#if NET protected override IReadOnlyList? GetStaticMethodFallbackTypesCore (string jniSimpleReference) { ReadOnlySpan name = jniSimpleReference; @@ -383,7 +375,6 @@ protected override IEnumerable GetSimpleReferences (Type type) TargetJniMethodInstanceToStatic = method.is_static, }; } -#endif // NET delegate Delegate GetCallbackHandler (); diff --git a/src/Mono.Android/Android.Runtime/AndroidRuntimeInternal.cs b/src/Mono.Android/Android.Runtime/AndroidRuntimeInternal.cs index 37df6ef353a..baaf3d9b32e 100644 --- a/src/Mono.Android/Android.Runtime/AndroidRuntimeInternal.cs +++ b/src/Mono.Android/Android.Runtime/AndroidRuntimeInternal.cs @@ -1,4 +1,4 @@ -#if !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#if INSIDE_MONO_ANDROID_RUNTIME using System; using System.Reflection; @@ -7,11 +7,7 @@ namespace Android.Runtime public static class AndroidRuntimeInternal { internal static MethodInfo? mono_unhandled_exception_method = null; -#if NETCOREAPP internal static Action mono_unhandled_exception = RuntimeNativeMethods.monodroid_debugger_unhandled_exception; -#else - internal static Action? mono_unhandled_exception = null; -#endif #pragma warning disable CS0649 // Field is never assigned to. This field is assigned from monodroid-glue.cc. internal static volatile bool BridgeProcessing; // = false @@ -38,4 +34,4 @@ public static void WaitForBridgeProcessing () } } } -#endif // !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#endif // INSIDE_MONO_ANDROID_RUNTIME diff --git a/src/Mono.Android/Android.Runtime/JNIEnv.cs b/src/Mono.Android/Android.Runtime/JNIEnv.cs index 3250cbb67ae..cbb7f3a53d4 100644 --- a/src/Mono.Android/Android.Runtime/JNIEnv.cs +++ b/src/Mono.Android/Android.Runtime/JNIEnv.cs @@ -103,27 +103,9 @@ static void ManualJavaObjectDispose (Java.Lang.Object obj) GC.SuppressFinalize (obj); } -#if !NETCOREAPP - static Action AppDomain_DoUnhandledException = null!; -#endif // ndef NETCOREAPP - static void Initialize () { AndroidRuntimeInternal.InitializeUnhandledExceptionMethod (); -#if !NETCOREAPP - if (AppDomain_DoUnhandledException == null) { - var ad_due = typeof (AppDomain) - .GetMethod ("DoUnhandledException", - bindingAttr: BindingFlags.NonPublic | BindingFlags.Instance, - binder: null, - types: new []{typeof (UnhandledExceptionEventArgs)}, - modifiers: null); - if (ad_due != null) { - AppDomain_DoUnhandledException = (Action) Delegate.CreateDelegate ( - typeof (Action), ad_due); - } - } -#endif // ndef NETCOREAPP } internal static void PropagateUncaughtException (IntPtr env, IntPtr javaThreadPtr, IntPtr javaExceptionPtr) @@ -150,14 +132,7 @@ internal static void PropagateUncaughtException (IntPtr env, IntPtr javaThreadPt Logger.Log (LogLevel.Info, "MonoDroid", "UNHANDLED EXCEPTION:"); Logger.Log (LogLevel.Info, "MonoDroid", javaException.ToString ()); -#if !NETCOREAPP - var args = new UnhandledExceptionEventArgs (innerException ?? javaException, isTerminating: true); - // Disabled until Linker error surfaced in https://github.com/xamarin/xamarin-android/pull/4302#issuecomment-596400025 is resolved - //AppDomain.CurrentDomain.DoUnhandledException (args); - AppDomain_DoUnhandledException?.Invoke (AppDomain.CurrentDomain, args); -#else // ndef NETCOREAPP RuntimeNativeMethods.monodroid_unhandled_exception (innerException ?? javaException); -#endif // def NETCOREAPP } catch (Exception e) { Logger.Log (LogLevel.Error, "monodroid", "Exception thrown while raising AppDomain.UnhandledException event: " + e.ToString ()); } diff --git a/src/Mono.Android/Android.Runtime/JNIEnvInit.cs b/src/Mono.Android/Android.Runtime/JNIEnvInit.cs index 9311757806e..2f65464716b 100644 --- a/src/Mono.Android/Android.Runtime/JNIEnvInit.cs +++ b/src/Mono.Android/Android.Runtime/JNIEnvInit.cs @@ -51,9 +51,7 @@ internal struct JnienvInitializeArgs { static AndroidRuntime? androidRuntime; -#if NETCOREAPP [UnmanagedCallersOnly] -#endif static unsafe void RegisterJniNatives (IntPtr typeName_ptr, int typeName_len, IntPtr jniClass, IntPtr methods_ptr, int methods_len) { string typeName = new string ((char*) typeName_ptr, 0, typeName_len); @@ -75,9 +73,7 @@ static unsafe void RegisterJniNatives (IntPtr typeName_ptr, int typeName_len, In ((AndroidTypeManager)androidRuntime!.TypeManager).RegisterNativeMembers (jniType, type, methods); } -#if NETCOREAPP [UnmanagedCallersOnly] -#endif internal static unsafe void Initialize (JnienvInitializeArgs* args) { IntPtr total_timing_sequence = IntPtr.Zero; @@ -88,19 +84,13 @@ internal static unsafe void Initialize (JnienvInitializeArgs* args) gref_gc_threshold = args->grefGcThreshold; jniRemappingInUse = args->jniRemappingInUse; -#if NETCOREAPP MarshalMethodsEnabled = args->marshalMethodsEnabled; -#endif java_class_loader = args->grefLoader; mid_Class_forName = new JniMethodInfo (args->Class_forName, isStatic: true); LocalRefsAreIndirect = args->localRefsAreIndirect == 1; -#if MONOANDROID1_0 - Mono.SystemDependencyProvider.Initialize (); -#endif - bool androidNewerThan10 = args->androidSdkVersion > 10; BoundExceptionType = (BoundExceptionType)args->ioExceptionType; androidRuntime = new AndroidRuntime (args->env, args->javaVm, androidNewerThan10, args->grefLoader, args->Loader_loadClass, args->jniAddNativeMethodRegistrationAttributePresent != 0); @@ -121,16 +111,12 @@ internal static unsafe void Initialize (JnienvInitializeArgs* args) } } -#if !MONOANDROID1_0 SetSynchronizationContext (); -#endif } -#if !MONOANDROID1_0 // NOTE: prevents Android.App.Application static ctor from running [MethodImpl (MethodImplOptions.NoInlining)] static void SetSynchronizationContext () => SynchronizationContext.SetSynchronizationContext (Android.App.Application.SynchronizationContext); -#endif } } diff --git a/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs b/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs index ddbc3ef2e0b..a61045740d2 100644 --- a/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs +++ b/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs @@ -9,11 +9,7 @@ public static partial class JNINativeWrapper static bool _unhandled_exception (Exception e) { if (Debugger.IsAttached || !JNIEnvInit.PropagateExceptions) { -#if NETCOREAPP AndroidRuntimeInternal.mono_unhandled_exception?.Invoke (e); -#else - JNIEnvInit.mono_unhandled_exception?.Invoke (e); -#endif return false; } return true; diff --git a/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.tt b/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.tt index 431d826c739..aef57c6278d 100644 --- a/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.tt +++ b/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.tt @@ -257,11 +257,7 @@ namespace Android.Runtime static bool _unhandled_exception (Exception e) { if (Debugger.IsAttached || !JNIEnvInit.PropagateExceptions) { -#if NETCOREAPP AndroidRuntimeInternal.mono_unhandled_exception?.Invoke (e); -#else - JNIEnvInit.mono_unhandled_exception?.Invoke (e); -#endif return false; } return true; diff --git a/src/Mono.Android/Android.Runtime/LogCategories.cs b/src/Mono.Android/Android.Runtime/LogCategories.cs index 5eb6020cfad..f33fd0d1a18 100644 --- a/src/Mono.Android/Android.Runtime/LogCategories.cs +++ b/src/Mono.Android/Android.Runtime/LogCategories.cs @@ -1,4 +1,4 @@ -#if !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#if INSIDE_MONO_ANDROID_RUNTIME using System; namespace Android.Runtime @@ -20,4 +20,4 @@ internal enum LogCategories { Netlink = 1 << 9, } } -#endif // !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#endif // INSIDE_MONO_ANDROID_RUNTIME diff --git a/src/Mono.Android/Android.Runtime/LogLevel.cs b/src/Mono.Android/Android.Runtime/LogLevel.cs index 347f2037523..52254f7dab6 100644 --- a/src/Mono.Android/Android.Runtime/LogLevel.cs +++ b/src/Mono.Android/Android.Runtime/LogLevel.cs @@ -1,4 +1,4 @@ -#if !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#if INSIDE_MONO_ANDROID_RUNTIME namespace Android.Runtime { // Keep in sync with the LogLevel enum in @@ -15,4 +15,4 @@ internal enum LogLevel { Silent = 0x08 } } -#endif // !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#endif // INSIDE_MONO_ANDROID_RUNTIME diff --git a/src/Mono.Android/Android.Runtime/PreserveAttribute.cs b/src/Mono.Android/Android.Runtime/PreserveAttribute.cs index b8646d3fd4d..c45be56db15 100644 --- a/src/Mono.Android/Android.Runtime/PreserveAttribute.cs +++ b/src/Mono.Android/Android.Runtime/PreserveAttribute.cs @@ -32,9 +32,7 @@ namespace Android.Runtime { -#if NETCOREAPP [Obsolete ("Please use [System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute]")] -#endif // NETCOREAPP [AttributeUsage ( AttributeTargets.Class | AttributeTargets.Struct diff --git a/src/Mono.Android/Android.Runtime/RuntimeConstants.cs b/src/Mono.Android/Android.Runtime/RuntimeConstants.cs index 254fb8c2170..8d9d0557579 100644 --- a/src/Mono.Android/Android.Runtime/RuntimeConstants.cs +++ b/src/Mono.Android/Android.Runtime/RuntimeConstants.cs @@ -1,4 +1,4 @@ -#if !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#if INSIDE_MONO_ANDROID_RUNTIME namespace Android.Runtime { internal static class RuntimeConstants @@ -6,4 +6,4 @@ internal static class RuntimeConstants public const string InternalDllName = "xa-internal-api"; } } -#endif // !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#endif // INSIDE_MONO_ANDROID_RUNTIME diff --git a/src/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs b/src/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs index 3487514a6a7..a0c936c59ff 100644 --- a/src/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs +++ b/src/Mono.Android/Android.Runtime/RuntimeNativeMethods.cs @@ -1,4 +1,4 @@ -#if !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#if INSIDE_MONO_ANDROID_RUNTIME using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; @@ -76,13 +76,12 @@ internal static class RuntimeNativeMethods [DllImport (RuntimeConstants.InternalDllName, CallingConvention = CallingConvention.Cdecl)] internal static extern int _monodroid_max_gref_get (); -#if NETCOREAPP + [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern void monodroid_unhandled_exception (Exception javaException); [MethodImplAttribute(MethodImplOptions.InternalCall)] internal static extern unsafe void monodroid_debugger_unhandled_exception (Exception e); -#endif } } -#endif // !NETCOREAPP || INSIDE_MONO_ANDROID_RUNTIME +#endif // INSIDE_MONO_ANDROID_RUNTIME diff --git a/src/Mono.Android/Android.Views/View.cs b/src/Mono.Android/Android.Views/View.cs index ef5fe5739ee..2a17143e167 100644 --- a/src/Mono.Android/Android.Views/View.cs +++ b/src/Mono.Android/Android.Views/View.cs @@ -28,7 +28,6 @@ public bool PerformAccessibilityAction (GlobalAction action, Bundle arguments) return this.FindViewById (id).JavaCast (); } -#if NET7_0_OR_GREATER || (NET6_0_OR_GREATER && ANDROID_33) || ANDROID_34 // See: https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/view/View.java;l=25322 public T RequireViewById (int id) where T : Android.Views.View @@ -39,7 +38,6 @@ public T RequireViewById (int id) } return view; } -#endif //NET7_0_OR_GREATER || (NET6_0_OR_GREATER && ANDROID_33) || ANDROID_34 public bool Post (Action action) { @@ -91,7 +89,7 @@ public bool FitsSystemWindows () } #endif -#if NET && ANDROID_34 +#if ANDROID_34 [global::System.Runtime.Versioning.ObsoletedOSPlatform ("android30.0", "These flags are deprecated. Use WindowInsetsController instead.")] public SystemUiFlags SystemUiFlags { get => (SystemUiFlags) SystemUiVisibility; diff --git a/src/Mono.Android/Android.Views/WindowManagerLayoutParams.cs b/src/Mono.Android/Android.Views/WindowManagerLayoutParams.cs index cd1882a2998..57cb12c9989 100644 --- a/src/Mono.Android/Android.Views/WindowManagerLayoutParams.cs +++ b/src/Mono.Android/Android.Views/WindowManagerLayoutParams.cs @@ -4,7 +4,7 @@ namespace Android.Views { partial class WindowManagerLayoutParams { -#if NET && ANDROID_34 +#if ANDROID_34 [global::System.Runtime.Versioning.ObsoletedOSPlatform ("android30.0", "These flags are deprecated. Use WindowInsetsController instead.")] public SystemUiFlags SystemUiFlags { get => (SystemUiFlags) SystemUiVisibility; diff --git a/src/Mono.Android/Android/LinkerSafeAttribute.cs b/src/Mono.Android/Android/LinkerSafeAttribute.cs index b44a07a6821..0709b8e161f 100644 --- a/src/Mono.Android/Android/LinkerSafeAttribute.cs +++ b/src/Mono.Android/Android/LinkerSafeAttribute.cs @@ -2,9 +2,7 @@ namespace Android { -#if NETCOREAPP [Obsolete ("For .NET 6+, please use: [assembly: global::System.Reflection.AssemblyMetadata(\"IsTrimmable\", \"True\")]")] -#endif // NETCOREAPP [AttributeUsage (AttributeTargets.Assembly)] public sealed class LinkerSafeAttribute : Attribute { diff --git a/src/Mono.Android/Java.Interop/JavaTypeParametersAttribute.cs b/src/Mono.Android/Java.Interop/JavaTypeParametersAttribute.cs index b7f8c38f2c8..a0e6aa36143 100644 --- a/src/Mono.Android/Java.Interop/JavaTypeParametersAttribute.cs +++ b/src/Mono.Android/Java.Interop/JavaTypeParametersAttribute.cs @@ -1,26 +1,8 @@ using System; -#if NET using System.Runtime.CompilerServices; // PublicApiAnalyzers doesn't like TypeForwards #pragma warning disable RS0016 // Symbol is not part of the declared API [assembly: TypeForwardedTo (typeof (Java.Interop.JavaTypeParametersAttribute))] #pragma warning restore RS0016 // Symbol is not part of the declared API - -#else // !NET - -namespace Java.Interop -{ - public class JavaTypeParametersAttribute : Attribute - { - public JavaTypeParametersAttribute (string [] typeParameters) - { - TypeParameters = typeParameters; - } - - public string [] TypeParameters { get; set; } - } -} - -#endif // !NET diff --git a/src/Mono.Android/Java.Interop/TypeManager.cs b/src/Mono.Android/Java.Interop/TypeManager.cs index 637a1789e4e..3b900017db2 100644 --- a/src/Mono.Android/Java.Interop/TypeManager.cs +++ b/src/Mono.Android/Java.Interop/TypeManager.cs @@ -420,7 +420,6 @@ static void n_Activate (IntPtr jnienv, IntPtr jclass, IntPtr typename_ptr, IntPt TypeManager.n_Activate (jnienv, jclass, typename_ptr, signature_ptr, jobject, parameters_ptr); } -#if NETCOREAPP [UnmanagedCallersOnly] static void n_Activate_mm (IntPtr jnienv, IntPtr jclass, IntPtr typename_ptr, IntPtr signature_ptr, IntPtr jobject, IntPtr parameters_ptr) { @@ -431,7 +430,7 @@ static void n_Activate_mm (IntPtr jnienv, IntPtr jclass, IntPtr typename_ptr, In AndroidEnvironment.UnhandledException (ex); } } -#endif + internal static Delegate GetActivateHandler () { return TypeManager.GetActivateHandler (); diff --git a/src/Mono.Android/Properties/AssemblyInfo.cs.in b/src/Mono.Android/Properties/AssemblyInfo.cs.in index 61759dd9c6c..100a54ae5c6 100644 --- a/src/Mono.Android/Properties/AssemblyInfo.cs.in +++ b/src/Mono.Android/Properties/AssemblyInfo.cs.in @@ -22,10 +22,8 @@ using System.Runtime.Versioning; #if ANDROID_UNSTABLE [assembly: RequiresPreviewFeatures("This is an unstable Android API level. Opt into preview features by adding True to your project file.")] #endif -#if !MONOANDROID1_0 [assembly: TargetPlatform("Android@API_LEVEL@.0")] [assembly: SupportedOSPlatform("Android@MIN_API_LEVEL@.0")] -#endif // PublicApiAnalyzers doesn't like TypeForwards #pragma warning disable RS0016 // Symbol is not part of the declared API diff --git a/src/Mono.Android/Xamarin.Android.Net/AndroidHttpResponseMessage.cs b/src/Mono.Android/Xamarin.Android.Net/AndroidHttpResponseMessage.cs index 72e38a63100..7afa2db0f5f 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AndroidHttpResponseMessage.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AndroidHttpResponseMessage.cs @@ -6,13 +6,8 @@ namespace Xamarin.Android.Net { /// -#if MONOANDROID1_0 - /// A convenience wrapper around returned by - /// that allows easy access to authentication data as returned by the server, if any. -#else /// A convenience wrapper around returned by /// that allows easy access to authentication data as returned by the server, if any. -#endif /// public class AndroidHttpResponseMessage : HttpResponseMessage { @@ -20,21 +15,13 @@ public class AndroidHttpResponseMessage : HttpResponseMessage HttpURLConnection? httpConnection; /// -#if MONOANDROID1_0 - /// Set to the same value as . -#else /// Set to the same value as . -#endif /// /// The requested authentication. public IList ? RequestedAuthentication { get; internal set; } /// -#if MONOANDROID1_0 - /// Set to the same value as -#else /// Set to the same value as -#endif /// /// The request needs authorization. public bool RequestNeedsAuthorization { diff --git a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs index 6804db9ced1..44883640487 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs @@ -40,6 +40,7 @@ namespace Xamarin.Android.Net /// /// var httpClient = new HttpClient (handler); /// var response = httpClient.GetAsync ("http://example.com")?.Result as AndroidHttpResponseMessage; + /// /// /// The class supports pre-authentication of requests albeit in a slightly "manual" way. Namely, whenever a request to a server requiring authentication /// is made and no authentication credentials are provided in the property (which is usually the case on the first @@ -269,9 +270,7 @@ public int MaxAutomaticRedirections /// If true then the server requested authorization and the application must use information /// found in to set the value of /// -#if NETCOREAPP [MemberNotNullWhen(true, nameof(RequestedAuthentication))] -#endif public bool RequestNeedsAuthorization { get { return RequestedAuthentication?.Count > 0; } } @@ -309,7 +308,6 @@ public bool RequestNeedsAuthorization { /// public TimeSpan ReadTimeout { get; set; } = TimeSpan.FromHours (24); -#if !MONOANDROID1_0 /// /// A feature switch that determines whether the message handler should attempt to authenticate the user /// using the NTLM/Negotiate authentication method. Enable the feature by adding @@ -317,7 +315,6 @@ public bool RequestNeedsAuthorization { /// static bool NegotiateAuthenticationIsEnabled => AppContext.TryGetSwitch ("Xamarin.Android.Net.UseNegotiateAuthentication", out bool isEnabled) && isEnabled; -#endif /// /// @@ -388,16 +385,13 @@ string EncodeUrl (Uri url) /// Cancellation token. protected override Task SendAsync (HttpRequestMessage request, CancellationToken cancellationToken) { -#if !MONOANDROID1_0 if (NegotiateAuthenticationIsEnabled) { return SendWithNegotiateAuthenticationAsync (request, cancellationToken); } -#endif return DoSendAsync (request, cancellationToken); } -#if !MONOANDROID1_0 async Task SendWithNegotiateAuthenticationAsync (HttpRequestMessage request, CancellationToken cancellationToken) { var response = await DoSendAsync (request, cancellationToken).ConfigureAwait (false); @@ -410,7 +404,6 @@ string EncodeUrl (Uri url) return response; } -#endif internal async Task DoSendAsync (HttpRequestMessage request, CancellationToken cancellationToken) { @@ -750,13 +743,11 @@ Stream GetDecompressionWrapper (URLConnection httpConnection, Stream inputStream } else if (encodings.Contains (DEFLATE_ENCODING)) { supportedEncoding = DEFLATE_ENCODING; ret = new DeflateStream (inputStream, CompressionMode.Decompress); - } -#if NETCOREAPP - else if (encodings.Contains (BROTLI_ENCODING)) { + } else if (encodings.Contains (BROTLI_ENCODING)) { supportedEncoding = BROTLI_ENCODING; ret = new BrotliStream (inputStream, CompressionMode.Decompress); } -#endif + if (!String.IsNullOrEmpty (supportedEncoding)) { contentState.RemoveContentLengthHeader = true; @@ -1105,12 +1096,11 @@ void AppendEncoding (string encoding, ref List ? list) AppendEncoding (DEFLATE_ENCODING, ref accept_encoding); decompress_here = true; } -#if NETCOREAPP + if ((AutomaticDecompression & DecompressionMethods.Brotli) != 0) { AppendEncoding (BROTLI_ENCODING, ref accept_encoding); decompress_here = true; } -#endif } if (accept_encoding?.Count > 0) @@ -1159,15 +1149,6 @@ void SetupSSL (HttpsURLConnection? httpsConnection, HttpRequestMessage requestMe return; } -#if MONOANDROID1_0 - // Context: https://github.com/xamarin/xamarin-android/issues/1615 - int apiLevel = (int)Build.VERSION.SdkInt; - if (apiLevel >= 16 && apiLevel <= 20) { - httpsConnection.SSLSocketFactory = new OldAndroidSSLSocketFactory (); - return; - } -#endif - var keyStore = InitializeKeyStore (out bool gotCerts); keyStore = ConfigureKeyStore (keyStore); var kmf = ConfigureKeyManagerFactory (keyStore); diff --git a/src/Mono.Android/Xamarin.Android.Net/AuthModuleDigest.cs b/src/Mono.Android/Xamarin.Android.Net/AuthModuleDigest.cs index a226e3bdd99..7439297aed3 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AuthModuleDigest.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AuthModuleDigest.cs @@ -11,11 +11,7 @@ namespace Xamarin.Android.Net { sealed class AuthModuleDigest : IAndroidAuthenticationModule { -#if MONOANDROID1_0 - const string LOG_APP = AndroidClientHandler.LOG_APP + "-digest-auth"; -#else const string LOG_APP = AndroidMessageHandler.LOG_APP + "-digest-auth"; -#endif static readonly object cache_lock = new object (); static readonly Dictionary cache = new Dictionary (); diff --git a/src/Mono.Android/Xamarin.Android.Net/AuthenticationData.cs b/src/Mono.Android/Xamarin.Android.Net/AuthenticationData.cs index 15fa511e9a7..ca40df6575a 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AuthenticationData.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AuthenticationData.cs @@ -1,24 +1,14 @@ namespace Xamarin.Android.Net { /// -#if MONOANDROID1_0 - /// Contains all the information required to perform pre-authentication of HTTP requests. See . -#else /// Contains all the information required to perform pre-authentication of HTTP requests. See . -#endif /// public class AuthenticationData { /// -#if MONOANDROID1_0 - /// Gets the authentication scheme. If instance of AuthenticationData comes from the - /// collection it will have this property set to the type of authentication as requested by the server, or to AuthenticationScheme.Unsupported/>. - /// In the latter case the application is required to provide the authentication module in . -#else /// Gets the authentication scheme. If instance of AuthenticationData comes from the /// collection it will have this property set to the type of authentication as requested by the server, or to AuthenticationScheme.Unsupported/>. /// In the latter case the application is required to provide the authentication module in . -#endif /// /// The authentication scheme. public AuthenticationScheme Scheme { get; set; } = AuthenticationScheme.None; @@ -31,15 +21,9 @@ public class AuthenticationData public string? Challenge { get; internal set; } /// -#if MONOANDROID1_0 - /// Indicates whether authentication performed using data in this instance should be done for the end server or a proxy. If instance of - /// AuthenticationData comes from the collection it will have this property set to - /// true if authentication request came from a proxy, false otherwise. -#else /// Indicates whether authentication performed using data in this instance should be done for the end server or a proxy. If instance of /// AuthenticationData comes from the collection it will have this property set to /// true if authentication request came from a proxy, false otherwise. -#endif /// /// true to use proxy authentication. public bool UseProxyAuthentication { get; set; } diff --git a/src/Mono.Android/Xamarin.Android.Net/AuthenticationScheme.cs b/src/Mono.Android/Xamarin.Android.Net/AuthenticationScheme.cs index 78f78666724..28427da3ca9 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AuthenticationScheme.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AuthenticationScheme.cs @@ -1,11 +1,7 @@ namespace Xamarin.Android.Net { /// -#if MONOANDROID1_0 - /// Authentication schemes supported by -#else /// Authentication schemes supported by -#endif /// public enum AuthenticationScheme { @@ -15,11 +11,7 @@ public enum AuthenticationScheme None, /// -#if MONOANDROID1_0 - /// doesn't support this scheme, the application must provide its own value. See -#else /// doesn't support this scheme, the application must provide its own value. See -#endif /// Unsupported, diff --git a/src/Mono.Android/Xamarin.Android.Net/IAndroidAuthenticationModule.cs b/src/Mono.Android/Xamarin.Android.Net/IAndroidAuthenticationModule.cs index 6ed658d1d5c..4d7b5bf9a2e 100644 --- a/src/Mono.Android/Xamarin.Android.Net/IAndroidAuthenticationModule.cs +++ b/src/Mono.Android/Xamarin.Android.Net/IAndroidAuthenticationModule.cs @@ -5,22 +5,13 @@ namespace Xamarin.Android.Net { /// -#if MONOANDROID1_0 - /// Implement this interface in order to provide support for HTTP authentication scheme not supported by -#else /// Implement this interface in order to provide support for HTTP authentication scheme not supported by -#endif /// public interface IAndroidAuthenticationModule { /// -#if MONOANDROID1_0 - /// The authentication scheme supported by the implementation. Should be set to AuthenticationScheme.Unsupported for - /// schemes unsupported by natively. -#else /// The authentication scheme supported by the implementation. Should be set to AuthenticationScheme.Unsupported for /// schemes unsupported by natively. -#endif /// /// The scheme. AuthenticationScheme Scheme { get; } @@ -38,13 +29,8 @@ public interface IAndroidAuthenticationModule bool CanPreAuthenticate { get; } /// -#if MONOANDROID1_0 - /// Authenticate using the specified challenge, request and credentials. This is currently not used by - /// since the requests aren't restarted automatically, but it can be used in the future implementations of -#else /// Authenticate using the specified challenge, request and credentials. This is currently not used by /// since the requests aren't restarted automatically, but it can be used in the future implementations of -#endif /// /// instance which contains the value of the response header to authorize the connection /// Challenge. diff --git a/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/Bug36250.cs b/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/Bug36250.cs deleted file mode 100644 index 1e435d02a94..00000000000 --- a/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/Bug36250.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.IO; -using System.Text; -using System.Collections.Generic; -using System.Runtime.Serialization; - -namespace LinkTestLib -{ - // https://bugzilla.xamarin.com/show_bug.cgi?id=36250 - public class Bug36250 - { - // [Test] - public static string SerializeSearchRequestWithDictionary () - { - var req = new SearchRequest () { - Query = "query", - - Users = new List () { - "user_a", "user_b" - }, - - Filters = new List () { - "filter_a", "filter_b" - }, - - Parameters = new Dictionary () { - { "param_key_b", "param_value_a" }, - { "param_key_a", "param_value_b" }, - } - }; - - try { - using (MemoryStream memoryStream = new MemoryStream ()) { - var dataContractSerializer = new DataContractSerializer (typeof (SearchRequest)); - dataContractSerializer.WriteObject (memoryStream, req); - string serializedDataContract = Encoding.UTF8.GetString (memoryStream.ToArray (), 0, (int) memoryStream.Length); - return $"[PASS] SearchRequest successfully serialized: {serializedDataContract.Substring (0, 14)}"; - } - } catch (Exception ex) { - return $"[FAIL] SearchRequest serialization FAILED: {ex}"; - } - } - } - - [DataContract] - public class SearchRequest - { - [DataMember] - public string Query { get; set; } - [DataMember] - public List Users { get; set; } - [DataMember] - public List Filters { get; set; } - [DataMember] - public Dictionary Parameters { get; set; } - } -} diff --git a/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs b/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs index 44860c14466..2f26b0af776 100644 --- a/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs +++ b/tests/MSBuildDeviceIntegration/Resources/LinkDescTest/MainActivityReplacement.cs @@ -37,12 +37,8 @@ protected override void OnCreate(Bundle bundle) { var asm = typeof(Library1.SomeClass).Assembly; // TODO: ILLink removing .ctor: https://github.com/mono/linker/issues/1633 -#if NET Android.Util.Log.Info(TAG, $"[PASS] Able to use 'typeof({typeof(Library1.SomeClass)})'."); -#else - var o = Activator.CreateInstance(asm.GetType("Library1.SomeClass")); - Android.Util.Log.Info(TAG, $"[PASS] Able to create instance of '{o.GetType().Name}'."); -#endif + } catch (Exception ex) { @@ -126,9 +122,6 @@ protected override void OnCreate(Bundle bundle) Android.Util.Log.Info(TAG, LinkTestLib.Bug21578.MulticastOption_ShouldNotBeStripped()); Android.Util.Log.Info(TAG, LinkTestLib.Bug21578.MulticastOption_ShouldNotBeStripped2()); Android.Util.Log.Info(TAG, LinkTestLib.Bug35195.AttemptCreateTable()); -#if !NET - Android.Util.Log.Info(TAG, LinkTestLib.Bug36250.SerializeSearchRequestWithDictionary()); -#endif Android.Util.Log.Info(TAG, "All regression tests completed."); } } diff --git a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs index 170b1b7e52b..ea9f5da4c7c 100644 --- a/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs +++ b/tests/MSBuildDeviceIntegration/Tests/InstallAndRunTests.cs @@ -124,11 +124,7 @@ public void SubscribeToAppDomainUnhandledException () Assert.IsTrue (builder.Install (proj), "Install should have succeeded."); RunProjectAndAssert (proj, builder); -#if NETCOREAPP string expectedLogcatOutput = "# Unhandled Exception: sender=System.Object; e.IsTerminating=True; e.ExceptionObject=System.Exception: CRASH"; -#else // NETCOREAPP - string expectedLogcatOutput = "# Unhandled Exception: sender=RootDomain; e.IsTerminating=True; e.ExceptionObject=System.Exception: CRASH"; -#endif // NETCOREAPP Assert.IsTrue ( MonitorAdbLogcat (CreateLineChecker (expectedLogcatOutput), logcatFilePath: Path.Combine (Root, builder.ProjectDirectory, "startup-logcat.log"), timeout: 60), @@ -253,14 +249,6 @@ public class LinkModeFullClass { }, }; - if (!Builder.UseDotNet) { - // DataContractSerializer is not trimming safe - // https://github.com/dotnet/runtime/issues/45559 - lib2.Sources.Add (new BuildItem.Source ("Bug36250.cs") { - TextContent = () => getResource ("Bug36250") - }); - } - proj = new XamarinFormsAndroidApplicationProject () { IsRelease = true, AndroidLinkModeRelease = linkMode, @@ -396,41 +384,13 @@ void TestJsonDeserialization (Person p) Console.WriteLine ($""JSON Person deserialized OK""); } - void TestBinaryDeserialization (Person p) - { - var stream = new MemoryStream (); - var serializer = new BinaryFormatter(); - - serializer.Serialize (stream, p); - - stream.Position = 0; - StreamReader sr = new StreamReader (stream); - - stream.Position = 0; - serializer.Binder = new Person.Binder (); - Person p2 = (Person) serializer.Deserialize (stream); - - Console.WriteLine ($""BinaryFormatter deserialzied: Name '{p2.Name}' Age '{p2.Age}' Handle '0x{p2.Handle:X}'""); - - if (p2.Name != ""John Smith"") - throw new InvalidOperationException (""BinaryFormatter deserialization of Name""); - if (p2.Age != 900) - throw new InvalidOperationException (""BinaryFormatter deserialization of Age""); - if (p2.Handle == IntPtr.Zero) - throw new InvalidOperationException (""Failed to instantiate new Java instance for Person!""); - - Console.WriteLine ($""BinaryFormatter Person deserialized OK""); - } - void TestJsonDeserializationCreatesJavaHandle () { Person p = new Person () { Name = ""John Smith"", Age = 900, }; -#if !NET - TestBinaryDeserialization (p); -#endif + TestJsonDeserialization (p);").Replace ("//${AFTER_MAINACTIVITY}", @" [DataContract] [Serializable] diff --git a/tests/Mono.Android-Tests/Android.Runtime/AndroidEnvironmentTest.cs b/tests/Mono.Android-Tests/Android.Runtime/AndroidEnvironmentTest.cs index 47600ffdab6..76ff2e50b69 100644 --- a/tests/Mono.Android-Tests/Android.Runtime/AndroidEnvironmentTest.cs +++ b/tests/Mono.Android-Tests/Android.Runtime/AndroidEnvironmentTest.cs @@ -28,12 +28,10 @@ public void TearDown () [Test] [TestCase (null)] [TestCase ("Xamarin.Android.Net.AndroidHttpResponseMessage")] // does not extend HttpMessageHandler -#if NET // instantiating AndroidClientHandler or HttpClientHandler (or any other type extending HttpClientHandler) // would cause infinite recursion in the .NET build and so it is replaced with AndroidMessageHandler [TestCase ("System.Net.Http.HttpClientHandler, System.Net.Http")] [TestCase ("Xamarin.Android.Net.AndroidClientHandler")] -#endif public void GetHttpMessageHandler_FallbackToAndroidMessageHandler (string? typeName) { var handler = GetHttpMessageHandler (typeName); @@ -56,10 +54,6 @@ public void GetHttpMessageHandler_FallbackForInaccessibleTypes (string typeName) [Test] [TestCase ("Xamarin.Android.Net.AndroidMessageHandler")] [TestCase ("System.Net.Http.SocketsHttpHandler, System.Net.Http")] -#if !NET - [TestCase ("Xamarin.Android.Net.AndroidClientHandler")] - [TestCase ("System.Net.Http.HttpClientHandler, System.Net.Http")] -#endif public void GetHttpMessageHandler_OverridesDefaultValue (string typeName) { var handler = GetHttpMessageHandler (typeName); diff --git a/tests/Mono.Android-Tests/System.Net/SslTest.cs b/tests/Mono.Android-Tests/System.Net/SslTest.cs index 934435d52fb..ba104387632 100644 --- a/tests/Mono.Android-Tests/System.Net/SslTest.cs +++ b/tests/Mono.Android-Tests/System.Net/SslTest.cs @@ -71,11 +71,9 @@ public void SslWithinTasksShouldWork () [Test] public void HttpsShouldWork () { -#if NET6_0_OR_GREATER if (!OperatingSystem.IsAndroidVersionAtLeast (24)) { Assert.Ignore ("Not supported on API 23 and lower."); } -#endif // NET6_0_OR_GREATER RunIgnoringWebException (DoHttpsShouldWork); } @@ -117,11 +115,9 @@ void DoHttpsShouldWork () [Test (Description="Bug https://bugzilla.xamarin.com/show_bug.cgi?id=18962")] public void VerifyTrustedCertificates () { -#if NET6_0_OR_GREATER if (!OperatingSystem.IsAndroidVersionAtLeast (24)) { Assert.Ignore ("Not supported on API 23 and lower."); } -#endif // NET6_0_OR_GREATER Assert.DoesNotThrow (() => RunIgnoringWebException (DoVerifyTrustedCertificates), "Certificate validation"); } diff --git a/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs b/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs index c462fc4ed20..96f66778ef3 100644 --- a/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs +++ b/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs @@ -36,7 +36,6 @@ protected override HttpMessageHandler CreateHandler () }, }; -#if NET [Test] [TestCaseSource (nameof (DecompressionSource))] // Disabled because it doesn't exist in NUnitLite, uncomment when/if we switch to full NUnit @@ -98,7 +97,6 @@ async Task DoDecompression (string urlPath, string encoding, string jsonFi return true; } -#endif [Test] public async Task ServerCertificateCustomValidationCallback_ApproveRequest () @@ -219,14 +217,10 @@ private async Task AssertRejectsRemoteCertificate (Func makeRequest) await makeRequest(); Assert.Fail ("The request wasn't rejected"); } -#if NET // While technically we should be throwing only HttpRequestException (as per HttpClient.SendAsync docs), in reality // we need to consider legacy code that migrated to .NET and may still expect WebException. Thus, we throw both // of these and we need to catch both here catch (System.Net.WebException) {} -#else - catch (Java.IO.IOException) {} -#endif catch (System.Net.Http.HttpRequestException) {} } } From caf19b093eb2713ba74b4c3fd33c15054a8d0459 Mon Sep 17 00:00:00 2001 From: Jonathan Peppers Date: Tue, 13 Feb 2024 03:24:41 -0600 Subject: [PATCH 89/92] [Xamarin.Android.Build.Tasks] remove `$(AndroidSupportedAbis)` from `build.props` (#8717) Fixes: https://developercommunity.visualstudio.com/t/Visual-Studio-2022-Community-1785-ver/10577484 Related: https://github.com/xamarin/xamarin-android/issues/8662 I found the following build performance issue using a .NET Android project template inside VS Windows: 1. Create a new .NET Android project 2. Open some `AndroidResource` `.xml` file in the Android designer 3. *Every* incremental build appears to rebuild everything! `obj\Debug\net8.0-android\build.props` appears to be changing between builds with the change: ```diff --androidsupportedabis=armeabi-v7a;arm64-v8a;x86;x86_64 ++androidsupportedabis=arm64-v8a ``` I narrowed this down to the designer running two targets, `PrepareResources;_GenerateCompileInputs`: https://github.com/xamarin/UITools/blob/7b167eae94ae018ab19344d6bfb45a925415e2a7/src/Xamarin.Designer.Android/Xamarin.AndroidDesigner/MSBuildConstants.cs#L32 In this example: * The designer does *not* mark the build as a "design-time build" with `-p:DesignTimeBuild=true`. This would have used a design-time `build.props`. * The designer does *not* pass in the selected Android device. This code is *ancient*, so I suspect this has just always been an issue? Perhaps, it only occurs in .NET 6+ projects and not Xamarin.Android? Because `$(AndroidSupportedAbis)` is not a "supported" thing in .NET 6+, let's just remove it? Removing `$(AndroidSupportedAbis)` from this file manually does fix the problem for me locally: C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\34.0.52\tools\Xamarin.Android.Common.targets There is also a *second* `adb.props` file that triggers a subset of things to rebuild if the selected Android device changes: <_PropertyCacheItems Include="_NuGetAssetsTimestamp=$(_NuGetAssetsTimestamp)" /> <_PropertyCacheItems Include="TypeMapKind=$(_TypeMapKind)" /> - <_PropertyCacheItems Include="AndroidSupportedAbis=$(AndroidSupportedAbis)" /> <_PropertyCacheItems Include="AndroidManifestPlaceholders=$(AndroidManifestPlaceholders)" /> <_PropertyCacheItems Include="ProjectFullPath=$(MSBuildProjectFullPath)" /> <_PropertyCacheItems Include="AndroidUseDesignerAssembly=$(AndroidUseDesignerAssembly)" /> From 21ea1d070060fdecb105145fe8d543216c688b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Rozs=C3=ADval?= Date: Tue, 27 Feb 2024 11:33:34 +0100 Subject: [PATCH 90/92] [Mono.Android] Do not dispose request content stream in AndroidMessageHandler (#8764) Fixes: https://github.com/xamarin/xamarin-android/issues/2901 Fixes: https://github.com/xamarin/xamarin-android/issues/4476 Fixes: https://github.com/xamarin/xamarin-android/issues/7086 Neither the `SocketsHttpHandler` nor the `iOS/macOS` `NSUrlSessionHandler` dispose the content stream, let's follow suit. --- .../AndroidMessageHandler.cs | 47 +++++++++---------- .../AndroidMessageHandlerTests.cs | 25 ++++++++++ 2 files changed, 48 insertions(+), 24 deletions(-) diff --git a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs index 44883640487..26645e6fdcb 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs @@ -536,30 +536,29 @@ protected virtual async Task WriteRequestContentToOutput (HttpRequestMessage req if (request.Content is null) return; - using (var stream = await request.Content.ReadAsStreamAsync ().ConfigureAwait (false)) { - await stream.CopyToAsync(httpConnection.OutputStream!, 4096, cancellationToken).ConfigureAwait(false); - - // - // Rewind the stream to beginning in case the HttpContent implementation - // will be accessed again (e.g. after redirect) and it keeps its stream - // open behind the scenes instead of recreating it on the next call to - // ReadAsStreamAsync. If we don't rewind it, the ReadAsStreamAsync - // call above will throw an exception as we'd be attempting to read an - // already "closed" stream (that is one whose Position is set to its - // end). - // - // This is not a perfect solution since the HttpContent may do weird - // things in its implementation, but it's better than copying the - // content into a buffer since we have no way of knowing how the data is - // read or generated and also we don't want to keep potentially large - // amounts of data in memory (which would happen if we read the content - // into a byte[] buffer and kept it cached for re-use on redirect). - // - // See https://bugzilla.xamarin.com/show_bug.cgi?id=55477 - // - if (stream.CanSeek) - stream.Seek (0, SeekOrigin.Begin); - } + var stream = await request.Content.ReadAsStreamAsync ().ConfigureAwait (false); + await stream.CopyToAsync(httpConnection.OutputStream!, 4096, cancellationToken).ConfigureAwait(false); + + // + // Rewind the stream to beginning in case the HttpContent implementation + // will be accessed again (e.g. after redirect) and it keeps its stream + // open behind the scenes instead of recreating it on the next call to + // ReadAsStreamAsync. If we don't rewind it, the ReadAsStreamAsync + // call above will throw an exception as we'd be attempting to read an + // already "closed" stream (that is one whose Position is set to its + // end). + // + // This is not a perfect solution since the HttpContent may do weird + // things in its implementation, but it's better than copying the + // content into a buffer since we have no way of knowing how the data is + // read or generated and also we don't want to keep potentially large + // amounts of data in memory (which would happen if we read the content + // into a byte[] buffer and kept it cached for re-use on redirect). + // + // See https://bugzilla.xamarin.com/show_bug.cgi?id=55477 + // + if (stream.CanSeek) + stream.Seek (0, SeekOrigin.Begin); } internal Task WriteRequestContentToOutputInternal (HttpRequestMessage request, HttpURLConnection httpConnection, CancellationToken cancellationToken) diff --git a/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs b/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs index 96f66778ef3..b71ee2893da 100644 --- a/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs +++ b/tests/Mono.Android-Tests/Xamarin.Android.Net/AndroidMessageHandlerTests.cs @@ -98,6 +98,31 @@ async Task DoDecompression (string urlPath, string encoding, string jsonFi return true; } + [Test] + public async Task DoesNotDisposeContentStream() + { + using var listener = new HttpListener (); + listener.Prefixes.Add ("http://+:47663/"); + listener.Start (); + listener.BeginGetContext (ar => { + var ctx = listener.EndGetContext (ar); + ctx.Response.StatusCode = 204; + ctx.Response.ContentLength64 = 0; + ctx.Response.Close (); + }, null); + + var jsonContent = new StringContent ("hello"); + var request = new HttpRequestMessage (HttpMethod.Post, "http://localhost:47663/") { Content = jsonContent }; + + var response = await new HttpClient (new AndroidMessageHandler ()).SendAsync (request); + Assert.True (response.IsSuccessStatusCode); + + var contentValue = await jsonContent.ReadAsStringAsync (); + Assert.AreEqual ("hello", contentValue); + + listener.Close (); + } + [Test] public async Task ServerCertificateCustomValidationCallback_ApproveRequest () { From 5c04944e08aa2daf603407317330134e825cd361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Rozs=C3=ADval?= Date: Tue, 5 Mar 2024 14:07:01 +0100 Subject: [PATCH 91/92] [Mono.Android] Fix race condition in AndroidMessageHandler (#8753) Fixes: https://github.com/xamarin/xamarin-android/issues/8740 There is a race condition in `AndroidMessageHandler` (see https://github.com/xamarin/xamarin-android/issues/8740#issuecomment-1960331579 for more information). The solution is fairly simple: we should determine the decompression strategy only during the setup, when `AutomaticDecompression` is set. We don't need to do any more work during the request. To prevent changing the decompression strategy while there are requests mid-flight, the setter will only accept values until the first request is sent. This is exactly what the `SocketsHttpHandler` does. I didn't want to touch any code unrelated to the race condition in this PR so if we want to prevent other properties from being mutated while HTTP requests are being sent, we should do it in a follow-up PR. --- .../AndroidMessageHandler.cs | 74 ++++++++++--------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs index 26645e6fdcb..e5218687ae7 100644 --- a/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs +++ b/src/Mono.Android/Xamarin.Android.Net/AndroidMessageHandler.cs @@ -138,12 +138,14 @@ public void Reset () DecompressionMethods _decompressionMethods; bool disposed; + bool started; // Now all hail Java developers! Get this... HttpURLClient defaults to accepting AND // uncompressing the gzip content encoding UNLESS you set the Accept-Encoding header to ANY // value. So if we set it to 'gzip' below we WILL get gzipped stream but HttpURLClient will NOT // uncompress it any longer, doh. And they don't support 'deflate' so we need to handle it ourselves. - bool decompress_here; + bool decompress_here => _acceptEncoding is not null && _acceptEncoding != IDENTITY_ENCODING; + string? _acceptEncoding; public bool SupportsAutomaticDecompression => true; public bool SupportsProxy => true; @@ -152,7 +154,29 @@ public void Reset () public DecompressionMethods AutomaticDecompression { get => _decompressionMethods; - set => _decompressionMethods = value; + set + { + CheckDisposedOrStarted (); + + _decompressionMethods = value; + _acceptEncoding = null; + + if (value == DecompressionMethods.None) { + _acceptEncoding = IDENTITY_ENCODING; + } else { + if ((value & DecompressionMethods.GZip) != 0) { + _acceptEncoding = GZIP_ENCODING; + } + + if ((value & DecompressionMethods.Deflate) != 0) { + _acceptEncoding = _acceptEncoding is null ? DEFLATE_ENCODING : $"{_acceptEncoding}, {DEFLATE_ENCODING}"; + } + + if ((value & DecompressionMethods.Brotli) != 0) { + _acceptEncoding = _acceptEncoding is null ? BROTLI_ENCODING : $"{_acceptEncoding}, {BROTLI_ENCODING}"; + } + } + } } public CookieContainer CookieContainer @@ -334,7 +358,7 @@ public bool RequestNeedsAuthorization { protected override void Dispose (bool disposing) { - disposed = true; + disposed = true; base.Dispose (disposing); } @@ -346,6 +370,14 @@ protected void AssertSelf () throw new ObjectDisposedException (nameof (AndroidMessageHandler)); } + void CheckDisposedOrStarted () + { + AssertSelf (); + if (started) { + throw new InvalidOperationException ("The handler has already started sending requests"); + } + } + string EncodeUrl (Uri url) { if (url == null) @@ -407,6 +439,7 @@ string EncodeUrl (Uri url) internal async Task DoSendAsync (HttpRequestMessage request, CancellationToken cancellationToken) { + started = true; AssertSelf (); if (request == null) throw new ArgumentNullException (nameof (request)); @@ -1050,15 +1083,6 @@ internal Task SetupRequestInternal (HttpRequestMessage request, HttpURLConnectio internal TrustManagerFactory? ConfigureTrustManagerFactoryInternal (KeyStore? keyStore) => ConfigureTrustManagerFactory (keyStore); - void AppendEncoding (string encoding, ref List ? list) - { - if (list == null) - list = new List (); - if (list.Contains (encoding)) - return; - list.Add (encoding); - } - async Task SetupRequestInternal (HttpRequestMessage request, URLConnection conn) { if (conn == null) @@ -1080,30 +1104,8 @@ void AppendEncoding (string encoding, ref List ? list) AddHeaders (httpConnection, request.Content.Headers); AddHeaders (httpConnection, request.Headers); - List ? accept_encoding = null; - - decompress_here = false; - if (AutomaticDecompression == DecompressionMethods.None) { - AppendEncoding (IDENTITY_ENCODING, ref accept_encoding); // Turns off compression for the Java client - } else { - if ((AutomaticDecompression & DecompressionMethods.GZip) != 0) { - AppendEncoding (GZIP_ENCODING, ref accept_encoding); - decompress_here = true; - } - - if ((AutomaticDecompression & DecompressionMethods.Deflate) != 0) { - AppendEncoding (DEFLATE_ENCODING, ref accept_encoding); - decompress_here = true; - } - - if ((AutomaticDecompression & DecompressionMethods.Brotli) != 0) { - AppendEncoding (BROTLI_ENCODING, ref accept_encoding); - decompress_here = true; - } - } - - if (accept_encoding?.Count > 0) - httpConnection.SetRequestProperty ("Accept-Encoding", String.Join (",", accept_encoding)); + if (_acceptEncoding is not null) + httpConnection.SetRequestProperty ("Accept-Encoding", _acceptEncoding); if (UseCookies && CookieContainer != null && request.RequestUri is not null) { string cookieHeaderValue = CookieContainer.GetCookieHeader (request.RequestUri); From f64dd7b55c128083231cf3e22a253cd976e7f368 Mon Sep 17 00:00:00 2001 From: Marek Habersack Date: Wed, 20 Mar 2024 18:37:29 +0100 Subject: [PATCH 92/92] [NET8] Fix assembly count when satellite assemblies are present Context: https://github.com/xamarin/xamarin-android/pull/8790 The old method of satellite assembly counting relied on the `RelativePath` MSBuild item metadata, which appears to have gone missing somewhere in .NET8+. Update the code to check for presence of the following metadata, in order given, to determine assembly's culture, if any: * `Culture` * `RelativePath` * `DestinationSubDirectory` Failure to count satellite assemblies can, and sometimes will, result in a segfault since we generate a number of native code arrays based on the assembly count and the runtime assumes that what the build told it is true. --- .../Tasks/GeneratePackageManagerJava.cs | 13 ++++++-- .../Utilities/MonoAndroidHelper.cs | 32 +++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs b/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs index 670fcfe566e..b5d86f9427e 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/GeneratePackageManagerJava.cs @@ -262,9 +262,16 @@ void AddEnvironment () HashSet archAssemblyNames = null; HashSet uniqueAssemblyNames = new HashSet (StringComparer.OrdinalIgnoreCase); Action updateAssemblyCount = (ITaskItem assembly) => { - // We need to use the 'RelativePath' metadata, if found, because it will give us the correct path for satellite assemblies - with the culture in the path. - string? relativePath = assembly.GetMetadata ("RelativePath"); - string assemblyName = String.IsNullOrEmpty (relativePath) ? Path.GetFileName (assembly.ItemSpec) : relativePath; + string? culture = MonoAndroidHelper.GetAssemblyCulture (assembly); + string fileName = Path.GetFileName (assembly.ItemSpec); + tring assemblyName; + + if (String.IsNullOrEmpty (culture)) { + assemblyName = fileName; + } else { + assemblyName = $"{culture}/{fileName}"; + } + if (!uniqueAssemblyNames.Contains (assemblyName)) { uniqueAssemblyNames.Add (assemblyName); } diff --git a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs index 4efceda5141..fda719dd7a1 100644 --- a/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs +++ b/src/Xamarin.Android.Build.Tasks/Utilities/MonoAndroidHelper.cs @@ -643,5 +643,37 @@ public static string GetNativeLibsRootDirectoryPath (string androidBinUtilsDirec string relPath = GetToolsRootDirectoryRelativePath (androidBinUtilsDirectory); return Path.GetFullPath (Path.Combine (androidBinUtilsDirectory, relPath, "lib")); } + + public static string? GetAssemblyCulture (ITaskItem assembly) + { + // The best option + string? culture = assembly.GetMetadata ("Culture"); + if (!String.IsNullOrEmpty (culture)) { + return TrimSlashes (culture); + } + + // ...slightly worse + culture = assembly.GetMetadata ("RelativePath"); + if (!String.IsNullOrEmpty (culture)) { + return TrimSlashes (Path.GetDirectoryName (culture)); + } + + // ...not ideal + culture = assembly.GetMetadata ("DestinationSubDirectory"); + if (!String.IsNullOrEmpty (culture)) { + return TrimSlashes (culture); + } + + return null; + + string? TrimSlashes (string? s) + { + if (String.IsNullOrEmpty (s)) { + return null; + } + + return s.TrimEnd ('/').TrimEnd ('\\'); + } + } } }