Vyhledávání na webu

Proč stejná aplikace pro Android funguje na různých telefonech odlišně


Momentálně mám na svém stole dva Android telefony, Google Pixel 9 a OnePlus Open. Před několika dny jsem si všiml, že oznámení z Discordu se okamžitě zobrazovala na mém Pixelu, ale na OnePlus dorážela pozdě. Je to stejná aplikace se stejným číslem verze, používající stejné Wi-Fi připojení a stejný účet Discord. Myslel jsem si, že je to problém Discordu, ale ukázalo se, že tomu tak není. Discord je jen jedna z mnoha aplikací, které se chovají odlišně na různých Android telefonech, a existuje několik důvodů, proč tomu tak je.

Hluběji jsem se podíval, abych zjistil, a tady je to, co jsem objevil.

Pravděpodobně nepoužíváte stejný APK

Jak Google přizpůsobuje každou instalaci zařízení

Od roku 2021 Google vyžaduje, aby všechny nové aplikace na jeho Play Storu byly publikovány jako Android App Bundles (AAB) místo tradičních souborů APK. AAB nejsou instalovatelné soubory, jsou spíše jako plány pro skutečný soubor. Když stisknete Instalovat, servery Google analyzují konkrétní zařízení, na kterém se nacházíte (architektura CPU, hustota obrazovky, nastavení jazyka atd.) a vytvoří vlastní APK přímo pro ten telefon. Systém se nazývá Dynamic Delivery.

Takže pokud nainstaluji aplikaci pro úpravu fotografií na svůj Pixel a svůj OnePlus Open, nedostanu stejný soubor. Google rozdělí balíček aplikace a každému telefonu předá jiný balíček. Obě zařízení běží na ARM, takže dostanou nativní knihovny vytvořené pro tento typ čipu.

Ale GPU je jiný příběh: Tensor G4 v Pixelu je spárován s ARM Mali-G715, zatímco Snapdragon 8 Gen 2 v OnePlus používá Adreno 740 od Qualcommu. Pro aplikace, které ve svém manifestu deklarují podporu komprese textur OpenGL (hlavně hry), může Google Play nasměrovat různé zdroje na každé zařízení podle toho, co GPU podporuje.

I když je hustota pixelů na obou zařízeních podobná, Google Play může načítat různé obrazové zdroje na základě většího panelu na OnePlus.

Jinými slovy, ta „stejná aplikace“, kterou spouštíte na dvou různých telefonech, může mít na každém z nich významně odlišný kód. To je záměrné a obecně to je dobrá věc, protože to pomáhá aplikacím načítat se rychleji a zabírat méně místa ve vašem telefonu než dříve. Znamená to také, že rozdíly v chování jsou v podstatě nastaveny při doručení, ještě před tím, než aplikaci vůbec spustíte.

S ještě větším počtem různých telefonů mohou být rozdíly v architektuře CPU významné. Jeden telefon může získat knihovnu pro hardwarovou akceleraci, kterou druhý nepodporuje.

Výrobce telefonu také přidává vrstvu

Správa baterií OEM je dobrým příkladem

I když vaše dva telefony dostanou v podstatě stejný APK, nemusí se přesto chovat stejně. Je to proto, že Android není opravdu jedna jediná věc. Google vydává Android Open Source Project, neboli AOSP, a pak výrobci (OEM) jako Samsung, Xiaomi, OnePlus a Oppo vezmou tento základ a přidají na něj svou vlastní vrstvu, jako je One UI, HyperOS, ColorOS a podobně.

Jedním z největších míst, kde to dělá rozdíl, je to, jak se vypořádávají se správou procesů na pozadí.

Google představil režim Doze v Androidu 6.0, aby omezil to, co mohou aplikace dělat, když je váš telefon nečinný. Výrobci však nemusí zůstat pouze u toho. Mnozí z nich mohou nad základní nastavení Androidu přidat agresivnější politiky úspory baterie, takže stejná aplikace se může na různých telefonech chovat úplně jinak.

Web Don't Kill My App sleduje tento problém už roky. Jejich data ukazují, že výrobci telefonů jako Samsung, OnePlus, Xiaomi, Huawei a Oppo jsou zvláště agresivní. Například Samsung omezuje práci na pozadí pro aplikace, které jste nedávno neotevřeli, zatímco systém oprávnění automatického spouštění u Xiaomi může úplně zablokovat spouštění aplikací.

Jeden vývojář napsal o aplikaci pro sledování bezpečnosti, kterou vytvořil a která musela běžet po celý den a noc na telefonech starších uživatelů, ale narazil na problémy u různých výrobců (OEM), kteří po OTA aktualizacích softwaru resetovali oprávnění pro výjimku baterie, což znamenalo, že funkčnost přestala fungovat pokaždé, když uživatel svůj telefon aktualizoval.

Podle Android Police mnoho vývojářů identifikuje, kteří výrobci OEM se „chovají špatně“, jen tím, že se podívají na jejich recenze v obchodě Play Store. Vývojáři si všimli, že negativní zpětná vazba týkající se funkcí závislých na běhu na pozadí se často shlukuje kolem konkrétních značek telefonů. To zahrnuje věci jako zpoždění oznámení, chybějící budíky nebo fitness aplikace, které už neběží na pozadí.

Kromě chování na pozadí jsou některé funkce aplikace poskytovány podmíněně na základě hardwaru. Google umožňuje vývojářům deklarovat hardwarové požadavky v manifestech jejich aplikací (věci jako NFC, specifické kamery nebo gyroskopy). Pokud vaše telefon tuto funkci nemá, aplikace se nenainstaluje nebo, pokud ano, bude se zobrazovat s těmito funkcemi deaktivovanými.

Vývojáři používající Dynamic Delivery mohou definovat modulové funkce, nebo části funkcionality, které se stáhnou pouze tehdy, pokud jsou splněny určité podmínky, například množství RAM ve vašem telefonu.

Co s tím vlastně můžete udělat

Začněte s nastavením baterie, pak pokračujte směrem ven






Na OnePlus můžete přejít do Nastavení > Baterie > Optimalizace baterie, najít svou aplikaci a nastavit ji na „Neoptimalizovat.“ Také zkontrolujte Nastavení > Aplikace > Speciální přístup aplikací > Automatické spuštění, abyste se ujistili, že aplikace má povoleno se sama spouštět. U jiných telefonů navštivte web Don't Kill My App pro podrobné návody pro každého hlavního výrobce zařízení.

Pokud to není problém s politikou baterie, obvykle s tím jde udělat méně: chybějící hardware je chybějící hardware. Jednou z možností může být nainstalovat univerzální APK ze stránky jako APKMirror a zjistit, zda to funguje.

Android je stále docela fragmentovaný

Android musí běžet na tisících modelů zařízení od desítek výrobců. To, že většina aplikací funguje tak dobře napříč veškerým tímto hardwarem, je opravdu působivé. Znamená to ale také, že „ta samá aplikace“ je zřídka kdy skutečně stejná aplikace. Google Play vám poskytuje přizpůsobenou binární verzi odpovídající CPU, obrazovce a jazyku vašeho zařízení, zatímco váš výrobce může nad Androidem aplikovat vlastní zásady správy baterie a procesů. Navíc samotná aplikace může při běhu rozhodovat na základě toho, kolik RAM nebo výpočetního výkonu detekuje. To je hodně proměnných.

Související články