Narzędzia platformy zgodności

W Androidzie 11 wprowadziliśmy nowe narzędzia dla programistów do testowania debugowanie aplikacji pod kątem zmian w działaniu w nowszych wersjach Androida, platformy. Narzędzia te wchodzą w skład platformy zgodności, która pozwala aplikacjom programiści pojedynczo włączają i wyłączają zmiany powodujące niezgodność, używając programistów opcji lub ADB. Wykorzystaj tę elastyczność, przygotowując się do kierowania na stabilnej wersji interfejsu API oraz podczas testowania aplikacji przy użyciu następną wersję Androida.

Gdy używasz narzędzi platformy zgodności, platforma Androida automatycznie dostosowuje wewnętrzną logikę, więc nie trzeba zmieniać targetSDKVersion lub ponownie skompiluj aplikację, aby przeprowadzić podstawowe testy. Ponieważ zmian można przełączać pojedynczo, można izolować, testować i debugować zachowanie użytkownika lub wyłączenie jednej zmiany, która powoduje problemy, jeśli musisz najpierw przetestować coś innego.

Jak sprawdzić, które zmiany są włączone

Włączenie zmiany w działaniu może wpłynąć na sposób, w jaki aplikacja uzyskuje dostęp do interfejsów API platform, na które ta zmiana ma wpływ. Możesz sprawdzić, zmiany można włączyć przy użyciu opcji programisty, logcat lub poleceń ADB.

Identyfikuj włączone zmiany za pomocą opcji programisty

Rysunek 1. Zmiany zgodności aplikacji w opcjach programisty.

Możesz zobaczyć, które zmiany są włączone, oraz je włączyć lub wyłączyć w z opcjami programisty na urządzeniu. Aby uzyskać dostęp do tych opcji, wykonaj te czynności:

  1. Jeśli opcje programisty nie są jeszcze włączone, włącz je.
  2. Otwórz na urządzeniu aplikację Ustawienia i wejdź na System > Zaawansowane > Opcje programisty > Zmiany zgodności aplikacji.
  3. Wybierz aplikację z listy.

Każda zmiana w działaniu należy zwykle do jednej z tych 2 kategorii:

  • Zmiany, które wpływają na wszystkie aplikacje działające w tej wersji Androida, niezależnie od tego targetSdkVersion aplikacji.

    Te zmiany są domyślnie włączone w platformie zgodności i są stosowane widoczne w interfejsie w sekcji Domyślnie włączone zmiany.

  • Zmiany, które dotyczą tylko aplikacji kierowanych na określone wersje Androida. Te zmiany dotyczą tylko aplikacji kierowanych na określoną wersję Androida, są one również określane jako zmiany kontrolowane przez targetSDKVersion

    Te zmiany są domyślnie włączone w platformie zgodności, jeśli aplikacja jest kierowana na wersję wyższą niż wymieniona wersja interfejsu API. Przykład: zmiana zachowania kontrolowany przez targetSDKVersion w: Android 13 (poziom interfejsu API 33) będzie widoczny w interfejsie w sekcji o nazwie Włączono dla wersji targetSdkVersion >=33. W niektórych starszych wersjach Androida ta sekcja nosi nazwę „Włączone po pakiecie SDK API_LEVEL” .

Na rys. 1 znajduje się sekcja Domyślnie wyłączone zmiany. Zmiany zawarte w tej sekcji mogą służyć różnym celom. Przed włącz te zmiany, przeczytaj opis zmian na stronie zgodności dla danej wersji Androida.

Zidentyfikuj włączone zmiany za pomocą narzędzia logcat

Przy każdej zmianie działania, kiedy aplikacja po raz pierwszy w trakcie jej działania wywoła odpowiedni interfejs API, system wyświetli komunikat logcat podobny do tego:

D CompatibilityChangeReporter: Compat change id reported: 194833441; UID 10265; state: ENABLED

Każdy komunikat logcat zawiera te informacje:

Zmień identyfikator
Wskazuje, która zmiana ma wpływ na aplikację. Ta wartość jest mapowana na jeden z zmiany działania widoczne na ekranie Zmiany zgodności aplikacji; (zobacz ilustrację 1). W tym przykładzie 194833441 odpowiada NOTIFICATION_PERM_CHANGE_ID
Identyfikator UID
Wskazuje aplikację, której dotyczy zmiana.
Region

Wskazuje, czy zmiana dotyczy aplikacji.

Stan może mieć jedną z tych wartości:

Region Znaczenie
ENABLED Zmiana zostanie włączona i będzie miała wpływ na działanie aplikacji, jeśli aplikacja korzysta ze zmienionych interfejsów API.
DISABLED

Ta zmiana zostanie wyłączona i nie będzie miała wpływu na aplikację.

Uwaga: jeśli ta zmiana została wyłączona, ponieważ targetSDKVersion znajduje się poniżej wymaganego progu, jest domyślnie włączona, gdy aplikacja zwiększy targetSDKVersion, aby kierować reklamy na wyższą wersję.

LOGGED Zmiana jest rejestrowana przez platformę zgodności, ale nie można włączyć ani wyłączyć. Chociaż nie można przełączyć tej zmiany, wciąż może wpływać na działanie aplikacji. Zobacz opis zmiana na liście platform zgodności dla platformy wersję Androida, aby dowiedzieć się więcej. W wielu przypadkach typy zmian mają charakter eksperymentalny i można je zignorować.

Zidentyfikuj włączone zmiany za pomocą ADB

Uruchom następujące polecenie ADB, aby zobaczyć pełny zestaw zmian (oba są włączone) i wyłączone) na całym urządzeniu:

adb shell dumpsys platform_compat

Dane wyjściowe zawierają następujące informacje o każdej zmianie:

Zmień identyfikator
Unikalny identyfikator tej zmiany zachowania. Na przykład: 194833441.
Nazwa
Nazwa tego działania się zmienia. Na przykład: NOTIFICATION_PERM_CHANGE_ID.
Kryteria wersji targetSDKVersion

Który element targetSDKVersion jest objęty ograniczeniami (jeżeli istnieje).

Na przykład: jeśli ta zmiana dotyczy tylko aplikacji kierowanych na wersję pakietu SDK 33 lub wyższa, dane wyjściowe to enableAfterTargetSdk=32. Jeśli zmiana nie jest jest chroniony przez zasadę targetSDKVersion, dane wyjściowe: enableAfterTargetSdk=0.

Zastąpienia pakietu

Nazwa każdego pakietu, w którym jest domyślny stan zmiany (włączone lub wyłączone) zostało zastąpione.

Na przykład jeśli jest to zmiana, która jest domyślnie włączona, nazwa pakietu będzie widoczna, jeśli wyłączysz tę opcję za pomocą opcji programistycznych lub ADB. W tym przypadku dane wyjściowe będą takie:

packageOverrides={com.my.package=false}

Zmiany objęte ograniczeniami przez targetSDKVersion można włączyć lub domyślnie wyłączone, więc lista pakietów może zawierać instancje obu true lub false, w zależności od targetSDKVersion. Dla: przykład:

packageOverrides={com.my.package=true, com.another.package=false}

Więcej informacji o konkretnych zmianach

Pełna lista zmian w działaniu aplikacji w ramach platformy zgodności zawiera w dokumentacji każdej wersji Androida. Skorzystaj z tych linków: więcej informacji w zależności od wersji Androida, którą testujesz dla:

Kiedy włączać zmiany

Podstawowym celem platformy zgodności jest zapewnienie użytkownikom i elastyczności podczas testowania aplikacji w nowszych wersjach Androida. Ten opisuje strategie, które pomogą Ci określić, kiedy zmian podczas testowania i debugowania aplikacji.

Kiedy wyłączać zmiany

Decyzja o wyłączeniu zmian zwykle zależy od tego, czy została jest zagrożony przez targetSDKVersion lub nie.

Zmiany włączone dla wszystkich aplikacji

Zmiany, które mają wpływ na wszystkie aplikacje, są włączone przez: dla konkretnej wersji platformy, niezależnie od targetSDKVersion, aby sprawdzić, czy uruchomienie na tej wersji platformy.

Jeśli na przykład przygotowujesz się do kierowania na Androida 15 (poziom API 35), możesz zacząć od zainstalowania aplikacji na urządzeniu Androida 15 i przetestuj aplikację w ramach typowych testów. i przepływach pracy. Jeśli występują problemy z aplikacją, możesz wyłączyć zmianę, która powoduje problem, więc możesz kontynuować testowanie pod kątem innych problemów.

Te zmiany mogą dotyczyć wszystkich aplikacji niezależnie od targetSDKVersion, zwykle najpierw przetestuj i zaktualizuj aplikację pod kątem tych zmian które są zamknięte przez targetSDKVersion. Dzięki temu użytkownicy nie będą działać gorzej, gdy zaktualizują urządzenie do nowej wersji platformy.

Warto też przetestować te zmiany, ponieważ nie można przełączać te zmiany są wyłączone w publicznej wersji Androida. Najlepiej jest sprawdzić te zmiany w każdej wersji Androida, gdy ta wersja jest w wersji testowej.

Zmiany zablokowane przez: targetSDKVersion

Jeśli aplikacja jest kierowana na targetSDKVersion, wszystkie zmiany objęte tą wersją będą włączone domyślnie. Dlatego gdy przełączasz konto targetSDKVersion w aplikacji na nowy w aplikacji zaczną obowiązywać wiele nowych zmian naraz.

Więcej niż jedna z tych zmian może mieć wpływ na Twoją aplikację, dlatego może być konieczne wyłączenie niektórych z tych zmian pojedynczo podczas testowania na debugowanie aplikacji.

Kiedy włączać zmiany

Zmiany ograniczone przez konkretny targetSDKVersion są domyślnie wyłączone za każdym razem, gdy aplikacja jest kierowana na wersję pakietu SDK niższą niż wersja blokowana. Zazwyczaj przygotowując się do kierowania reklam na nowe targetSdkVersion, przygotowujesz listę zmian w działaniu, które należy przetestować i debugować.

Możesz na przykład testować aplikację pod kątem szeregu zmian na platformie w ciągu targetSdkVersion. Używając opcji programisty lub poleceń ADB, można włączać i testować każdą zmianę pojedynczo, zamiast zmieniać pliku manifestu aplikacji i wprowadzania wszystkich zmian jednocześnie. Ta dodatkowa opcja może ułatwić testujesz zmiany osobno, unikając debugowania i aktualizowania wielu części z aplikacji.

Po włączeniu zmiany możesz przetestować i debugować aplikację, używając standardowego testowania przepływów pracy. Jeśli wystąpią problemy, sprawdź dzienniki, aby określić, przyczyna problemu. Jeśli nie ma pewności, czy przyczyną problemu jest zmiany platformy, spróbuj ją wyłączyć i sprawdź jeszcze raz. Twojej aplikacji.

Włącz lub wyłącz zmiany

Platforma zgodności umożliwia włączanie i wyłączanie każdej zmiany za pomocą opcji programistycznych i poleceń ADB. Ponieważ włączenie lub wyłączenie zmian może spowodować, może ulec awarii lub wyłączyć ważne zmiany w zabezpieczeniach, ograniczeniami w wprowadzaniu zmian.

Przełączanie zmian za pomocą opcji programisty

Aby włączyć lub wyłączyć zmiany, użyj opcji programisty. Aby znaleźć dewelopera wykonaj te czynności:

  1. Jeśli opcje programisty nie są jeszcze włączone, włącz je.
  2. Otwórz na urządzeniu aplikację Ustawienia i kliknij System > Zaawansowane > Opcje programisty > Zmiany zgodności aplikacji.
  3. Wybierz aplikację z listy.
  4. Na liście zmian znajdź tę, którą chcesz włączyć lub wyłączyć. i kliknij przełącznik.

    Lista zmian, które można włączyć lub wyłączyć

Przełącz zmiany za pomocą ADB

Aby włączyć lub wyłączyć zmianę przy użyciu ADB, uruchom jedno z tych poleceń:

adb shell am compat enable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME
adb shell am compat disable (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Podaj CHANGE_ID (np. 194833441) lub CHANGE_NAME (na przykład NOTIFICATION_PERM_CHANGE_ID) i adresu e-mail Twojej aplikacji PACKAGE_NAME.

Aby przywrócić wartość domyślną, możesz też użyć tego polecenia: i usunięcie wszystkich zastąpień ustawionych za pomocą ADB lub opcji programisty:

adb shell am compat reset (CHANGE_ID|CHANGE_NAME) PACKAGE_NAME

Ograniczenia przełączania zmian

Domyślnie każda zmiana w działaniu jest włączona lub wyłączona. Zmiany, które wpływa domyślnie na wszystkie aplikacje. Inne zmiany są ograniczone przez targetSdkVersion Te zmiany są domyślnie włączone, gdy aplikacja jest kierowana na pakietu SDK w odpowiedniej wersji lub nowszej i domyślnie jest wyłączony, gdy aplikacja kierowane na wersję SDK starszą niż wersja blokowana. Po wybraniu zmiany włączony lub wyłączony, zastępujesz jego stan domyślny.

Aby zapobiegać złośliwemu wykorzystaniu platformy zgodności, wprowadziliśmy: pewne ograniczenia dotyczące możliwości wprowadzania zmian. Określa, czy zależy od rodzaju zmiany, od tego, czy aplikację można debugować, oraz typ kompilacji uruchomionej na urządzeniu. W tej tabeli opisano, kiedy możesz przełączać różne typy zmian:

Typ kompilacji Aplikacja niemożliwa do debugowania Aplikacja z możliwością debugowania
Wszystkie zmiany Zmiany nadzorowane przez targetSDKVersion Wszystkie inne zmiany
Wersja przedpremierowa dla programistów lub kompilacja beta Nie można przełączyć Możliwość przełączania Możliwość przełączania
Publiczna kompilacja użytkownika Nie można przełączyć Możliwość przełączania Nie można przełączyć