Kompatybilność Android z aplikacjami

Kompatybilność Android z aplikacjami
AN
  • Rejestracja: dni
  • Ostatnio: dni
0

Posiadam Huawei 10 Mate S z systemem Android 8.0.0.

Jakieś 3 lata temu zainstalowałem sobie apkę Fucha https://play.google.com/store/apps/details?id=com.fucha&hl=pl&gl=US , trochę się pobawiłem i odinstalowałem. Obecnie, jak wyszukuję w Google Play tą aplikację, to pokazuje, ze aplikacja nie jest dostępna dla mojego urządzenia.

Czy na podstawie tego faktu można stwierdzić, ze w międzyczasie od którejś wersji ta apka wymaga API Androida nowszego niż API 26 (numer API wg https://pl.wikipedia.org/wiki/Wersje_systemu_Android)? Jeżeli tak, to czy gdyby nie odinstalował Fuchy, to czy ona by się aktualizowała samoczynnie, ale tylko ostatniej wersji, która jest kompatybilna z API 26, a potem przestanie się aktualizować, czy sama się usunie, czy co się stanie?

Druga sprawa jest następująca: Na moim telefonie mam apkę ZXing https://play.google.com/store/apps/details?id=com.google.zxing.client.android . Ja z tego korzystam, u mnie dobrze działa. Niedawno musiałem zainstalować jakąś apkę do QR kodów na cudzym telefonie, nie pamiętam jaki, ale tak na oko, mający nie więcej niż 2 lata. Przy próbie zainstalowania ZXIng pokazał się komunikat, że aplikacja jest za stara do tego systemu Android. Koniec końców, zainstalowałem jakąś inną apkę do QR kodów znalezioną w Google Play. Czym to może być spowodowane? Jeżeli Apka jest zrobiona z nowszym API niż w danym telefonie, to wiadomo, że nie zadziała. Ale sytuacja odwrotna, czyli system Android nowszy niż wersja, do której jest zrobiona apka, to co może być przeszkodą w instalacji i użytkowaniu?

KE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 761
2
  1. Z tego co wiem, to nic się samo nie skasuje - to byłby jakiś absurd :P powinna zostać w starej wersji. Problem będzie, gdy ją usuniesz, a potem spróbujesz ponownie zainstalować, to już się nie uda. Miałem tak z aplikacją z ING na starym telefonie, trzeba było szukać starszej wersji na apkpure albo jakichś podobnych stronkach. Google Play nie ma funkcji pobrania starszej wersji (co faktycznie jest głupie).
  2. Chyba w drugą stronę też może być problem - kiedyś trafiłem na ten przypadek, ale już nie pamiętam o co chodziło. Ale twój przypadek ma miejsce na moich urządzeniach (2 telefony, jeden sprzed 3 lat, drugi sprzed pewnie 7):
    screenshot-20240921173059.png
AN
  • Rejestracja: dni
  • Ostatnio: dni
1

Z tego, co wiem, na początku, jak tworzy się apkę na Androida, to wybiera się poziom API wyrazony liczbą od 1 do ok. 30 w zależności od wersji Android. Każda wersja Android ma przypisany poziom API, czyli uruchomi apkę o poziomie API właśnie tym lub niższym. Czy też jest minimalny poziom API, jaki musi mieć apka, żeby ją uruchomić?

Jeżeli "aplikacja nie jest dostępna dla urządzenia", to jak sprawdzić, jakie warunki musi spełniać dane urządzenie, żeby uruchomić (minimalna i maksymalna wersja Androida, poziom API itp)?

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
0

Mam konto w Google Play i co jakiś czas Google upomina się o aktualizacje aplikacji.

Np. 17.07.2024 dostałem taką wiadomość:

screenshot-20240921225536.png

Jak kompiluję aplikację dla Androida w Unity, to mam dwie istotne opcje jeśli chodzi o wersję API.

screenshot-20240921225919.png

Nawet jak Target API Level jest wyższy niż Minimum API Level, to aplikacja będzie działać na urządzeniu z Androidem z niższą wersją API.
Jednocześnie wymóg Google Play jest spełniony.

AN
  • Rejestracja: dni
  • Ostatnio: dni
0

Nawet jak Target API Level jest wyższy niż Minimum API Level, to aplikacja będzie działać na urządzeniu z Androidem z niższą wersją API.

Weźmy ten przykład na screenie, czyli Target=35 i Minimum=22. Rozumiem, że aplikacja z takimi parametrami wymaga Android z API nie niższym od 22, na starszym nie zadziała, bo nie zawiera czegoś, co zostało dołożone w wersji 22 i jest w każdej kolejnej. W takim razie, czym jest i jakie znaczenie ma Target API?

Jednocześnie wymóg Google Play jest spełniony.

Jaki to jest wymóg ze strony Google Play? Wybór poziomu targetu determinuje tylko, z którą wersją Adroida będzie ta aplikacja kompatybilna, zakładając, że jak wybierze się poziom np. 21, to apka będzie kompatybilna ze wszystkimi Androidami od wersji 5.0 do najnowszego w zamian za to, że nie będzie możliwe użycie funkcjonalności systemowej, która doszła w późniejszych wersjach Androida. Czy to tak właśnie jest?

Już pomijam to, że utrzymywanie kompatybilności z wersją sprzed 10 lat ma wątpliwy sens. Z drugiej strony, jak apka nie potrzebuje nowszych elementów API, to nie ma sensu czynić jej niekompatybilną ze starą wersją systemu.

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
0

Nie znam wszystkich szczegółów kryjących się za wyborem wersji API.
Może przeczytaj kilka wypowiedzi stąd: https://stackoverflow.com/questions/24510219/what-is-the-difference-between-min-sdk-version-target-sdk-version-and-comp

Jaki to jest wymóg ze strony Google Play? Wybór poziomu targetu determinuje tylko, z którą wersją Adroida będzie ta aplikacja kompatybilna, zakładając, że jak wybierze się poziom np. 21, to apka będzie kompatybilna ze wszystkimi Androidami od wersji 5.0 do najnowszego w zamian za to, że nie będzie możliwe użycie funkcjonalności systemowej, która doszła w późniejszych wersjach Androida. Czy to tak właśnie jest?

ChatGPT napisał:

Aplikacja, która korzysta z funkcji niedostępnych dla wersji Androida odpowiadającej ustawieniu Minimum API Level, nie otrzyma automatycznie tych funkcji na starszych urządzeniach. Oznacza to, że musisz zarządzać kompatybilnością ręcznie, aby zapobiec awariom na urządzeniach z niższymi wersjami API.

I dał taki przykład tworzenia rozwiązań dla różnych wersji API:

Kopiuj
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Kod dla funkcji dostępnych od Androida 5.0 (API 21)
} else {
    // Alternatywa dla starszych wersji
}
XX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

@andrzejlisek

W takim razie, czym jest i jakie znaczenie ma Target API?

minSdkVersion <= targetSdkVersion <= compileSdkVersion

Wersja targetSDK mówi dla jakiej wersji aplikacja została napisana i przetestowana. Pozwala to skorzystać z nowszych API jednocześnie uniemożliwiając nowszym telefonom zmianę zachowania aplikacji. Dopóki nie zaktualizujesz target sdk, możesz używać aplikacji na nowszym urządzeniu bez problemu że zachowanie apki na androidzie 15 będzie inne od tego na androidzie 14

AN
  • Rejestracja: dni
  • Ostatnio: dni
0

W takim razie proste pytanie:
minSdkVersion = 33 (Android 13)
targetSdkVersion = 34 (Android 14)
compileSdkVersion = 35 (Android 15)
Z którymi wersjami Androida aplikacja będzie kompatybilna, a więc będzie gwarantowane, że będzie działać zgodnie z oczekiwaniami? Od Android 13 w górę, czy od 14 w górę?

Spine
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6968
0

@andrzejlisek: https://medium.com/@iamnajmudheen7311/demystifying-target-sdk-and-compile-sdk-in-android-development-6ec401e79ade

The compileSdkVersion should not be lower than the targetSdkVersion . In fact, the compileSdkVersion should typically match or be higher than the targetSdkVersion to ensure compatibility and access to the necessary APIs and libraries.

Using a higher compileSdkVersion than the targetSdkVersion could lead to compatibility issues, as the build process may use newer APIs that are not available on the target SDK version. Therefore, it is important to ensure that the compileSdkVersion is equal to or greater than the targetSdkVersion to maintain compatibility and avoid potential runtime errors.

Rzeczywiście zagmatwana sprawa...
I szkoda, że na developerów czyhają pułapki w postaci runtime errors...

Chat GPT odpowiada na Twoje pytanie w taki sposób:

Aplikacja będzie kompatybilna od Androida 13 (API 33) w górę.

Wyjaśnienie:

  • minSdkVersion = 33 (Android 13) oznacza, że minimalną wymaganą wersją systemu Android do uruchomienia aplikacji jest Android 13. Na wcześniejszych wersjach (poniżej Androida 13) aplikacja nie będzie działać w ogóle.

  • targetSdkVersion = 34 (Android 14) oznacza, że aplikacja została zoptymalizowana i przetestowana pod kątem zgodności z Androidem 14. System Android może wprowadzać różne zmiany w działaniu aplikacji w zależności od tej wartości (np. domyślne uprawnienia lub zmiany w zabezpieczeniach). Jednak aplikacja powinna działać poprawnie na urządzeniach z systemem Android 13 i nowszym.

  • compileSdkVersion = 35 (Android 15) oznacza, że aplikacja została skompilowana z użyciem bibliotek SDK dla Androida 15, ale to nie ma wpływu na minimalną wersję Androida wymaganą do jej uruchomienia.

Podsumowując: aplikacja będzie działać od Androida 13 (API 33) i nowszych wersjach Androida (w tym Android 14 i 15).

AN
  • Rejestracja: dni
  • Ostatnio: dni
0

No to teraz wyjaśniło się, co decyduje o minimalnej wersji Androida, na której dana aplikacja będzie działać. Natomiast nadal nie wiadomo, co decyduje o maksymalnej wersji Androida, co miało miejsce w przypadku wspomnianego ZXing.

A może oprócz samej wersji systemu potrzebne jest spełnianie innych warunków? Jak sprawdzić, jakie to warunki i czy dany telefon je spełnia?

Wobec trzech omówionych wyżej parametrów, można wnioskować, że nawet zapomniana i nieaktualizowana apka powinna działać nawet na najnowszym telefonie?

XX
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

@andrzejlisek

Starting from 1 Nov 2022, apps that don't target an API level within two years of the latest Android release (API 29 and below) won't be available to new users with devices running Android versions newer than your app's target API level. This means that new users won't be able to discover or install your app on Google Play

I nowszy komunikat

Starting August 31 2024:
New apps and app updates must target Android 14 (API level 34) to be submitted to Google Play (except for Wear OS and Android TV apps, which must target Android 13 or higher).
Existing apps must target Android 13 (API level 33) or higher to remain available to new users on devices running Android OS higher than your app’s target API level. Apps that target Android 12 (API level 31) or lower ( Android 10 or lower for Wear OS and Android 11 or lower for TV OS), will only be available on devices running Android OS that are the same or lower than your apps’ target API level.

Rozwiązaniem jest aktualizacja targetSDK - bo to właśnie on zapewnia kompatybilność z z nowszymi wersjami. Najlepiej robić to co 1-2 lata. W przypadku tej apki ZXing i Twojego znajomego wyglada na to, że twórcy apki nie podbili targetSDK więc została zablokowana w sklepie dla nowych urządzeń.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.