-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Expand test coverage for native AOT on android #121217
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
- Expand native AOT smoke tests to all libraries tests - Add job for runtime smoke tests using native AOT on emulator
Move NDK compiler logic to a shared props file and import it in test and build projects to unify Android NativeAOT and Mono builds.
- Set ASSETS_DIR for crypto tests (using same pattern as existing crypto test) - Set AppContext.BaseDirectory We should probably change crypto tests to use just AppContext.BaseDirectory.
- Use ReferenceXUnitWrapperGenerator != false to define SINGLE_FILE_TEST_RUNNER (android & singlefile targets) instead of IsFunctionalTest - Condition SingleFileTestRunner compile and TrimmerRootAssembly (TestUtilities) on wrapper/generator and SkipTestUtilitiesReference - Add Android NativeAOT publish/trim settings and set NativeLib/CustomNativeMain for android nativeaot - Make DisableImplicitFrameworkReferences respect preexisting value and add explicit DisableImplicitFrameworkReferences=false in nativeaot tests dir - Import testing\tests.targets when TargetsAndroid is true - Update many NativeAOT smoke tests Main signatures to public static int Main(string[] args) to match runner invocation
- Ensure they have Main entry point - Tighten MSBuild conditions: - Only set NativeLib/CustomNativeMain for Android when OutputType == Exe - Only import testing/tests.targets for Android when using MicrosoftNETSdk and building executables - Make TestNativeAOT/UseNativeAOTRuntime defaults apply when TestBuildMode == nativeaot and only include monodroid-nativeaot.cs for executable/XUnit-wrapper cases
This reverts commit 4ed06ec.
- Avoid importing logic for SharedLibrary - Fix library filename - Set HasMergedInTests to ensure projects build
This reverts commit 37b7b4e.
This import is now covered by the IsMergedTestRunnerAssembly property. Fixes a warning about a double import. Fixes issue where mono runtime tests are getting incorrect assembly name due to this undesired import.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds support for running NativeAOT tests on Android by implementing the necessary infrastructure changes. The changes enable Android NativeAOT tests to build, package as APKs, and run on Android devices/emulators through Helix.
Key Changes
- Adds Android-specific build configuration for NativeAOT tests
- Implements custom entry point handling for NativeAOT on Android via
monodroid-nativeaot.cstemplate - Configures CI/CD pipelines to build and run NativeAOT tests on Android
- Excludes several tests that are incompatible with Android NativeAOT
Reviewed Changes
Copilot reviewed 26 out of 27 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| src/tests/nativeaot/Directory.Build.props | Adds Android-specific build properties including library import generator settings and test runner configuration |
| src/tests/Directory.Build.props | Enables aggressive trimming for Android NativeAOT, similar to iOS/tvOS |
| src/tests/Directory.Build.targets | Adds logic to skip OutputType inference and handle DisableImplicitFrameworkReferences for Android NativeAOT |
| src/tests/build.proj | Imports Android NDK compiler properties and adds RuntimeFlavor resolution for Android builds |
| src/tests/Common/mergedrunner*.targets | Adds ExpectedExitCode file generation and conditions for mobile targets |
| src/tests/Common/helixpublishwitharcade.proj | Reads ExpectedExitCode from file for Android test payloads |
| src/tasks/AndroidAppBuilder/Templates/monodroid-nativeaot.cs | Implements entry point execution via __managed__Main for Android NativeAOT tests |
| eng/testing/Android/AndroidNdkCompiler.props | New file that centralizes Android NDK compiler/linker path configuration |
| src/mono/msbuild/android/build/AndroidBuild.props | Imports centralized AndroidNdkCompiler.props instead of defining CppCompilerAndLinker locally |
| eng/testing/tests.*.targets | Updates conditions to use ReferenceXUnitWrapperGenerator and adds NativeAOT-specific properties for Android |
| eng/pipelines/extra-platforms/*.yml | Adds new Android NativeAOT CI jobs and removes /p:RunSmokeTestsOnly=true |
| eng/pipelines/common/platform-matrix.yml | Parameterizes runtimeFlavor for Android platforms |
| src/tests/nativeaot/SmokeTests/*/?.csproj | Marks several smoke tests as unsupported on Android with explanatory comments |
| src/tests/issues.targets | Excludes nativeaot/SmokeTests/UnitTests from Android NativeAOT |
| src/libraries/tests.proj | Excludes multiple library test projects that fail on Android NativeAOT |
| src/libraries//tests/.cs | Adds ActiveIssue attributes for tests that fail on Android NativeAOT |
| src/libraries/Microsoft.Extensions.Hosting/tests/UnitTests/HostApplicationBuilderTests.cs | Removes trailing whitespace |
- Clean up ReferenceXUnitWrapperGenerator condition - Disable tests for android via runtime check - Disable unsupported ISA tests - Add comment for disabled SharedLibrary test
|
/azp run runtime-androidemulator |
|
/azp run runtime-android |
|
Azure Pipelines successfully started running 1 pipeline(s). |
1 similar comment
|
Azure Pipelines successfully started running 1 pipeline(s). |
And fix resulting duplicate imports due to build.proj getting these settings.
|
/azp run runtime-androidemulator |
|
/azp run runtime-android |
|
Azure Pipelines successfully started running 1 pipeline(s). |
1 similar comment
|
Azure Pipelines successfully started running 1 pipeline(s). |
Fixes #120715