Kompatybilność Android z aplikacjami

Kompatybilność Android z aplikacjami
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 6 godzin
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?

edytowany 5x, ostatnio: andrzejlisek
KE
  • Rejestracja:około 6 lat
  • Ostatnio:około 5 godzin
  • Postów:661
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
edytowany 1x, ostatnio: kelog
marian pazdzioch
To nie jest głupie, stara wersja oznacza że nowa jest lepsza a stara jest potencjalnie niebezpieczna.
KE
Jest to jakiś argument za, ale według mnie jest głupie, bo gdybym nie wiedział, że istnieją serwisy typu apkpure, to pewnie bym pomyślał, że muszę wydać ~1000 zł na nowy telefon, co obsłuży aplikację ING. A tak nic nie musiałem wydać. (do czasu, bo potem to przestało działać xD ale to już wina banku)
marian pazdzioch
Właśnie dokładnie podałeś przykład czemu powinieneś wydać tysia na telefon - apka bankowa raz że wie lepiej kiedy ma działać i na jakim telefonie. Dwa że serio pobralbys apkę bankową z jakiegoś mirrora (który zapewne dodaje tam swój malware do tej binarki)? Mirror to potencjalne źródło wirusów i skamow, szczególnie w dziedzinie banków.
KE
Liczyłem się z ryzykiem (fakt) i nie było problemów. Nie będzie mi google ani nikt mówić, jak mam korzystać ze sprzętu, którego jestem właścicielem. Jeśli producent aplikacji stwierdza, że sobie udupi stare telefony, choć starsza wersja świetnie działa (i to tylko dlatego, że była po prostu wcześniej wgrana) i nie wyświetla komunikatów o poważnym zagrożeniu bezpieczeństwa, to kij im w oko i sobie sam znajdę sposób, jeśli playstore decyduje się tak pogrywać.
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 6 godzin
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)?

edytowany 1x, ostatnio: andrzejlisek
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:4 minuty
  • Postów:6626
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:prawie 19 lat
  • Ostatnio:około 6 godzin
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:prawie 22 lata
  • Ostatnio:4 minuty
  • Postów:6626
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:10 miesięcy
  • Ostatnio:3 dni
  • Postów:13
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:prawie 19 lat
  • Ostatnio:około 6 godzin
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ę?

XX
Od 13 w górę. minSdk zapewnia kompatybilność wsteczna, a target z nowymi wersjami
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:4 minuty
  • Postów:6626
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).


🕹️⌨️🖥️🖱️🎮
edytowany 5x, ostatnio: Spine
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 6 godzin
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?

edytowany 2x, ostatnio: andrzejlisek
XX
Można powiedzieć że targetSDK decyduje, bo jak będzie za niski w porównaniu do najnowszej wersji to na niej nie pójdzie.
XX
  • Rejestracja:10 miesięcy
  • Ostatnio:3 dni
  • Postów:13
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ń.

XX
Jak ten czas szybko leci. Kilka miesięcy temu sam z teamem testowałem naszą apke ze względu właśnie na podbicie targetu
Sensacyjny Sebastian
Czyli jest to nie tyle ograniczenie na poziomie systemu, co na poziomie Google Play.
AN
W taki razie, jak z Google Play pobrać niby "niedostepną" apkę na własną odpowiedzialność i bez gwarancji, że będzie działać?
XX
@andrzejlisek: ale taka aplikacja nie jest „niby niedostępna” tylko rzeczywiście nie ma możliwości zainstalowania jej przez sklep play. Poszukaj jak zainstalować mają apk, albo bez sklepu play - w googlach jest dużo sposobów przedstawionych
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)