If you’re new to Windows on Snapdragon®, have a look at Microsoft’s extensive documentation for developers, starting with Windows on Arm apps and experiences.
When users install your app from the Microsoft Store to a Windows on Snapdragon device, the Arm/Arm64 version will be installed automatically, if it is available. That delivers high performance and efficiency for your users and it simplifies the distribution of application installers for you.
Developing and Porting to Arm
Many consumer applications and commercial solutions are compiled for Arm and run natively on Windows on Snapdragon.
- Compiling desktop applications for Arm64. Emulation for x86 64-bit apps, starting with Windows on Arm build 21277, suffices for many applications to run seamlessly. Still, compiling your applications for Arm/Arm64 ensures that your users will enjoy native performance.
- Compiling UWP apps for AArch64 (64-bit Arm). x86 32-bit apps can run in emulation on Windows on Snapdragon, with little or no modification. That includes both classic desktop apps and Universal Windows Platform (UWP) apps. For best performance, add a package to compile your app for Arm64 using app package architectures and Visual Studio 15.9 or later. x86 32-bit apps can run in emulation on Windows on Snapdragon, with little or no modification. That includes both classic desktop apps and Universal Windows Platform (UWP) apps. For best performance, add a package to compile your app for Arm64 using app package architectures and Visual Studio 15.9 or later.
- Using Arm64EC (Emulation Compatible). Take advantage of Arm64EC to bring your app up to native speed on Arm gradually, even if you have dependencies or plugins that don’t support Arm yet. Arm64EC is included in the Windows SDK.
- Compiling drivers for AArch64. x86 kernel-mode drivers and user-mode Driver Framework (UMDF) cannot be emulated. You must compile them for AArch64, following the steps in Building Arm64 Drivers with the WDK.
- Using the Visual C++ Redistributable package. The package installs run-time components of Visual C++ libraries. It is currently available for x64, Arm64 and x86 architectures.
- Always On, Always Connected. Additional development is rarely required to take advantage of Always On, Always Connected capabilities in Windows on Snapdragon devices. For example, desktop applications are paused when the system is in modern standby and resume working normally once the system returns to active state. UWP store apps can utilize background tasks to perform some activities during modern standby. For more details, see Integrating apps with modern standby and Modern (connected) standby modes for Windows on Snapdragon Platforms.
- Balancing performance and power consumption. For details on designing energy-efficient applications with high performance, see Best Practices for Energy Efficiency.
- Setting process information. Windows on Snapdragon combines high-performance cores and power-saving cores. The OS scheduler is designed to take advantage of this without intervention from application developers. However, you can expressly mark the thread and memory priority of low-priority activities. You can also use the SetProcessInformation function (processthreadsapi.h) API.
Debugging and Troubleshooting
In most cases, you use Visual Studio or WinDbg to debug applications and drivers on Windows on Snapdragon, as you would debug any other Windows module.
- Debugging on Arm64. Debug Arm64 code with WinDbg. The debugging experience is comparable to using x86 WinDbg on x86 Windows.
- Working on computers without Visual Studio. With Remote Tools for Visual Studio 2022 you can remotely deploy, debug, test and profile on computers that do not have Visual Studio installed. (Use of this tool requires a valid Visual Studio license.)
- Troubleshooting with Sysinternals Suite. Use the selected utilities in the Sysinternals Suite for Arm64 to help you manage, troubleshoot and diagnose your Windows systems and applications.
- Debugging emulation issues. When emulated x86 32-bit apps are not running properly on Windows on Snapdragon, consult Microsoft’s documentation on troubleshooting x86 desktop apps. For example, apps that disable dynamic code generation will not run properly. If your app tries to hook Windows components or load their DLLs into Windows processes, you will need to recompile those DLLs to match the system architecture (AArch64). A related resource is the Program Compatibility Troubleshooter on ARM.
- Troubleshooting UWP apps. If your Arm32 or AArch64 UWP app isn't working correctly on Arm, consult Troubleshooting Arm UWP apps.
- Reporting issues. For problems like repeated crashes during development, collect a complete crash dump — usually stored as C:\Windows\memory.dmp.
Snapdragon is a product of Qualcomm Technologies, Inc., and/or its subsidiaries.