Ak sa vám pri načítavaní aktualizácie aplikácií Fotoaparát alebo Záznamník Google zobrazila chyba „neúspešné overenie“, prečítajte si túto príčinu.
Keď Google v októbri uviedol na trh Pixel 5, boli sme nadšení, že sme dostali do rúk jeho nové aplikácie. (Samotný telefón je celkom fajn.) S uvedením Pixela 5 prišli aj nové verzie Fotoaparát Google a Google Recorder aplikácie, ktoré sme zdieľali s komunitou. Keď sa však mnohí používatelia starších zariadení Pixel pokúsili stiahnuť aktualizácie bokom, stretli sa s chybou (uvedenou vyššie). Je zvláštne, že nie každý mal problémy s inštaláciou aktualizácií. Niektorí ich dokázali nainštalovať v pohode, zatiaľ čo iní museli obnoviť továrenské nastavenia, aby mohli nainštalovať nové verzie. Kvôli zdanlivo náhodnej povahe tohto problému ho mnohí označili za chybu. Teraz sme si celkom istí, že tento problém nepochádza z chyby, ale skôr z toho, že spoločnosť Google používa nové rozhranie API v systéme Android 11 na blokovanie aktualizácií bočného načítania.
Ak sa pokúsite bočné načítanie aplikácie Google Camera 8.0 alebo novšia alebo Google Recorder 2.0 alebo novšej na zariadení Pixel so systémom Android 11, zobrazí sa chybové hlásenie, že overenie nebolo úspešné. Aj keď sa pokúsite načítať súbor APK pomocou príkazu shell, nedostanete konkrétnejší dôvod zlyhania inštalácie. Návratový kód inštalácie, ktorý dostanete, je "INSTALL_FAILED_VERIFICATION_FAILURE“, čo vám, žiaľ, nehovorí, prečo sa overenie nepodarí. Preskúmaním logcat môžeme presne zistiť, prečo overenie zlyhá:
AppIntegrityManagerServiceImpl: Integritycheckofcom.google.android.GoogleCameraresult: DENYdueto[Rule: (PACKAGE_NAME EQ com.google.android.GoogleCamera) AND (VERSION_CODE GTE 32045130) AND (APP_CERTIFICATE EQ F0FD6C5B410F25CB25C3B53346C8972FAE30F8EE7411DF910480AD6B2D60DB83) AND NOT (INSTALLER_NAME EQ com.android.vending), DENY]
Podľa tejto správy zlyhala kontrola integrity inštalácie aplikácie Fotoaparát Google, pretože „INSTALLER_NAME“ sa nezhoduje s názvom „com.android.vending“, názvom balíka pre Obchod Google Play. (Pokúšal som sa nainštalovať Google Camera 8.0 pomocou aplikácie APKMirror Installer, čo stojí za to.) Túto správu pridal do systémového denníka používateľom „AppIntegrityManagerServiceImpl“, ktorá je súčasťou novej funkcie Androidu „Integrita aplikácie“. Podľa kódu v AOSP je integrita aplikácie navrhnutá tak, aby poskytovala ďalšiu vrstvu kontrol nad existujúcim overením podpisu APK správcu balíkov. Zdá sa, že rozhranie App Integrity API používa sadu pravidlá rozhodnúť, či povoliť alebo zakázať inštaláciu. Pravidlá poskytuje systémová aplikácia – o ktorej sa domnievame, že ide o služby Google Play – a sú uložené v súbore.
Okrem toho integrita aplikácie aj hovory volala sa iná trieda SourceStampVerifier ak je „zdrojová pečiatka“ vložená do metadát manifestu. Napríklad toto je podľa nás „zdrojová pečiatka“ z Manifestu aplikácie Fotoaparát Google:
<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>
Z toho, čo môžeme povedať, pečiatka zdroja sa používa na overenie podpisu inštalátora balíka. Takže napríklad nemôžete oklamať AppIntegrity, aby povolila inštaláciu, aj keď áno sfalšoval Obchod Play ako inštalatér.
Okrem toho sa nám nepodarilo presne zistiť, ako spoločnosť Google používa AppIntegrity a súvisiace rozhrania API na blokovanie aktualizácií aplikácie Fotoaparát Google a Záznamník Google. Rýchle preskúmanie súboru APK Služieb Google Play odhaľuje, že používa tieto rozhrania API, ale kód je príliš zahmlený na to, aby dával všetkému zmysel. Dokonca sme našli adresár, kde sú uložené pravidlá integrity — /data/system/integrity_rules — ale bolo to málo užitočné, pretože obsahuje iba serializované údaje. Tiež sme nenašli spôsob, ako zakázať overovanie integrity (nezdá sa, že by to bolo také jednoduché ako napr zmena nastavenia), aj keď sa domnievame, že u niektorých funguje obnovenie továrenských nastavení v tom, že Služby Google Play nemajú možnosť inicializovať svoju sadu pravidiel na blokovanie inštalácie. Správa logcat a zavedenie týchto nových rozhraní API v systéme Android 11 silne naznačujú, že toto všetko je zámerné a nie chyba.
Spoločnosť Google sa verejne nevyjadrila k používaniu týchto rozhraní API (a ani to neočakávame) a nereagovali, keď ich oslovili. Máme však niekoľko teórií, prečo blokujú bočné aktualizácie. Po prvé, môžu chrániť ľudí pred inštaláciou nesprávnej verzie aplikácie pre ich zariadenie. Google dodáva konkrétne verzie svojich aplikácií pre konkrétne zariadenia Pixel. Napríklad niekoľko verzií aplikácie Služby prispôsobenia zariadenia možno nájsť online. Aj keď sú všetky inštalovateľné na zariadeniach Pixel, v jednom okamihu to bolo možné stratíte funkciu Živé prepisy na Pixel 4 stiahnutím verzie vytvorenej pre staršie zariadenie Pixel. Ďalším dôvodom môže byť „zlepšenie sledovateľnosti aplikácií s ohľadom na neoprávnenú distribúciu“, ako to vysvetľuje Google v triede SourceStampVerifier.
Zatiaľ iba niekoľko aplikácií Google používa formát balíka aplikácií (napríklad Google Camera a Google Recorder). blokovanie inštalácií mimo obchodu Play, no nevieme, či spoločnosť toto správanie rozšíri aj na svoje ďalšie aplikácie akonáhle sa všetky prepnú na formát AAB. Zvažovali sme aj to, či si prechod na balíky aplikácií nevyžadoval implementáciu integrity aplikácie, ale zistili sme, že už Google má riešenie zvládnuť, keď sa používatelia pokúsia nainštalovať aplikáciu, ktorá nemá všetky požadované časti. Nech je to akokoľvek, nemyslíme si, že Google má v úmysle zablokovať všetky bočné načítanie svojich aplikácií, hoci tieto nástroje im to určite umožňujú.
Ďakujeme vývojárom vvb2060, aviraxp a Quinny899 za pomoc v tomto článku a tďakujeme spoločnosti PNF Software za poskytnutie licencie na používanie JEB Decompiler, profesionálny nástroj reverzného inžinierstva pre aplikácie pre Android.