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ż
zmiany 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
![](https://developer.android.google.cn/static/images/guide/app-compatibility/appcompat-dev-options.png?authuser=8&hl=pl)
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:
- Jeśli opcje programisty nie są jeszcze włączone, włącz je.
- Otwórz na urządzeniu aplikację Ustawienia i wejdź na System > Zaawansowane > Opcje programisty > Zmiany zgodności aplikacji.
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
odpowiadaNOTIFICATION_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ększytargetSDKVersion
, 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 obutrue
lubfalse
, w zależności odtargetSDKVersion
. 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:
- Android 15 (poziom API 35)
- Android 14 (poziom API 34)
- Android 13 (poziom API 33)
- Android 12 (poziomy API 31 i 32)
- Android 11 (poziom API 30)
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 14 (poziom API 34), możesz zacząć od zainstalowania aplikacji na urządzeniu Androida 14 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 przeztargetSDKVersion
. 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 kontotargetSDKVersion
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:
- Jeśli opcje programisty nie są jeszcze włączone, włącz je.
- Otwórz na urządzeniu aplikację Ustawienia i kliknij System > Zaawansowane > Opcje programisty > Zmiany zgodności aplikacji.
- Wybierz aplikację z listy.
Na liście zmian znajdź tę, którą chcesz włączyć lub wyłączyć. i kliknij przełącznik.
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ć |