Udostępnij przez


Dodaj obsługę Arm do aplikacji systemu Windows

Urządzenia oparte na ARM stają się coraz bardziej popularne ze względu na ich charakter oszczędzający energię, dłuższy czas pracy baterii i imponującą moc obliczeniową. System Windows on Arm obsługuje jednostki przetwarzania neuronowego (NPU) dostosowane do coraz bardziej popularnych obciążeń sztucznej inteligencji i uczenia maszynowego.

W tym przewodniku opisano kroki dodawania obsługi do aplikacji systemu Windows dla urządzeń obsługiwanych przez procesory Arm64. Zawiera również wskazówki dotyczące sposobów rozwiązywania potencjalnych problemów lub blokad, takich jak zależności lub wtyczki innych firm, które mogą zakłócać tworzenie wersji aplikacji opartej na usłudze Arm64.

Emulacja na urządzeniach opartych na architekturze Arm dla aplikacji systemu Windows x86 lub x64

Wersje arm systemu Windows 10 obejmują technologię emulacji, która umożliwia uruchamianie istniejących niezmodyfikowanych aplikacji x86 na urządzeniach arm. System Windows 11 rozszerza emulację w celu uruchamiania niezmodyfikowanych aplikacji x64 systemu Windows na urządzeniach z systemem Arm.

Chociaż możliwość emulowania x64 i x86 na urządzeniach Arm jest doskonałym krokiem naprzód, ten przewodnik ułatwia dodanie natywnej obsługi Arm, dzięki czemu aplikacja może korzystać z zalet wydajnościowych i unikalnych cech urządzeń z obsługą Arm64, w tym:

  • Optymalizacja zużycia energii przez aplikację w celu wydłużenia czasu pracy baterii urządzenia.
  • Optymalizacja wydajności procesora CPU, procesora GPU i jednostek NPU w celu przyspieszenia przepływów pracy, szczególnie podczas pracy ze sztuczną inteligencją.

Ponadto sterowniki jądra należy skompilować jako natywny arm64. Jądro nie zawiera emulacji. To ograniczenie dotyczy głównie scenariuszy wirtualizacji. W przypadku aplikacji korzystających z sterowników urządzeń wymagających bezpośredniego dostępu do wewnętrznych systemów operacyjnych lub sprzętu działającego w trybie jądra, a nie w trybie użytkownika i które nie zostały jeszcze zaktualizowane do obsługi procesorów Arm64, zobacz Building Arm64 Drivers with the WDK (Tworzenie sterowników arm64 za pomocą zestawu WDK).

Uwaga / Notatka

Progresywne aplikacje internetowe (PWA) są już wykonywane z natywną wydajnością Arm64.

Wymagania wstępne

Jeśli aktualizujesz aplikację przy użyciu urządzenia opartego na usłudze Arm (kompilacja natywna — generowanie kodu dla tej samej platformy, na której działasz), możesz użyć:

  • Wprowadzenie do programu Visual Studio 17.10 — wersja zapoznawcza 1 (luty 2024 r.)

  • Visual Studio 2022 w wersji 17.4 lub nowszej. Jest to pierwsza wersja ogólnodostępna programu Visual Studio, która natywnie obsługuje tworzenie i debugowanie aplikacji Arm64 na procesorach opartych na architekturze Arm. Zarówno natywne wersje Arm64 programu Visual Studio 2022 17.4, jak i Microsoft Visual C++ (MSVC) zapewniają znacznie lepszą wydajność w porównaniu z poprzednimi wersjami emulowanymi.

  • (Opcjonalnie) LLVM (Clang) v12+ lub nowsza wersja. LlVM 12 dodaje oficjalną wersję binarną hostowaną w systemie Windows w systemie Arm64, w tym kompilator Clang, llD Linker i biblioteki środowiska uruchomieniowego compiler-rt.

Jeśli aktualizujesz aplikację systemu Windows w celu obsługi usługi Arm przy użyciu urządzenia opartego na procesorze x64 lub x86 Intel (kompilowanie krzyżowe), możesz użyć:

Podczas wybierania między kompilacją krzyżową lub kompilacją natywną należy wziąć pod uwagę kilka czynników, takich jak dostępny sprzęt i prostota wykonywania testu.

Uwaga / Notatka

Obsługa GCC, czyli Kolekcji Kompilatora GNU, jest planowana na najbliższą przyszłość.

Procedura dodawania natywnej obsługi arm64

Aby zaktualizować aplikację tak, aby uruchamiała się natywnie na urządzeniach Arm64:

  1. Dodawanie konfiguracji arm64 do projektu w programie Visual Studio
  2. testowanie i debugowanie nowo utworzonej aplikacji Arm64
  3. Buduj i testuj swoją aplikację na urządzeniach Arm

Po potwierdzeniu, że aplikacja jest zoptymalizowana pod kątem urządzeń arm:

  1. Zaktualizuj instalator i opublikuj zaktualizowaną aplikację
  2. Planowanie bieżących aktualizacji

Krok 1. Dodawanie konfiguracji arm64 do projektu w programie Visual Studio

Aby dodać nową platformę rozwiązania ARM64 z miejscami docelowymi debugowania i wydania do istniejącego projektu aplikacji x64 lub x86:

  1. Otwórz rozwiązanie (kod projektu) w programie Visual Studio (zobacz wymagania wstępne dla obsługiwanych wersji).
  2. W menu rozwijanym "Platformy rozwiązań" na standardowym pasku narzędzi (lub w menu "Buduj") wybierz pozycję Menedżer Konfiguracji...
  3. Otwórz menu rozwijane "Aktywna platforma rozwiązania" i wybierz pozycję <Nowy...>.
  4. W menu rozwijanym "Wpisz lub wybierz nową platformę" wybierz ARM64 i upewnij się, że wartość "Kopiuj ustawienia z" jest ustawiona na wartość x64 z włączonym polem wyboru "Utwórz nowe platformy projektu", a następnie wybierz OK.

Gratulacje! Rozpocząłeś dodawanie wsparcia dla architektury Arm do swojej aplikacji. Następnie sprawdź, czy Twoje rozwiązanie Arm64 zostało pomyślnie zbudowane.

Jeśli rozwiązanie nie zostanie pomyślnie skompilowane, należy rozwiązać problemy powodujące niepowodzenie kompilacji. Najbardziej prawdopodobną przyczyną jest to, że zależność nie jest dostępna dla ARM64, co jest omówione w Rozwiązywanie Problemów poniżej.

(Opcjonalnie): Aby sprawdzić, czy plik binarny aplikacji został skompilowany dla usługi Arm64, otwórz katalog projektu w programie PowerShell (kliknij prawym przyciskiem myszy projekt aplikacji w Eksploratorze rozwiązań programu Visual Studio i wybierz polecenie Otwórz w terminalu). Przełącz katalogi, aby został wybrany nowy katalog bin\ARM64\Debug lub Release twojego projektu. Wprowadź polecenie: dumpbin /headers .\<appname>.exe (zastępując <appname> nazwą aplikacji). Przewiń w górę w wynikach danych wyjściowych terminalu, aby znaleźć sekcję FILE HEADER VALUES i potwierdzić, że pierwszy wiersz jest AA64 machine (ARM64).

Krok 2. Testowanie i debugowanie nowo utworzonej aplikacji Arm64

Aby sprawdzić, czy rozwiązanie Arm64 kompiluje się pomyślnie po dodaniu platformy rozwiązania Arm64 do projektu w programie Visual Studio:

  1. Zamknij okno Aktywna platforma rozwiązania.
  2. Zmień ustawienie kompilacji z Debugowanie na Wydanie.
  3. W menu rozwijanym Kompilacja wybierz pozycję Kompiluj rozwiązanie i poczekaj na ponowne skompilowanie projektu.
  4. Otrzymasz komunikat wyjściowy "Rebuild All zakończone powodzeniem". Jeśli nie, zobacz sekcję Rozwiązywanie problemów .

Po skompilowaniu plików binarnych dla swojej aplikacji do obsługi architektury Arm64, chcesz je przetestować. To testowanie wymaga posiadania urządzenia lub maszyny wirtualnej z systemem Windows w usłudze Arm.

Jeśli tworzysz oprogramowanie na urządzeniu z systemem Windows na Arm, możesz łatwo skonfigurować Visual Studio z użyciem lokalnego debugowania. Jeśli kompilujesz krzyżowo (używasz urządzenia, które nie działa na procesorze Arm), chcesz użyć zdalnego debugowania na urządzeniu z systemem Windows na Arm lub maszynie wirtualnej, aby umożliwić pracę deweloperską w programie Visual Studio podczas uruchamiania aplikacji Arm64 na innym urządzeniu.

System Windows na sprzęcie arm lub maszynach wirtualnych dostępnych do testowania

Jeśli szukasz sprzętu do użycia na potrzeby ciągłej integracji i testowania, oto kilka urządzeń z systemem Windows z procesorem opartym na architekturze Arm64:

Aby uzyskać pomoc dotyczącą konfigurowania maszyny wirtualnej z systemem Windows dla Arm do obsługi CI i testowania, zobacz Szybki start: tworzenie maszyny wirtualnej Arm w portalu Azure.

Krok 3. Kompilowanie i testowanie aplikacji na urządzeniach arm

Dodanie etapu automatyzacji testów jest ważnym elementem strategii ciągłej integracji i ciągłego dostarczania (CI/CD). W przypadku rozwiązań Arm64 działających w systemie Windows ważne jest, aby uruchomić pakiet testowy w architekturze Arm64. Ta architektura może być rzeczywistym systemem Windows na sprzęcie Arm, używając jednego z wymienionych wcześniej urządzeń Arm lub maszyny wirtualnej z wcześniej wymienionych VM.

Kompilowanie aplikacji jest wygodniejsze podczas wykonywania na tej samej maszynie co testy, ale w wielu przypadkach nie jest wymagane. Zamiast tego można rozważyć rozszerzenie istniejącej infrastruktury kompilacji w celu utworzenia krzyżowo skompilowanych danych wyjściowych dla usługi Arm64.

Krok 4. Aktualizowanie instalatora i publikowanie zaktualizowanej aplikacji

Jeśli opublikujesz aplikację w Sklepie Microsoft, to po zbudowaniu wersji ARM64 aplikacji zgodnie z powyższymi krokami, możesz zaktualizować istniejący pakiet aplikacji w Sklepie Microsoft, odwiedzając swój pulpit nawigacyjny Centrum partnerskiego i dodając nowo utworzone pliki binarne ARM64 do przesłania.

Jeśli aplikacja nie jest jeszcze publikowana w Sklepie Microsoft Store, możesz postępować zgodnie z instrukcjami, aby utworzyć przesyłanie aplikacji na podstawie tego, czy chcesz przesłać plik MSI lub EXE, pakiet MSIX, aplikację PWA lub dodatek aplikacji.

Jeśli tworzysz własny instalator, upewnij się, że będzie można pomyślnie zainstalować nową wersję arm64. Większość struktur instalatora, takich jak WiX, Squirrel, InnoSetup, InstallAwarei inne obsługują system Windows w usłudze Arm bez problemu.

Jeśli oferujesz instalator aplikacji ze strony internetowej, możesz użyć User-Agent wskazówek klienta, aby wykryć, kiedy klient odwiedza z urządzenia z systemem Windows na urządzeniu z procesorem Arm i zaoferować im zaktualizowaną natywną wersję aplikacji dla procesorów Arm. W przeciwieństwie do ciągu agenta użytkownika, User-Agent Client Hints umożliwiają rozróżnienie klientów korzystających z Arm od tych używających urządzeń x86.

Krok 5. Planowanie bieżących aktualizacji

Teraz, gdy publikujesz wersję aplikacji Arm64, chcesz upewnić się, że pozostaje ona aktualizowana tak samo jak inne wersje aplikacji. Zachowaj wersje i funkcje dostosowane do architektur, aby uniknąć nieporozumień klientów w przyszłości.

Rozwiązywanie problemów

Typowe problemy, które zakłócają lub uniemożliwiają dodanie wersji Arm64 do istniejącej aplikacji systemu Windows w wersji x64 lub x86, obejmują:

Zależność, która nie została skompilowana dla usługi ARM64, blokuje pomyślne kompilowanie

Jeśli nie możesz skompilować aplikacji ze względu na zależność, zarówno wewnętrzną, od innej firmy, jak i z biblioteki open source, musisz zaktualizować ją tak, aby obsługiwała architekturę ARM64, lub ją usunąć.

  • W przypadku zależności wewnętrznych ponownie skompiluj zależność dla obsługi usługi ARM64.

  • W przypadku zależności innych firm poproś opiekuna o ponowne skompilowanie zależności z obsługą ARM64.

  • W przypadku zależności typu open source sprawdź narzędzie vcpkg , aby sprawdzić, czy nowsza wersja zależności obejmuje obsługę arm64, do której można przeprowadzić aktualizację. Jeśli żadna aktualizacja nie istnieje, rozważ dodanie obsługi ARM64 do pakietu samodzielnie. Wielu opiekunów open source docenia wkład.

  • Organizacja Linaro współpracuje z firmami i społecznościami open source w celu opracowania oprogramowania opartego na technologii arm. Możesz złożyć żądanie w Linaro Service Desk, aby pomóc w aktualizacji obsługi pakietów dla wszelkich brakujących zależności związanych z Windows na platformie Arm.

  • Użyj arm64EC. Wersje arm64EC zależności mogą służyć do ponownego kompilowania aplikacji przy jednoczesnym wykorzystaniu wersji x64 zależności. Dowolny kod x64, w tym kod z zależności, w procesie Arm64EC jest uruchamiany w ramach emulacji w aplikacji. (W tym przypadku wersje zależności arm64 nie mogą być używane).

  • Usuń i zastąp zależności w projekcie aplikacji.

Kod jest napisany dla określonej architektury innej niż Arm64

  • Należy zmodyfikować wywołania funkcji assemblera specyficzne dla CPU lub wbudowane wywołania funkcji wewnętrznych, aby dopasować dostępne instrukcje i funkcje na procesorze Arm. Aby uzyskać wskazówki, zobacz: Using Assembly and Intrinsics in C or C++ Code.

Aplikacja opiera się na sterowniku jądra

Sterowniki jądra muszą być tworzone w architekturze Arm64 jako natywne. Jądro nie zapewnia żadnej emulacji. To ograniczenie dotyczy głównie scenariuszy wirtualizacji. W przypadku aplikacji korzystających z sterowników urządzeń wymagających bezpośredniego dostępu do wewnętrznych systemów operacyjnych lub sprzętu działającego w trybie jądra (a nie w trybie użytkownika) i które nie zostały jeszcze zaktualizowane do obsługi procesorów Arm64, zobacz Tworzenie sterowników Arm64 za pomocą zestawu WDK.

Ponadto sterowniki w systemie Windows muszą być tworzone jako Arm64 i nie mogą być emulowane. W przypadku aplikacji korzystających z sterowników oprogramowania, które nie zostały jeszcze zaktualizowane do obsługi procesorów Arm64, zobacz Tworzenie sterowników Arm64 za pomocą zestawu WDK.

Łańcuch narzędzi dla systemu Windows w usłudze Arm

Oprócz obsługi programów Visual Studio i LLVM (CLANG), jak podano w sekcji Prerequisites tego przewodnika, obsługiwane są również następujące narzędzia i frameworki dla Arm64:

  • .NET 7
  • .NET 6 (LTS)
  • .NET 5.0.8+
  • .NET Framework 4.8.1
  • clang-cl kompiluje kod C++ dla systemu Windows i może służyć jako zamiennik kompilatora I konsolidatora MSVC. Nadal używa nagłówków i bibliotek z MSVC i jest zgodny z ABI MSVC.

Oprócz frameworków innych firm, w tym:

Potrzebujesz pomocy? Korzystanie z naszej usługi App Assure

Usługa doradcza Arm Assure jest dostępna, aby ułatwić deweloperom tworzenie aplikacji zoptymalizowanych pod kątem usługi Arm. Ta usługa jest dodatkiem do naszej istniejącej obietnicy: twoje aplikacje działają w systemie Windows w usłudze Arm, a jeśli wystąpią jakiekolwiek problemy, firma Microsoft pomoże ci je skorygować. Dowiedz się więcej.

Zarejestruj się w Windows Arm Advisory Services.