Tukaj je razlog, zakaj ne morete prenesti posodobitev v Google Fotoaparat in Snemalnik

Če ste pri stranskem nalaganju posodobitve za aplikacije Google Camera ali Snemalnik videli napako »preverjanje ni uspelo«, preberite to, da ugotovite, zakaj.

Ko je Google oktobra predstavil Pixel 5, smo bili navdušeni, da smo dobili v roke njegove nove aplikacije. (Sam telefon je precej kul.) S predstavitvijo Pixela 5 so prišle nove različice Google Camera in Google Snemalnik aplikacije, ki smo jih delili s skupnostjo. Ko pa je veliko uporabnikov starejših naprav Pixel poskušalo posodobitve prenesti s strani, so naleteli na napako (prikazano zgoraj). Nenavadno, niso vsi imeli težav z namestitvijo posodobitev. Nekateri so jih lahko dobro namestili, drugi pa so morali ponastaviti na tovarniške nastavitve, da so lahko namestili nove različice. Zaradi na videz naključne narave te težave so jo mnogi označili za napako. Zdaj smo precej prepričani, da ta težava ne izhaja iz hrošča, temveč Googlove uporabe novega API-ja v sistemu Android 11 za blokiranje stranskega nalaganja posodobitev.

Če poskušate Google Camera 8.0 ali novejšo različico ali Google Recorder 2.0 ali novejšo različico prenesti s stranske strani v napravo Pixel s sistemom Android 11, boste videli sporočilo o napaki, ki pravi, da preverjanje ni uspelo. Tudi če poskusite stransko naložiti APK z ukazom lupine, ne boste dobili natančnejšega razloga za neuspešno namestitev. Povratna koda za namestitev, ki jo boste prejeli, je "

INSTALL_FAILED_VERIFICATION_FAILURE«, ki vam žal ne pove, zakaj preverjanje ne uspe. Če pregledamo logcat, lahko natančno ugotovimo, zakaj preverjanje ne uspe:

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]

Glede na to sporočilo preverjanje integritete namestitve Google Camera ni uspelo, ker se »INSTALLER_NAME« ne ujema z »com.android.vending«, imenom paketa za trgovino Google Play. (Poskušal sem namestiti Google Camera 8.0 z aplikacijo APKMirror Installer, kolikor je vredno.) To sporočilo je v sistemski dnevnik dodal "AppIntegrityManagerServiceImpl«, ki je del nove Androidove funkcije »App Integrity«. V skladu s kodo v AOSP je App Integrity zasnovan tako, da zagotavlja dodatno plast preverjanj poleg obstoječega preverjanja podpisa APK upravitelja paketov. Zdi se, da App Integrity API uporablja niz Pravila da se odločite, ali dovolite ali zavrnete namestitev. Pravila zagotavlja sistemska aplikacija – za katero menimo, da so storitve Google Play – in tudi so shranjeno v datoteki.

Poleg tega, App Integrity tudi klice klical je drug razred SourceStampVerifier če je "izvorni žig" vdelan v metapodatke Manifesta. Tukaj je na primer tisto, za kar menimo, da je "izvorni žig" iz manifesta aplikacije Google Camera:

<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>

Kolikor lahko ugotovimo, se izvorni žig uporablja za preverjanje podpisa namestitvenega programa paketa. Tako na primer AppIntegrityja ne morete pretentati, da bi dovolil namestitev, tudi če ponaredil Trgovino Play kot inštalater.

Poleg tega nismo mogli natančno ugotoviti, kako Google uporablja AppIntegrity in povezane API-je za blokiranje stranskega nalaganja posodobitev za aplikacije Google Camera in Google Recorder. Hiter pregled APK-ja storitev Google Play razkrije, da uporablja te API-je, vendar je koda preveč zakrita, da bi vse zares razumelo. Našli smo celo imenik, kjer so shranjena pravila integritete — /data/system/integrity_rules — vendar je bil malo uporaben, ker vsebuje le serializirane podatke. Prav tako nismo našli načina za onemogočanje preverjanja integritete (zdi se, da ni tako enostavno kot spreminjanje nastavitve), čeprav menimo, da je razlog, da ponastavitev na tovarniške nastavitve pri nekaterih deluje, ta, da storitve Google Play nimajo možnosti inicializirati svojega nabora pravil za blokiranje namestitve. Sporočilo logcat in uvedba teh novih API-jev v Android 11 močno nakazujeta, da je vse to načrtovano in ne napaka.

Google ni javno komentiral svoje uporabe teh API-jev (niti ne pričakujemo, da bo), in niso se odzvali, ko so bili pozvani za komentar. Vendar imamo nekaj teorij, zakaj blokirajo stransko naložene posodobitve. Prvič, lahko ščitijo ljudi pred namestitvijo napačne različice aplikacije za njihovo napravo. Google dostavi določene različice svojih aplikacij v določene naprave Pixel. V spletu je na primer mogoče najti več različic aplikacije Device Personalization Services. Čeprav jih je vse mogoče namestiti v naprave Pixel, je bilo to v nekem trenutku mogoče izgubite funkcijo Live Captions na Pixel 4 tako, da prenesete različico, izdelano za starejšo napravo Pixel. Drugi razlog bi lahko bil "izboljšanje sledljivosti aplikacij glede na nepooblaščeno distribucijo", kot je pojasnil Google v razredu SourceStampVerifier.

Doslej je le nekaj Googlovih aplikacij, ki uporabljajo obliko aplikacijskega svežnja (kot sta Google Camera in Google Recorder). blokiranje namestitev, ki niso v Trgovini Play, vendar ne vemo, ali bo podjetje to vedenje razširilo na svoje druge aplikacije ko vsi preklopijo na format AAB. Razmislili smo tudi o tem, ali je prehod na aplikacijske svežnje zahteval implementacijo App Integrity, vendar smo ugotovili, da Google že ima rešitev za obravnavo, ko uporabniki poskušajo namestiti aplikacijo, ki nima vseh zahtevanih razdelkov. Kakorkoli že, menimo, da Google ne namerava blokirati vseh stranskih nalaganj svojih aplikacij, čeprav jim ta orodja to zagotovo omogočajo.

Hvala razvijalcem vvb2060, aviraxp in Quinny899 za njihovo pomoč pri tem članku in thvala PNF Software, ker nam je zagotovil licenco za uporabo JEB Decompiler, profesionalno orodje za obratni inženiring za aplikacije Android.