Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[One .NET] specify all RIDs by default
Fixes: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1413756 Fixes: #6353 The API 31 emulator no longer has 32-bit images and the x86_64 image has dropped support for 32-bit architectures: > adb shell getprop | grep cpu [ro.product.cpu.abi]: [x86_64] [ro.product.cpu.abilist]: [x86_64,arm64-v8a] [ro.product.cpu.abilist32]: [] [ro.product.cpu.abilist64]: [x86_64,arm64-v8a] Compared to an API 30 x86_64 emulator: > adb shell getprop | grep cpu [ro.product.cpu.abi]: [x86_64] [ro.product.cpu.abilist]: [x86_64,x86,arm64-v8a,armeabi-v7a,armeabi] [ro.product.cpu.abilist32]: [x86,armeabi-v7a,armeabi] [ro.product.cpu.abilist64]: [x86_64,arm64-v8a] The problem is our default RIDs are: <RuntimeIdentifiers Condition=" '$(RuntimeIdentifier)' == '' And '$(RuntimeIdentifiers)' == '' ">android-arm64;android-x86</RuntimeIdentifiers> And so you hit this error when trying to deploy a `dotnet new android` app on an API 31 x86_64 emulator: error ADB0020: Mono.AndroidTools.IncompatibleCpuAbiExceptiopn: The package does not support the CPU architecture of this device. To workaround this, you can add `android-x64` to your list of `$(RuntimeIdentifiers)`. To solve this issue, we can default `$(RuntimeIdentifiers)` to all 4 architectures. We have code that will select a single architecture for Debug builds using "Fast Deployment". It seems better to have a default here that will always work, and the only drawback would be the additional architectures for Release builds. After this change, I discovered an issue introduced in 33a6d1e: ILLink error IL1012: IL Linker has encountered an unexpected error. Please report the issue at https://github.com/mono/linker/issues [C:\a\_work\1\s\bin\TestRelease\temp\BuildProguard Enabled Project(1)Trued8r8\UnnamedProject.csproj] ... Unhandled exception. System.IO.IOException: The process cannot access the file 'C:\a\_work\1\s\bin\TestRelease\temp\BuildProguard Enabled Project(1)Trued8r8\obj\Release\proguard\proguard_project_references.cfg' because it is being used by another process. When we build each RID in parallel, each inner build was attempting to write to the same file. I changed the path for this file to be: $(IntermediateOutputPath)%(_RIDs.Identity)\proguard\proguard_project_references.cfg And then set `$(_ProguardProjectConfiguration)` appropriately after the inner builds complete. This also needs to actually be a file path, I don't see how the value was working before: <_ProguardProjectConfiguration Condition=" '$(AndroidLinkTool)' != '' ">;_ProguardProjectConfiguration=$(IntermediateOutputPath)proguard\proguard_project_references.cfg</_ProguardProjectConfiguration>
- Loading branch information