Aktualizowanie zależności daje dostęp do ich najnowszych funkcji, poprawek i ulepszeń. Aby uaktualnić zależności, musisz wiedzieć, jak Gradle rozwiązuje wersje, których potrzebujesz, jakie są związane z tym zagrożenia i jak możesz je zminimalizować.
Zastanów się nad strategią uaktualniania
Najważniejszym krokiem w przypadku każdego uaktualnienia jest analiza ryzyka. Określ, jak dobrze znasz każdą zależność, którą aktualizujesz. Przy określaniu strategii uaktualniania należy wziąć pod uwagę wiele kwestii, w tym:
Tworzenie biblioteki |
Czy tworzysz aplikację, którą użytkownicy pobierają i uruchamiają na urządzeniu? A może tworzysz bibliotekę, aby ułatwić innym deweloperom tworzenie aplikacji? Jeśli tworzysz aplikację, skup się na jej aktualizowaniu i utrzymywaniu stabilności. Jeśli tworzysz bibliotekę, skup się na aplikacjach innych deweloperów. Wprowadzone przez Ciebie zmiany wpływają na Twoich klientów. Jeśli uaktualnisz jeden z elementów zależnych, ta wersja stanie się kandydatem do rozwiązania zależności Gradle, co może spowodować przerwanie korzystania z tego elementu przez aplikację. Po pierwsze – w miarę możliwości ograniczaj zależności biblioteki. Im mniej zależności, tym mniejszy wpływ na rozwiązywanie zależności przez użytkownika. Aby wskazać typy wprowadzanych zmian, stosuj się do semantycznego numerowania wersji. Na przykład AndroidX stosuje semantyczne wersjonowanie i dodaje schemat wersjonowania przed wersją beta. Staraj się unikać uaktualnień wersji Rozważ utworzenie listy kwalifikacyjnej do publikacji (RC) w swojej bibliotece, aby użytkownicy mogli ją wcześniej przetestować. Szczegółowe informacje o zapewnianiu zgodności z interfejsem binarnym aplikacji (ABI) biblioteki znajdziesz w wytycznych dotyczących zgodności wstecznej dla autorów bibliotek. Aby mieć pewność, że zmiany ABI są zgodne z zamierzoną zmianą wersji, użyj testów integracyjnych i narzędzi takich jak walidator zgodności binarnej. Jeśli wprowadzisz poprawki w wersji Jeśli uaktualnienie biblioteki wymaga zmian powodujących niezgodność, które mogą być szczególnie uciążliwe dla klientów, rozważ opublikowanie ich jako nowego artefaktu, aby umożliwić współistnienie starej i nowej wersji i umożliwić bardziej stopniowe wdrożenie. Uwaga: jeśli uaktualnienie do jednej z zależności powoduje znaczną zmianę interfejsu API, warto uaktualnić ją w wersji |
Cykl premierowy |
Jak często publikujesz aplikację lub bibliotekę? Krótsze cykle rozwoju i publikacji
Dłuższe cykle tworzenia i publikowania
|
Bądź na bieżąco z najnowszymi funkcjami |
Czy wolisz korzystać z najnowszych funkcji i interfejsów API, czy aktualizujesz tylko wtedy, gdy potrzebujesz nowej funkcji lub poprawki błędu? Zastanów się nad kompromisami związanymi z częstymi ulepszeniami. Przyszłe uaktualnienia są łatwiejsze (mniej zmian do zintegrowania), ale wiążą się z częstszym podejmowaniem ryzyka. Testowanie uaktualnień bibliotek do wersji przedpremierowych (alfa, beta, kandydująca do wydania) może ułatwić gotowość do udostępnienia wersji stabilnych. |
Nowa zależność |
Jeśli dodajesz nową zależność, rozważ przeprowadzenie szczegółowej weryfikacji, która polega na sprawdzeniu tej biblioteki pod kątem wszystkich kryteriów ryzyka, aby mieć pewność, że zostały prawidłowo ocenione. Nie zezwalaj na dodawanie nowych zależności bez sprawdzenia. |
Zespół ds. współpracy z partnerami |
Czy masz specjalny zespół budowlany? Czy kompilację zajmują się inżynierowie oprogramowania? Specjalny zespół może poświęcić więcej czasu na analizowanie ryzyka związanego z aktualizacją i testowanie nowych wersji, aby upewnić się, że kompilacja działa prawidłowo, zanim inżynierowie zaczną używać nowych wersji. |
Typ uaktualnienia |
Niektóre ulepszenia są ważniejsze od innych. Zastanów się, które z nich są dla Ciebie najważniejsze. Uaktualnienia narzędzi do tworzenia, takie jak wtyczki Gradle i Gradle, zwykle mają mniejszy wpływ na użytkowników, a duże ryzyko jest wewnętrzne w kompilacji. Sama kompilacja pomaga potwierdzić te zmiany. Uaktualnienia bibliotek i SDK są trudniejsze do zweryfikowania i stanowią większe zagrożenie dla użytkowników. Wtyczka Androida do obsługi Gradle (AGP) – narzędzia używane do kompilowania aplikacji lub biblioteki na Androida. To najważniejsza aktualizacja, ponieważ często obejmuje lub umożliwia ulepszenia wydajności, poprawki błędów, nowe reguły lint oraz obsługę nowych wersji platformy Android. Gradle – często musisz uaktualnić Gradle, gdy aktualizujesz AGP lub inną wtyczkę Gradle. Inne wtyczki Gradle – czasami interfejs API wtyczki Gradle ulega zmianie. Gdy aktualizujesz Gradle, sprawdź, czy są dostępne aktualizacje używanych wtyczek. Kotlin i Java – niektóre biblioteki i wtyczki wymagają minimalnej wersji Kotlin lub Javy albo chcesz skorzystać z nowych funkcji językowych, interfejsów API lub ulepszeń wydajności. Platforma Android – Sklep Play wymaga regularnych aktualizacji pakietu Android SDK. Nowe wersje pakietu SDK Androida należy przetestować jak najszybciej. Niektóre uaktualnienia pakietu SDK wymagają wprowadzenia zmian w aplikacji, takich jak nowe uprawnienia lub użycie nowych interfejsów API. Biblioteki – czy chcesz nadać priorytet bibliotekom na podstawie bliskości ogólnej architektury?
Android Studio – aktualizowanie Android Studio zapewnia dostęp do najnowszych funkcji i poprawek błędów w podstawowej platformie IntelliJ IDEA oraz narzędzi do pracy z najnowszymi pakietami SDK Androida. |
Dostępne narzędzia |
Dostępnych jest wiele narzędzi i wtyczek, które ułatwiają uaktualnienia. Narzędzia takie jak Dependabot i Renovate automatycznie aktualizują wersje bibliotek w Twoim kompilacie, ale pamiętaj, aby przeanalizować wyniki i sprawdzić, czy nie ma w nich zagrożeń. |
Strategie dotyczące określonych typów uaktualnień
Uaktualnianie niektórych typów zależności może mieć efekt kaskadowy, który wymaga uaktualnienia innych typów zależności. Relacje między elementami tworzenia omawiamy w artykule Wzajemne zależności między narzędziami a bibliotekami.
Podczas uaktualniania poszczególnych typów komponentów zastanów się, jak to wpłynie na inne komponenty w kompilacji.
Wtyczka Android Gradle (AGP) |
Android Studio zawiera asystenta przejścia na AGP, który może pomóc w wykonywaniu tych zadań. Jeśli korzystasz z Asystenta lub przeprowadzasz uaktualnienie ręcznie, pamiętaj o tych kwestiach: Przeczytaj informacje o wersji AGPL. Uaktualnij Gradle do co najmniej podanej wersji. Uaktualnij Android Studio do wersji, która obsługuje wybraną wersję AGP. Używaj wersji Android Studio i AGP, które obsługują pakiet Android SDK, którego chcesz użyć. Sprawdź zgodność z narzędziami SDK Build Tools, NDK i JDK. Jeśli opracowujesz wtyczkę Gradle (do użytku wewnętrznego lub publicznego), która rozszerza dane z AGP lub korzysta z nich, sprawdź, czy musisz ją uaktualnić. Czasami AGP wycofuje interfejsy API, a potem je usuwa, co powoduje niezgodność z poprzednimi wtyczkami. |
Kompilator, język i czas wykonywania Kotlin |
Informacje o znanych problemach i niezgodnościach związanych z Kotlinem znajdziesz w informacjach o wersji Kotlina. Jeśli korzystasz z Jetpack Compose:
Jeśli używasz Kotlin Symbol Processing (KSP), zapoznaj się z krótkim wprowadzeniem do KSP, aby dowiedzieć się, jak je skonfigurować, oraz z dostępnymi wersjami KSP. Pamiętaj, że musisz użyć wersji KSP, która jest zgodna z wersją Kotlina. Jeśli np. używasz Kotlina w wersji 2.0.21, możesz użyć dowolnej wersji wtyczki KSP, która zaczyna się od 2.0.21, np. 2.0.21-1.0.25. Zwykle nie musisz uaktualniać procesorów KSP (np. kompilatora sal, który pojawia się jako zależność Zaktualizuj wszystkie używane wtyczki kompilatora Kotlin. Interfejs API wtyczki kompilatora Kotlina często się zmienia w kolejnych wersjach, a wtyczki muszą używać zgodnego interfejsu API. Jeśli wtyczka jest wymieniona w sekcji Wtyczki kompilatora, musisz użyć tej samej wersji co kompilator Kotlin. W przypadku innych wtyczek kompilacji sprawdź ich dokumentację, aby dowiedzieć się, jak prawidłowo je mapować. Pamiętaj, że wtyczki kompilatora, które nie są aktualizowane wraz z kompilatorem Kotlin, często są opóźniane, ponieważ czekają na stabilizację interfejsu API wtyczki kompilatora. Zanim zaktualizujesz Kotlina, sprawdź, czy wszystkie używane przez Ciebie wtyczki kompilatora mają dostępne odpowiednie uaktualnienia. W niektórych przypadkach język Kotlin ulega zmianom, co wymaga zaktualizowania kodu. Zdarza się to najczęściej, gdy testujesz funkcje eksperymentalne. Jeśli po uaktualnieniu kompilatora Kotlina kod nie jest prawidłowo kompilowany, sprawdź notatki do wersji Kotlina, aby dowiedzieć się, czy nie nastąpiły zmiany w języku lub czy nie doszło do uszkodzenia biblioteki czasu wykonywania. |
Wtyczki kompilatora Kotlin |
Jeśli musisz uaktualnić wtyczkę kompilatora Kotlin, zaktualizuj ją do wersji zgodnej z używaną wersją Kotlina. Większość wtyczek kompilatora Kotlin korzysta z tej samej wersji co kompilator Kotlin lub zaczyna od wymaganej wersji. Jeśli na przykład wersja wtyczki to 2.0.21-1.0.25, musisz użyć wersji kompilatora Kotlin 2.0.21. Zmiana wersji kompilatora Kotlina może wymagać innych zmian. |
Biblioteki |
Biblioteki to najczęściej aktualizowane zależności w kompilacji. Dostępne uaktualnienia będą widoczne w edytorze Android Studio lub w przypadku korzystania z narzędzi i wtyczek. Niektóre biblioteki wymagają minimalnej ilości Niektóre biblioteki określają też minimalną wersję Kotlina, której należy używać. Zaktualizuj wersję Kotlina w plikach kompilacji, aby była co najmniej równa określonej wersji. |
Gradle |
Czasami nowe wersje Gradle wycofują istniejące interfejsy API, usuwając je w przyszłej wersji. Jeśli tworzysz wtyczkę do Gradle, uaktualnij ją jak najszybciej, zwłaszcza jeśli jest ona publiczna. Niektóre uaktualnienia Gradle wymagają znalezienia nowych wersji używanych wtyczek. Pamiętaj, że opracowanie tych wtyczek może opóźnić się z powodu uaktualnienia ich do najnowszych interfejsów API wtyczek Gradle. Aby uaktualnić Gradle:
|
Wtyczki Gradle |
Uaktualnione wtyczki Gradle czasami używają nowych lub zmienionych interfejsów API Gradle, które z kolei wymagają uaktualnienia Gradle lub ewentualnie wprowadzenia zmian w ich konfiguracji w plikach kompilacji. W obu przypadkach zobaczysz ostrzeżenia lub błędy kompilacji wskazujące na niezgodność. Podczas aktualizowania wtyczek zawsze aktualizuj Gradle. |
SDK na Androida |
Android Studio zawiera Asystenta aktualizacji pakietu SDK Androida, który może pomóc w wykonywaniu tych zadań. Jeśli korzystasz z asystenta lub ręcznie przekształcasz konto, pamiętaj o tych kwestiach: Każda wersja pakietu SDK na Androida zawiera nowe funkcje i interfejsy API, poprawki błędów oraz zmiany w działaniu. Sklep Play wymaga zaktualizowania elementu Przed uaktualnieniem pakietu Android SDK przeczytaj informacje o wersji. Zwróć szczególną uwagę na sekcję dotyczącą zmian w zachowaniu, która obejmuje:
Sekcja „Zmiany zachowania” może być dość długa, ale przeczytaj ją uważnie, ponieważ często zawiera ważne zmiany, które musisz wprowadzić w aplikacji. Aby spełnić wymagania Sklepu Play, musisz uaktualnić Aby korzystać z nowych funkcji pakietu SDK w trakcie programowania i zapewnić zgodność podczas kompilacji, uaktualnij wtyczkę Android Gradle (AGP) i Android Studio. Obejmują one nowe i ulepszone narzędzia do obsługi nowych pakietów SDK. Zobacz minimalne wersje narzędzi dla poziomu interfejsu API Androida. Podczas aktualizacji pakietu Android SDK zaktualizuj wszystkie używane biblioteki AndroidX. AndroidX często używa nowych i zaktualizowanych interfejsów API, aby zapewnić lepszą zgodność i wydajność w różnych wersjach pakietu SDK Androida. |
Android Studio |
W ogóle możesz w dowolnym momencie zaktualizować Android Studio. Możesz zobaczyć komunikaty z prośbą o uaktualnienie AGP lub uaktualnienie pakietu Android SDK. Te uaktualnienia są zdecydowanie zalecane, ale nie są wymagane. Jeśli później chcesz użyć Android Studio do uaktualnienia AGP lub pakietu Android SDK, możesz znaleźć te opcje w menu Narzędzia: |
Java |
Jeśli w aplikacji na Androida masz kod źródłowy w języku Java, możesz skorzystać z nowych interfejsów API w tym języku. Każda wersja pakietu Android SDK obsługuje podzbiór interfejsów API Java i funkcji językowych. AGP zapewnia zgodność z niższymi wersjami pakietu SDK Androida za pomocą procesu zwanego desugaringiem. Informacje o wersji pakietu SDK Androida podają, który poziom języka Java jest obsługiwany, oraz potencjalne problemy. Niektóre z tych problemów mogą też dotyczyć kodu źródłowego Kotlina, ponieważ Kotlin ma dostęp do tych samych interfejsów API Javy. Zwróć szczególną uwagę na sekcje interfejsu JDK API, które pojawiają się w sekcji Zmiany w zachowaniu w informacji o wersji, nawet jeśli nie masz kodu źródłowego w języku Java. Korzystanie z JDK jest określone w kilku miejscach w skryptach kompilacji. Więcej informacji znajdziesz w sekcji Wersje Java w kompilacji na Androida. |
Analiza uaktualnienia
Uaktualnianie zależności może wiązać się z ryzykiem związanym ze zmianami interfejsu API i działań, nowymi wymaganiami dotyczącymi użytkowania, nowymi problemami z zabezpieczeniami, a nawet zmianami licencji. Czy na przykład musisz:
- Zmienić kod zmian w interfejsie API?
- Dodać nowe kontrole uprawnień?
- Utworzyć dodatkowe testy lub zmodyfikować istniejące testy, aby uwzględnić zmiany zachowania?
Pamiętaj, że zaktualizowana wersja zależności ma też zaktualizowane wersje swoich zależności. Może to szybko doprowadzić do ogromnej liczby zmian.
Jeśli używasz narzędzia takiego jak Renovate lub Dependabot do automatyzacji uaktualnień, pamiętaj, że nie wykonuje ono żadnej analizy. Zamiast tego uaktualnia biblioteki do najnowszych wersji. Nie zakładaj, że wszystko będzie działać prawidłowo po takich automatycznych uaktualnieniach.
Kluczem do udanego przekształcenia jest analiza uaktualnień:
- Określ różnice w zależnościach przed i po uaktualnieniu.
- Należy przeanalizować każdą zmianę i określić związane z nią ryzyko.
- Zmniejszanie ryzyka lub akceptowanie i odrzucanie zmian.
Sprawdzanie różnic w zależnościach
Pierwszym krokiem w analizie uaktualnienia jest określenie, jak zmienią się zależności. Aby szybko sprawdzać zmiany, korzystaj z kontroli wersji (VCS, np. Git) i wtyczki Dependency Guard. Twoim celem jest utworzenie i porównanie zrzutów przed i po.
Skonfiguruj i utwórz pierwszy element bazowy
Przed rozpoczęciem aktualizacji upewnij się, że projekt został skompilowany.
Najlepiej wyeliminuj jak najwięcej ostrzeżeń lub utwórz punkty odniesienia, które pozwolą Ci monitorować, które ostrzeżenia już się wyświetlały.
- Lint: sprawdź istniejące ostrzeżenia lint oraz utwórz podstawę referencyjną linta na Androida.
- Kompilator Kotlin:
- Aby traktować wszystkie ostrzeżenia jako błędy, włącz funkcję
-Werror
. Dowiedz się, jak definiować opcje. - Warto użyć wtyczek takich jak Kotlin Warning Baseline czy Kotlin Warnings Baseline Generator.
- Aby traktować wszystkie ostrzeżenia jako błędy, włącz funkcję
- Inne narzędzia: jeśli używasz innych narzędzi do analizy statycznej (np. Detekt), które obsługują śledzenie wartości bazowych, skonfiguruj ich wartości bazowe.
Te ostrzeżenia ułatwiają zauważanie nowych ostrzeżeń wprowadzanych podczas aktualizacji zależności.
Utwórz bazę danych zależności, konfigurując i uruchamiając Dependency Guard. W katalogu wersji gradle/libs.versions.toml dodaj:
[versions]
dependencyGuard = "0.5.0"
[plugins]
dependency-guard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" }
Dodaj do pliku kompilacji aplikacji te informacje:
Kotlin
plugins { alias(libs.plugins.dependency.guard) } dependencyGuard { configuration("releaseRuntimeClasspath") }
Groovy
plugins { alias(libs.plugins.dependency.guard) } dependencyGuard { configuration('releaseRuntimeClasspath') }
Konfiguracja releaseRuntimeClasspath
jest prawdopodobnie celem, ale jeśli chcesz użyć innej konfiguracji, uruchom ./gradlew dependencyGuard
bez konfiguracji wymienionej w pliku kompilacji, aby wyświetlić wszystkie dostępne konfiguracje.
Po zakończeniu konfiguracji uruchom ./gradlew dependencyGuard
, aby wygenerować raport w app/dependencies/releaseRuntimeClasspath.txt
. To jest raport podstawowy.
Aby zapisać plik, zatwierdź go w systemie kontroli wersji (VCS).
Pamiętaj, że Dependency Guard rejestruje tylko listę zależności biblioteki. W plikach kompilacji znajdują się inne zależności, np. wersje pakietu SDK Androida i JDK. Zmiany w VCS przed zmianami zależności pozwalają VCS diff na wyróżnienie tych zmian.
Uaktualnianie i porównywanie z wartością odniesienia
Gdy masz już wartości bazowe, zaktualizuj zależności i inne zmiany w kompilacji, które chcesz przetestować. Na tym etapie nie aktualizuj kodu źródłowego ani zasobów.
Uruchom ./gradlew lint
, aby wyświetlić nowe ostrzeżenia lub błędy lint. Rozwiąż wszystkie ważne problemy, a następnie zaktualizuj wartości odniesienia ostrzeżenia, wykonując ./gradlew lint
-Dlint.baselines.continue=true
. Jeśli używasz innych narzędzi do rejestrowania wartości bazowych ostrzegawczych, takich jak Kotlin Ostrzeżenie Baseline lub Generator ostrzeżeń Kotlin, rozwiąż nowe ostrzeżenia i zaktualizuj też ich wartości bazowe.
Aby zaktualizować raport podstawowy, uruchom raport ./gradlew dependencyGuard
. Następnie uruchom różnice w VCS, aby zobaczyć zmiany niezwiązane z biblioteką. Prawdopodobnie zawiera ona znacznie więcej uaktualnień biblioteki, niż Ci się wydaje.
Analizowanie zagrożeń
Gdy dowiesz się, co się zmieniło, zastanów się nad możliwymi zagrożeniami związanymi z każdą uaktualnioną biblioteką. Pomoże Ci to skoncentrować się na testowaniu lub dokładniejszym badaniu zmian. Aby zapewnić spójność analizy, określ zestaw zagrożeń, które mają być analizowane w przypadku Twojego projektu.
O czym warto pamiętać:
Główne wzrosty wersji |
Czy zmienił się numer wersji głównej? W takiej sytuacji zwracaj szczególną uwagę na biblioteki, których dotyczy problem. Jeśli Twój kod korzysta z jakiegokolwiek eksperymentalnego interfejsu API (który często wymaga użycia adnotacji lub specyfikacji pliku kompilacji), nawet zmiany wersji w ramach wersji podrzędnej lub poprawki, np. przejście z 1.2.3 na 1.3.1 lub z 1.2.3 na 1.2.5, mogą wiązać się z dodatkowymi zagrożeniami. |
Niestabilny interfejs API |
Niektóre wersje bibliotek mogą zawierać niestabilne interfejsy API. Zwykle są to interfejsy API, które są w trakcie tworzenia lub zależą od innego niestabilnego interfejsu API. Zwykle są one ograniczone do wersji wstępnych, takich jak wersje alfa, deweloperskie lub eksperymentalne, ale niektóre biblioteki zawierają interfejsy API oznaczone jako eksperymentalne lub niestabilne. Jeśli to możliwe, unikaj takich interfejsów API. Jeśli musisz ich używać, odnotuj ich użycie i sprawdź, czy w późniejszych wersjach nie nastąpiły zmiany lub usunięcia. |
Dynamiczne działanie |
Niektóre biblioteki działają inaczej w zależności od czynników zewnętrznych. Na przykład biblioteka, która komunikuje się z serwerem, zależy od zmian na tym serwerze.
|
scalanie plików manifestu, |
Biblioteki opublikowane jako archiwa Androida (AAR) mogą zawierać zasoby i pliki manifestu scalone z Twoją aplikacją. Mogą one dodawać nowe uprawnienia i komponenty Androida, takie jak aktywności lub odbiorniki transmisji, które działają pośrednio. |
Aktualizacje w czasie działania |
Niektóre biblioteki korzystają z funkcji, które można aktualizować poza kontrolą aplikacji. Biblioteka może używać Usług Google Play, które są aktualizowane niezależnie od pakietu Android SDK. Inne biblioteki mogą być powiązane z usługami w aplikacji zewnętrznej aktualizowanej niezależnie (często za pomocą AIDL). |
Ile wersji pomijasz? |
Im dłużej czekasz na uaktualnienie biblioteki, tym większe potencjalne ryzyko. Jeśli zauważysz, że wersja zmieniła się znacząco, np. z 1.2.3 na 1.34.5, zwróć szczególną uwagę na tę bibliotekę. |
Przewodniki dotyczące migracji |
Sprawdź, czy biblioteka udostępnia przewodnik po migracji. Może to znacznie skrócić czas analizy ryzyka i planowania działań zapobiegających. Pamiętaj, że obecność takiego przewodnika jest dobrym wskaźnikiem tego, że deweloper zwraca uwagę na zgodność i rozważa możliwość łagodzenia skutków aktualizacji. |
Informacje o wersji |
Zapoznaj się z informacjami o wersji (jeśli zostały udostępnione) w przypadku każdej zmienionej biblioteki. Sprawdź, czy nie ma zmian, które powodują przerwanie działania aplikacji lub nowych wymagań, takich jak dodane uprawnienia. |
Pliki README |
Niektóre pliki README biblioteki zawierają informacje o potencjalnych zagrożeniach, zwłaszcza jeśli biblioteka nie zawiera informacji o wersji. Sprawdź _znane problemy_, zwłaszcza znane problemy z bezpieczeństwem. |
Sprawdzanie znanych luk w zabezpieczeniach |
Platforma Google Play SDK Index śledzi luki w zabezpieczeniach wielu popularnych pakietów SDK. Konsola Play informuje, czy używasz jednego z wymienionych pakietów SDK zawierających znane luki w zabezpieczeniach. Podczas edytowania plików kompilacji w Android Studio IDE sprawdza indeks pakietu SDK i oznacza użycie podatnych wersji bibliotek. Narodowy Instytut Standaryzacji i Technologii (NIST) prowadzi dużą narodową bazę danych o lukach w zabezpieczeniach (NVD). Wtyczka Gradle Dependency Check sprawdza używane zależności pod kątem zgodności z NVD. Aby korzystać z Dependency Check, poproś o klucz interfejsu NVD API, skonfiguruj wtyczkę Gradle i uruchom |
Konflikty wersji |
Czy wersje są rozpoznawane zgodnie z oczekiwaniami? Sprawdź, czy nie ma konfliktów, zwłaszcza dużych różnic między wersjami. Szczegółowe informacje o tym, jak wyszukiwać konflikty, znajdziesz w artykule Rozwiązywanie zależności Gradle. W szczególności w raporcie W miarę możliwości współpracuj z autorami zależności, aby rozwiewać ich zależności. Jeśli Twoja firma na to pozwala, wprowadź zmiany w bibliotece (przesyłanie w górę), aby zwiększyć jej zgodność. |
Sprawdzanie licencji |
Podczas uaktualniania biblioteki sprawdź, czy zmieniły się licencje. Biblioteka może zostać zastąpiona licencją, która nie będzie już zgodna z Twoją aplikacją lub biblioteką. Nowe zależności pośrednie mogą też wprowadzać niezgodne licencje. Szczegółowe informacje o sprawdzaniu bieżącego zestawu licencji w zależności od zależności znajdziesz w artykule Weryfikowanie licencji. |
Ryzyko związane z konserwacją i jakością |
Biblioteki z repozytoriami publicznymi:
|
Oprogramowanie open source a closed source |
Jeśli biblioteka jest typu open source, łatwiej będzie debugować problemy niż w przypadku źródeł zamkniętych, niezależnie od tego, czy są one zawarte w kodzie czy w kodzie biblioteki. Zminimalizuj zależności między zamkniętymi źródłami i poddaj dodatkową kontrolę podczas ich oceny. Czy istnieją dobre alternatywy pasujące do Twojego przypadku użycia? Jakie gwarancje jakości usług są dostępne w przypadku bibliotek z zamkniętym kodem źródłowym? Jeśli zdecydujesz się na użycie zależności open source, przygotuj dodatkowe przypadki testowe, które pomogą ograniczyć ryzyko. |
Uruchamianie kompilacji
Utwórz projekt. Sprawdź, czy nie pojawiły się nowe błędy lub ostrzeżenia. Jeśli uda Ci się ustalić, która biblioteka jest przyczyną tych problemów, zaznacz ją jako bibliotekę, której nie należy aktualizować.
Jeśli zobaczysz nowe ostrzeżenia o obniżeniu wartości, dodaj je jako konkretne zagrożenia dla biblioteki, która je wygenerowała. Mogą one zostać usunięte w kolejnych wersjach. Jeśli chcesz nadal korzystać z tej biblioteki, musisz poświęcić czas na przekształcenie kodu z wykorzystującego wycofane interfejsy API na korzystający z ich zamienników. Możesz też śledzić wycofania, aby wiedzieć, kiedy funkcje zostaną usunięte.
Wykrywanie problemów z interfejsami API za pomocą lint
Android Lint może wykrywać wiele problemów w aplikacji, w tym te, które są wynikiem zmiany wersji zależności lub pakietu Android SDK. Jeśli na przykład uaktualnisz compileSdk
i zaczniesz używać nowych interfejsów API, lint będzie zgłaszać te, które są niedostępne w poprzednich wersjach pakietu SDK.
Lint działa w edytorze Android Studio, zgłaszając problemy podczas wprowadzania zmian.
Zwykle nie uruchamia się jednak w ramach kompilacji w Studio ani w ramach kompilacji z poziomu wiersza poleceń, chyba że używasz wartości docelowych build
lub lint
.
Jeśli używasz ciągłej integracji (CI), uruchom gradlew
build
lub gradlew lint
podczas kompilacji CI (lub co najmniej podczas kompilacji nocnych), aby wykrywać tego typu błędy.
Jeśli nie używasz CI, pamiętaj, aby co najmniej od czasu do czasu uruchamiać gradlew lint
.
Zwróć szczególną uwagę na błędy i ostrzeżenia lint. Niektóre biblioteki są dostarczane z własnymi mechanizmami kontroli lint, które pomagają zapewnić prawidłowe korzystanie z ich interfejsów API. Niektóre nowe wersje biblioteki zawierają nowe ostrzeżenia i błędy dotyczące lintowania, co powoduje generowanie nowych raportów podczas kompilacji.
Zmniejszanie ryzyka
Po określeniu zagrożeń związanych z aktualizacją zdecyduj, jak je ograniczyć:
- Akceptowanie niektórych zagrożeń takimi, jakie są. Niektóre zagrożenia są na tyle niewielkie, że można je zaakceptować, zwłaszcza gdy czas i zasoby na uaktualnienie są ograniczone.
- Od razu odrzucaj zagrożenia. Niektóre ulepszenia mogą wydawać się zbyt ryzykowne, zwłaszcza jeśli masz ograniczony czas lub zasoby, które mogą Ci pomóc w ich złagodzeniu. Jeśli trzeba je uporządkować, skup się na uaktualnieniach niezbędnych w przypadku napotkanych błędów i nowych funkcji.
- Minimalizowanie pozostałych zagrożeń
- Rozważ zgrupowanie uaktualnień w mniejsze, niezależne zestawy zmian. Pozwala to zmniejszyć ogólne ryzyko i umożliwia częściowe cofnięcie zmian.
- szczegółowo analizować zmiany;
- Testuj aplikację, aby sprawdzić, czy nie ma w niej nieoczekiwanych zmian. W razie potrzeby dodaj nowe testy, aby zwiększyć wiarygodność uaktualnienia.
- Jeśli znajdziesz coś podejrzanego, sprawdź źródło (jeśli jest dostępne).
- Wprowadź wymagane zmiany w źródle lub kompilacji.
Dokumentuj swoje decyzje. Jeśli zagrożenia związane z uaktualnieniem stają się problemem podczas uruchamiania aplikacji, udokumentowanie analizy ryzyka może ograniczyć niezbędną analizę błędów.
Weryfikowanie licencji
Deweloperzy bibliotek udzielają licencji na korzystanie z bibliotek. Musisz przestrzegać warunków licencji, w przeciwnym razie nie będziesz mieć dostępu do biblioteki. Niektóre licencje są bardzo rygorystyczne i często wymagają jedynie podania informacji o bibliotece i wyświetlenia jej tekstu użytkownikom. Niektóre z nich są uważane za wirusowe. Jeśli używasz takich bibliotek, musisz zastosować tę samą licencję do swojej aplikacji lub biblioteki.
Licencje mogą się zmieniać w dowolnym wydaniu. Podczas aktualizacji sprawdź, czy używane przez Ciebie zależności są licencjonowane w sposób zgodny z Twoją aplikacją lub biblioteką.
Jeśli licencja jest niezgodna (lub stała się niezgodna), nie możesz używać tej wersji biblioteki. Możesz:
- Skontaktuj się z właścicielem biblioteki i poproś o przedłużenie obowiązywania dotychczasowej licencji lub o przyznanie podwójnej licencji, aby umożliwić korzystanie ze starej licencji.
- Skontaktuj się z zespołem prawnym, aby ustalić, czy możesz zmienić licencję na zgodną.
- Znajdź inną bibliotekę z zgodną licencją i w razie potrzeby zmodyfikuj aplikację.
- Utwórz odgałęzienie ostatniej zgodnej wersji biblioteki (jeśli licencja na to zezwala i jeśli zmiany nie mają charakteru wstecznego) i wprowadź własne zmiany.