Pokud se vám při načítání aktualizace aplikací Fotoaparát nebo Záznamník Google zobrazila chyba „neúspěšné ověření“, přečtěte si tuto příčinu.
Když Google v říjnu uvedl na trh Pixel 5, byli jsme nadšeni, že jsme dostali do rukou jeho nové aplikace. (Samotný telefon je docela v pohodě.) S uvedením Pixelu 5 přišly nové verze Fotoaparát Google a Google Recorder aplikace, které jsme sdíleli s komunitou. Když se však mnoho uživatelů starších zařízení Pixel pokusilo načíst aktualizace stranou, narazili na chybu (viz výše). Je bizarní, že ne každý měl problémy s instalací aktualizací. Někteří je dokázali nainstalovat v pořádku, zatímco jiní museli obnovit tovární nastavení, aby mohli nainstalovat nové verze. Kvůli zdánlivě náhodné povaze tohoto problému jej mnozí označili za chybu. Nyní jsme si docela jisti, že tento problém nepochází z chyby, ale spíše z toho, že Google používá nové API v Androidu 11 k blokování aktualizací sideloadingu.
Pokud se pokusíte načíst aplikaci Google Camera 8.0 nebo novější nebo Google Recorder 2.0 nebo novější na zařízení Pixel se systémem Android 11, zobrazí se chybová zpráva, že ověření se nezdařilo. I když se pokusíte načíst soubor APK pomocí příkazu shellu, nezjistíte konkrétnější důvod selhání instalace. Návratový kód instalace, který vám bude poskytnut, je "
INSTALL_FAILED_VERIFICATION_FAILURE“, což vám bohužel neřekne, proč se ověření nezdařilo. Prozkoumáním logcatu se můžeme přesně dozvědět, proč ověření selže: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]
Podle této zprávy selhala kontrola integrity instalace Fotoaparátu Google, protože „INSTALLER_NAME“ neodpovídá „com.android.vending“, názvu balíčku pro Obchod Google Play. (Pokoušel jsem se nainstalovat Google Camera 8.0 pomocí aplikace APKMirror Installer, protože to stojí za to.) Tuto zprávu přidal do systémového protokolu uživatel „AppIntegrityManagerServiceImpl“, která je součástí nové funkce „App Integrity“ systému Android. Podle kódu v AOSP je integrita aplikace navržena tak, aby poskytovala další vrstvu kontrol nad stávající ověření podpisu APK správce balíčků. Zdá se, že rozhraní App Integrity API používá sadu Pravidla rozhodnout, zda instalaci povolit nebo zakázat. Pravidla poskytuje systémová aplikace – o které se domníváme, že jde o služby Google Play – a jsou uloženy v souboru.
Kromě toho integrita aplikace také volá volala další třída SourceStampVerifier pokud je v metadatech Manifestu vloženo „zdrojové razítko“. Například zde je to, o čem věříme, že je „zdrojové razítko“ z Manifestu aplikace Fotoaparát Google:
<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>
Z toho, co můžeme říci, se zdrojové razítko používá k ověření podpisu instalačního programu balíčku. Takže například nemůžete oklamat AppIntegrity, aby povolila instalaci, i když ano zfalšoval Obchod Play jako instalátor.
Kromě toho jsme nebyli schopni přesně zjistit, jak Google používá AppIntegrity a související rozhraní API k blokování doplňkových aktualizací aplikací Fotoaparát Google a Záznamník Google. Rychlé prozkoumání souboru APK Služeb Google Play ukazuje, že používá tato rozhraní API, ale kód je příliš zmatený, než aby dával smysl všemu. Našli jsme dokonce adresář, kde jsou uložena pravidla integrity — /data/system/integrity_rules — ale bylo to málo použitelné, protože obsahuje pouze serializovaná data. Také jsme nenašli způsob, jak zakázat ověřování integrity (nezdá se, že by to bylo tak snadné jako just změna nastavení), i když věříme, že důvodem, proč obnovení továrního nastavení u některých funguje, je to, že Služby Google Play nemají možnost inicializovat svou sadu pravidel a blokovat instalaci. Zpráva logcat a zavedení těchto nových rozhraní API v systému Android 11 silně naznačují, že je to všechno záměrné a nejedná se o chybu.
Google se k používání těchto API veřejně nevyjádřil (a ani to neočekáváme) a nereagovali, když se na něj obrátili s žádostí o komentář. Máme však několik teorií, proč blokují aktualizace stažené z počítače. Za prvé, mohou chránit lidi před instalací nesprávné verze aplikace pro jejich zařízení. Google dodává konkrétní verze svých aplikací do konkrétních zařízení Pixel. Například několik verzí aplikace Služby přizpůsobení zařízení lze nalézt online. I když jsou všechny instalovatelné na zařízení Pixel, v jednu chvíli to bylo možné ztratíte funkci živého přepisu na Pixel 4 stažením verze vytvořené pro starší zařízení Pixel. Dalším důvodem by mohlo být „zlepšení sledovatelnosti aplikací s ohledem na neoprávněnou distribuci“, jak vysvětluje Google ve třídě SourceStampVerifier.
Formát balíčku aplikací zatím používá jen několik aplikací Google (jako Fotoaparát Google a Záznamník Google). blokování instalací mimo Obchod Play, ale nevíme, zda společnost toto chování rozšíří i na své další aplikace jakmile se všechny přepnou na formát AAB. Zvažovali jsme také, zda přechod na balíčky aplikací nevyžadoval implementaci integrity aplikace, ale zjistili jsme, že již Google má řešení zvládnout, když se uživatelé pokusí nainstalovat aplikaci, která nemá všechna požadovaná rozdělení. Ať už je to jakkoli, nemyslíme si, že Google má v úmyslu blokovat veškeré boční načítání svých aplikací, i když tyto nástroje jim to určitě umožňují.
Děkujeme vývojářům vvb2060, aviraxp a Quinny899 za jejich pomoc v tomto článku a tděkujeme společnosti PNF Software za poskytnutí licence k použití JEB dekompilátor, profesionální nástroj zpětného inženýrství pro aplikace Android.