Android NDK

Ważne

Program Visual Studio App Center ma zostać wycofany 31 marca 2025 r. Mimo że możesz nadal używać programu Visual Studio App Center do momentu jej pełnego wycofania, istnieje kilka zalecanych alternatyw, do których można rozważyć migrację.

Dowiedz się więcej o osiach czasu pomocy technicznej i alternatywach.

Zestaw Android NDK umożliwia implementowanie części aplikacji systemu Android przy użyciu języków C i C++. Aby otrzymywać prawidłowe ślady stosu w kodzie natywnym, możesz użyć biblioteki klienta aplikacji Google Breakpad dla aplikacji systemu Android. Ślady stosu mogą zawierać tylko adresy pamięci. Nie pokazują one nazw klas, metod, nazw plików i numerów wierszy, które są potrzebne do odczytania i zrozumienia awarii. Aby uzyskać przetłumaczone adresy pamięci dla aplikacji NDK systemu Android, należy przekazać symbole aplikacji dla każdej kompilacji.

Aby dowiedzieć się, jak zgłaszać awarie zestawu NDK, zapoznaj się z dokumentacją zestawu Android SDK dla aplikacji systemu Android lub dokumentacją zestawu Unity SDK dla aplikacji aparatu Unity .

Jeśli chcesz wysłać awarie breakpad z innych platform do usługi App Center, zapoznaj się z dokumentacją przekazywania niestandardowych awarii.

Niesymbolicowane awarie

Niesymbolicowane awarie są wyświetlane w sekcji Diagnostyka centrum aplikacji, dzięki czemu można wyświetlić pewne szczegóły jeszcze przed przekazaniem symboli. Brakujące symbole z tych awarii zostaną wyświetlone na karcie "unsymbolicated". Jeśli brakujące symbole zostaną przekazane, niesymbolicowana grupa awarii zostanie zastąpiona symboliczną grupą awarii.

Uwaga

Usługa App Center nie obsługuje symboliczności ramek pochodzących z bibliotek systemowych. Biorąc pod uwagę wysoką fragmentację plików binarnych systemu dla systemu Android i innych platform — które mogą się różnić w dowolnej kombinacji wersji urządzenia/systemu operacyjnego — program App Center nie udostępnia symboli dla plików binarnych systemu i automatycznie pomija ramki z plików binarnych systemu w symboliczności.

Generowanie pliku .zip do przekazania

Istnieją dwa sposoby pobierania symboli niezbędnych do symbolicznego pobrania przez centrum aplikacji. Usługa App Center może wygenerować je na podstawie natywnych plików binarnych używanych w projekcie lub bezpośrednio przekazać symbole breakpadu.

Opcja 1. Przekazywanie natywnych plików binarnych

Umieść wszystkie pliki z katalogu projektu obj/local/$ABI/ w pliku .zip.

Opcja 2. Przekazywanie symboli breakpad

  1. Zrzut symboli przy użyciu łańcucha narzędzi Breakpad zgodnie z opisem w dokumentacji breakpad w sekcji "Pobieranie symboli debugowania".
  2. Utwórz plik symbols.zip o następującej strukturze:

Uwaga

Jeśli przekazujesz symbole z systemu macOS, musisz wyczyścić symbole wszelkich folderów dodatkowych, np. __MACOS zostanie wygenerowany i usunąć ten element, możesz użyć zip -d <symbols.zip> __MACOSX/\*polecenia .

$ unzip -l symbols.zip
Archive:  symbols.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
        0  07-22-13 15:07   symbols/
        0  07-22-13 15:07   symbols/libnative.so/
        0  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/
    12468  07-22-13 15:07   symbols/libnative.so/EAC901FB6DDCCE8AED89E1A8E4A58360/libnative.so.sym
        0  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/
    12467  07-22-13 15:07   symbols/libnative.so/FDC5C9E715C4F16408C0B78F95855BF0/libnative.so.sym
 --------                   -------
    24935                   6 files

Przekazywanie symboli

Uwaga

Usługa kompilacji i dystrybucji centrum aplikacji może automatycznie przekazywać symbole do usługi diagnostyki. Jeśli używasz centrum aplikacji do kompilowania i automatycznego dystrybuowania aplikacji do użytkowników końcowych, nie musisz ręcznie uzyskiwać i przekazywać plików symboli zgodnie z poniższymi instrukcjami.

Portal Centrum aplikacji

  1. Zaloguj się do Centrum aplikacji i wybierz aplikację.
  2. W menu po lewej stronie przejdź do sekcji Diagnostyka , a następnie pozycję Problemy.
  3. Jeśli twoja aplikacja nie zgłosiła jeszcze żadnych awarii, musisz użyć interfejsu API lub interfejsu wiersza polecenia, aby przekazać symbole breakpad.
  4. Jeśli aplikacja zgłosiła już awarie, które wymagają symboli, sprawdź kartę Unsymbolicated i powinna istnieć grupa wersji z brakującymi symbolami, kliknij ją, aby wyświetlić menu, aby przekazać plik.
  5. Gdy symbole zostaną zindeksowane przez centrum aplikacji, awarie zostaną symboliczne dla Ciebie.

Interfejs API centrum aplikacji

Proces przekazywania symboli za pośrednictwem interfejsu API obejmuje serię trzech wywołań interfejsu API: jeden do przydzielenia miejsca na naszym zapleczu, jeden do przekazania pliku i jeden w celu zaktualizowania stanu przekazywania. Treść pierwszego wywołania interfejsu API powinna mieć wartość symbol_typeBreakpad.

  1. Wyzwalanie POST żądania do interfejsu API symbol_uploads. To wywołanie przydziela miejsce na naszym zapleczu dla pliku i zwraca symbol_upload_id właściwość i upload_url .
curl -X POST 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{JSON BODY}'
  1. upload_url Używając właściwości zwróconej z pierwszego kroku, utwórz PUT żądanie z nagłówkiem: "x-ms-blob-type: BlockBlob" i podaj lokalizację pliku na dysku. To wywołanie przekazuje plik do naszych kont magazynu zaplecza. Dowiedz się więcej o nagłówkach żądań obiektów blob PUT .
curl -X PUT '{upload_url}' \
    -H 'x-ms-blob-type: BlockBlob' \
    --upload-file '{path to file}'
  1. PATCH Prześlij żądanie do interfejsu API symbol_uploads przy użyciu symbol_upload_id właściwości zwróconej z pierwszego kroku. W treści żądania określ, czy chcesz ustawić stan przekazywania na committed (pomyślnie ukończony) proces przekazywania lub aborted (zakończone niepowodzeniem).
curl -X PATCH 'https://api.appcenter.ms/v0.1/apps/{owner_name}/{app_name}/symbol_uploads/{symbol_upload_id}' \
    -H 'accept: application/json' \
    -H 'X-API-Token: {API TOKEN}' \
    -H 'Content-Type: application/json' \
    -d '{ "status": "committed" }'

Uwaga

Interfejs API przekazywania symboli nie działa w przypadku plików, które są większe niż 256 MB. Użyj interfejsu wiersza polecenia centrum aplikacji, aby przekazać te pliki. Interfejs wiersza polecenia centrum aplikacji można zainstalować, postępując zgodnie z instrukcjami w repozytorium interfejsu wiersza polecenia centrum aplikacji.

Interfejs wiersza polecenia centrum aplikacji

Możesz również użyć interfejsu wiersza polecenia do przekazywania plików symboli:

appcenter crashes upload-symbols --breakpad {symbols file}

Ignorowanie symboli

Gdy centrum aplikacji nie ma wszystkich plików symboli do pełnego symbolicznego raportowania awarii, awarie są wyświetlane na karcie Niesymbolicated . Wymagane symbole są przekazywane z tej strony, jeśli masz do nich dostęp.

Jeśli nie możesz przekazać symboli, możesz oznaczyć je jako ignorowane , wybierając wiersze w tabeli i klikając przycisk Ignoruj wersje . Ten przycisk nakazuje usłudze App Center przetwarzanie awarii i symboliczne ich w pełni przy użyciu symboli w pliku. Po zakończeniu przetwarzania zostaną one wyświetlone na karcie Awarie częściowo symboliczne. Nowe awarie, które również zależą od tych samych identyfikatorów symboli oznaczonych jako ignorowane, pomijają kartę Unsymbolicated , gdy pochodzą i przepływają przez system.