Her er grunnen til at du ikke kan sidelaste oppdateringer til Google Kamera og opptaker

click fraud protection

Hvis du har sett en "mislykket bekreftelse"-feil når du laster inn en oppdatering til Google Camera- eller Recorder-appene, kan du lese dette for å finne ut hvorfor.

Da Google lanserte Pixel 5 tilbake i oktober, var vi glade for å få tak i de nye appene. (Selve telefonen er ganske kultogså.) Med lanseringen av Pixel 5 kom nye versjoner av Google-kameraet og Google Recorder apper som vi delte med fellesskapet. Men når mange brukere av eldre Pixel-enheter prøvde å sidelaste oppdateringene, ble de møtt med en feil (vist ovenfor). Rart nok hadde ikke alle problemer med å installere oppdateringene. Noen klarte å installere dem helt fint, mens andre måtte tilbakestille fabrikken bare for å kunne installere de nye versjonene. På grunn av den tilsynelatende tilfeldige karakteren av dette problemet, kalkulerte mange det opp til en feil. Vi er ganske sikre nå på at dette problemet ikke stammer fra en feil, men snarere Googles bruk av et nytt API i Android 11 for å blokkere sidelastingsoppdateringer.

Hvis du prøver å sidelaste Google Camera 8.0 eller nyere eller Google Recorder 2.0 eller nyere på en Pixel-enhet som kjører Android 11, vil du se en feilmelding som sier at bekreftelsen ikke kunne lykkes. Selv om du prøver å sidelaste APK-en ved hjelp av en shell-kommando, vil du ikke få en mer spesifikk årsak til installasjonsfeilen. Installasjonsreturkoden du får er "INSTALL_FAILED_VERIFICATION_FAILURE", som dessverre ikke forteller deg hvorfor verifiseringen ikke lykkes. Ved å undersøke logcat kan vi finne ut nøyaktig hvorfor verifiseringen mislykkes:

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]

Ifølge denne meldingen mislyktes en integritetssjekk av Google Kamera-installasjonen fordi "INSTALLER_NAME" ikke samsvarte med "com.android.vending", pakkenavnet for Google Play Store. (Jeg prøvde å installere Google Camera 8.0 ved å bruke APKMirror Installer-appen, for hva den er verdt.) Denne meldingen ble lagt til systemloggen av "AppIntegrityManagerServiceImpl", som er en del av Androids nye "App Integrity"-funksjon. I henhold til koden i AOSP er App Integrity designet for å gi et ekstra lag med kontroller på toppen av pakkebehandlerens eksisterende APK-signaturverifisering. App Integrity API ser ut til å bruke et sett med Regler for å avgjøre om installasjonen skal tillates eller ikke. Reglene leveres av en systemapp – som vi mener er Google Play-tjenester – og er det lagret i en fil.

I tillegg appintegritet ringer også en annen klasse ringte SourceStampVerifier hvis et "kildestempel" er innebygd i manifestets metadata. For eksempel, her er det vi tror er "kildestempelet" fra Google Kamera-appens manifest:

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

Fra det vi kan fortelle, brukes kildestempelet til å bekrefte signaturen til pakkeinstallasjonsprogrammet. Så du kan for eksempel ikke lure AppIntegrity til å tillate installasjonen selv om du forfalsket Play-butikken som installatør.

Utover dette klarte vi ikke å finne ut nøyaktig hvordan Google bruker AppIntegrity og relaterte APIer for å blokkere sidelastingsoppdateringer til Google Kamera- og Google Recorder-appene. En rask undersøkelse av Google Play Services APK avslører at den bruker disse APIene, men koden er for uklar til å virkelig gi mening om alt. Vi fant til og med katalogen der integritetsreglene er lagret - /data/system/integrity_rules - men den var til liten nytte fordi den bare inneholder serialiserte data. Vi har heller ikke funnet en måte å deaktivere integritetsverifisering (det ser ikke ut til å være så enkelt som bare endre en innstilling), selv om vi tror grunnen til at tilbakestilling av fabrikk fungerer for noen er at Google Play Services ikke får en sjanse til å initialisere regelsettet for å blokkere installasjonen. Logcat-meldingen og introduksjonen av disse nye API-ene i Android 11 antyder sterkt at alt dette er av design og ikke en feil.

Google har ikke offentlig kommentert bruken av disse APIene (vi forventer heller ikke at de skal gjøre det), og de svarte ikke da de ble nådd for kommentar. Vi har imidlertid noen teorier om hvorfor de blokkerer sidelastede oppdateringer. For det første kan de beskytte folk mot å installere feil versjon av appen for enheten deres. Google leverer spesifikke versjoner av appene sine til spesifikke Pixel-enheter. For eksempel kan flere versjoner av appen Device Personalization Services finnes på nettet. Selv om de alle er installerbare på Pixel-enheter, var det mulig på et tidspunkt mister Live Captions-funksjonen på Pixel 4 ved å laste ned en versjon laget for en eldre Pixel-enhet. En annen grunn kan være å "forbedre sporbarheten av apper med hensyn til uautorisert distribusjon", som forklart av Google i SourceStampVerifier-klassen.

Så langt er bare noen få av Googles apper som bruker app-pakkeformatet (som Google Camera og Google Recorder) blokkering av ikke-Play Store-installasjoner, men vi vet ikke om selskapet vil utvide denne oppførselen til sine andre apper når de alle bytter til AAB-formatet. Vi vurderte også om overgangen til app-pakker nødvendiggjorde implementering av appintegritet, men vi fant ut at Google allerede har en løsning å håndtere når brukere prøver å installere en app som ikke har alle de nødvendige splittene. Uansett hva tilfellet måtte være, tror vi ikke Google har til hensikt å blokkere all sidelasting av appene sine, selv om disse verktøyene absolutt lar dem gjøre det.

Takk til utviklerne vvb2060, aviraxp og Quinny899 for deres hjelp i denne artikkelen, og ttakker til PNF Software for å gi oss en lisens til bruk JEB Dekompiler, et omvendt utviklingsverktøy av profesjonell kvalitet for Android-applikasjoner.