Iată de ce nu puteți încărca actualizările pentru Camera și Recorder Google

Dacă ați observat o eroare de „verificare eșuată” atunci când încărcați o actualizare pentru aplicațiile Google Camera sau Recorder, citiți aceasta pentru a afla de ce.

Când Google a lansat Pixel 5 în octombrie, am fost încântați să punem mâna pe noile sale aplicații. (Telefonul în sine este destul de misto, de asemenea.) Odată cu lansarea Pixel 5 au apărut noi versiuni ale Camera Google și Google Recorder aplicații pe care le-am partajat comunității. Cu toate acestea, atunci când mulți utilizatori de dispozitive Pixel mai vechi au încercat să descarce actualizările, s-au întâmpinat cu o eroare (afișată mai sus). În mod bizar, nu toată lumea a avut probleme cu instalarea actualizărilor. Unii au putut să le instaleze foarte bine, în timp ce alții au trebuit să resetați din fabrică doar pentru a putea instala noile versiuni. Din cauza naturii aparent aleatorii a acestei probleme, mulți au atribuit-o la o eroare. Suntem destul de încrezători acum că această problemă nu provine dintr-o eroare, ci mai degrabă din utilizarea de către Google a unui nou API în Android 11 pentru a bloca actualizările de încărcare laterală.

Dacă încercați să încărcați Google Camera 8.0 sau o versiune ulterioară sau Google Recorder 2.0 sau o versiune ulterioară pe un dispozitiv Pixel care rulează Android 11, veți vedea un mesaj de eroare care spune că verificarea nu a putut reuși. Chiar dacă încercați să descărcați APK-ul folosind o comandă shell, nu veți obține un motiv mai precis pentru eșecul instalării. Codul de retur de instalare care vi se va da este "INSTALL_FAILED_VERIFICATION_FAILURE„, care, din păcate, nu vă spune de ce nu reușește verificarea. Examinând logcat-ul, putem afla exact de ce eșuează verificarea:

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]

Conform acestui mesaj, o verificare a integrității instalării camerei Google a eșuat, deoarece „INSTALLER_NAME” nu se potrivește cu „com.android.vending”, numele pachetului pentru Google Play Store. (Încercam să instalez Google Camera 8.0 folosind aplicația APKMirror Installer, pentru cât valorează.) Acest mesaj a fost adăugat în jurnalul de sistem de către „AppIntegrityManagerServiceImpl", care face parte din noua funcție Android „Integritatea aplicației”. Conform codului din AOSP, App Integrity este concepută pentru a oferi un nivel suplimentar de verificări pe lângă verificarea semnăturii APK existentă a managerului de pachete. API-ul App Integrity pare să folosească un set de Reguli pentru a decide dacă se permite sau nu instalarea. Regulile sunt furnizate de o aplicație de sistem – despre care credem că sunt serviciile Google Play – și sunt stocate într-un fișier.

În plus, App Integrity de asemenea apeluri o altă clasă numită SourceStampVerifier dacă o „ștampilă sursă” este încorporată în metadatele Manifestului. De exemplu, iată ceea ce credem că este „ștampila sursă” din Manifestul aplicației Google Camera:

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

Din câte putem spune, ștampila sursă este folosită pentru a verifica semnătura programului de instalare a pachetului. Deci, de exemplu, nu puteți păcăli AppIntegrity să permită instalarea chiar dacă dvs a falsificat Magazinul Play ca instalator.

În plus, nu am reușit să aflăm exact cum folosește Google AppIntegrity și API-urile aferente pentru a bloca încărcarea laterală a actualizărilor pentru aplicațiile Google Camera și Google Recorder. O examinare rapidă a APK-ului Serviciilor Google Play dezvăluie că folosește aceste API-uri, dar codul este prea obscurcat pentru a înțelege cu adevărat totul. Am găsit chiar și directorul în care sunt stocate regulile de integritate — /data/system/integrity_rules — dar a fost de puțin folos, deoarece conține doar date serializate. De asemenea, nu am găsit o modalitate de a dezactiva verificarea integrității (nu pare să fie la fel de ușor ca modificarea unei setari), deși credem că motivul pentru care resetarea din fabrică funcționează pentru unii este că serviciile Google Play nu au șansa de a-și inițializa setul de reguli pentru a bloca instalarea. Mesajul logcat și introducerea acestor noi API-uri în Android 11 sugerează cu tărie că totul este prin design și nu este o eroare, totuși.

Google nu a comentat public cu privire la utilizarea acestor API-uri (și nici nu ne așteptăm să o facă) și nu a răspuns când a fost contactat pentru comentarii. Cu toate acestea, avem câteva teorii de ce blochează actualizările cu încărcare laterală. În primul rând, ar putea proteja oamenii de instalarea versiunii greșite a aplicației pentru dispozitivul lor. Google oferă versiuni specifice ale aplicațiilor sale pe anumite dispozitive Pixel. De exemplu, mai multe versiuni ale aplicației Servicii de personalizare a dispozitivului pot fi găsite online. Chiar dacă toate sunt instalabile pe dispozitive Pixel, a fost posibil la un moment dat pierdeți funcția Subtitrări live pe Pixel 4 prin descărcarea unei versiuni create pentru un dispozitiv Pixel mai vechi. Un alt motiv ar putea fi „îmbunătățirea trasabilității aplicațiilor în ceea ce privește distribuția neautorizată”, așa cum a explicat Google în clasa SourceStampVerifier.

Până acum, doar câteva dintre aplicațiile Google care utilizează formatul de pachet de aplicații (cum ar fi Google Camera și Google Recorder) sunt blocarea instalărilor non-Play Store, dar nu știm dacă compania va extinde acest comportament la celelalte aplicații ale sale odată ce toate trec la formatul AAB. De asemenea, ne-am gândit dacă trecerea la pachetele de aplicații a necesitat implementarea App Integrity, dar am constatat că Google deja are o solutie pentru a gestiona atunci când utilizatorii încearcă să instaleze o aplicație care nu are toate diviziunile necesare. Oricare ar fi cazul, nu credem că Google intenționează să blocheze toate încărcările laterale ale aplicațiilor sale, deși aceste instrumente le permit cu siguranță să facă acest lucru.

Mulțumim dezvoltatorilor vvb2060, aviraxp și Quinny899 pentru asistența acordată în acest articol șiMulțumim software-ului PNF pentru că ne-a oferit o licență de utilizare Decompiler JEB, un instrument de inginerie inversă de calitate profesională pentru aplicații Android.