Tästä syystä et voi ladata Google Kameran ja -tallentimen päivityksiä sivulta

Jos olet nähnyt "epäonnistunut vahvistus" -virheen ladattaessa sivulle päivitystä Google Camera- tai Recorder -sovelluksiin, lue tämä saadaksesi selville syyn.

Kun Google julkaisi Pixel 5:n lokakuussa, olimme innoissamme saadessamme käsiimme sen uudet sovellukset. (Itse puhelin on aika siistiämyös.) Pixel 5:n julkaisun myötä tuli uusia versioita Google Kamera ja Google Recorder sovelluksia, jotka jaoimme yhteisön kanssa. Kuitenkin, kun monet vanhempien Pixel-laitteiden käyttäjät yrittivät ladata päivitykset sivulta, he kohtasivat virheen (näkyy yllä). Kummallista kyllä, kaikilla ei ollut ongelmia päivitysten asentamisessa. Jotkut pystyivät asentamaan ne hienosti, kun taas toisten oli palautettava tehdasasetukset vain, jotta he voisivat asentaa uudet versiot. Tämän ongelman näennäisen satunnaisen luonteen vuoksi monet katsoivat sen virheeksi. Olemme nyt melko varmoja siitä, että tämä ongelma ei johdu virheestä, vaan Googlen käyttämästä uutta sovellusliittymää Android 11:ssä estääkseen päivitysten sivulatauksen.

Jos yrität ladata sivulta Google Camera 8.0:n tai uudemman tai Google Recorder 2.0:n tai uudemman Pixel-laitteeseen, jossa on Android 11, näet virheilmoituksen, jonka mukaan vahvistus ei onnistunut. Vaikka yrittäisit ladata APK: n sivulta shell-komennolla, et saa tarkempaa syytä asennuksen epäonnistumiseen. Asennuksen palautuskoodi, joka sinulle annetaan on "INSTALL_FAILED_VERIFICATION_FAILURE", mikä ei valitettavasti kerro, miksi vahvistus ei onnistu. Tutkimalla logcatia voimme oppia tarkalleen, miksi vahvistus epäonnistuu:

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]

Tämän viestin mukaan Google Kameran asennuksen eheyden tarkistus epäonnistui, koska "INSTALLER_NAME" ei vastannut "com.android.vending", Google Play Kaupan paketin nimeä. (Yritin asentaa Google Camera 8.0:n APKMirror Installer -sovelluksella, sen arvoista.) Tämän viestin lisäsi järjestelmälokiin "AppIntegrityManagerServiceImpl", joka on osa Androidin uutta "App Integrity" -ominaisuutta. AOSP: n koodin mukaan App Integrity on suunniteltu tarjoamaan lisätarkistustaso paketinhallinnan olemassa olevan APK-allekirjoituksen vahvistuksen päälle. App Integrity API näyttää käyttävän joukkoa säännöt päättää, sallitaanko vai kielletäänkö asennus. Säännöt tarjoaa järjestelmäsovellus – jonka uskomme olevan Google Play Palvelut – ja ovat tallennettu tiedostoon.

Lisäksi App Integrity myös soittaa toinen luokka kutsui SourceStampVerifier jos "lähdeleima" on upotettu manifestin metatietoihin. Esimerkiksi tässä uskomme olevan "lähdeleima" Google Kamera -sovelluksen manifestista:

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

Sen perusteella, mitä voimme kertoa, lähdeleimaa käytetään paketin asennusohjelman allekirjoituksen tarkistamiseen. Joten et voi esimerkiksi huijata AppIntegrityä sallimaan asennusta, vaikka sinä huijasivat Play Kauppaa asentajana.

Tämän lisäksi emme pystyneet selvittämään tarkasti, kuinka Google käyttää AppIntegrityä ja siihen liittyviä sovellusliittymiä estääkseen päivitysten sivulatauksen Google Camera- ja Google Recorder -sovelluksiin. Google Play -palveluiden APK: n nopea tarkastelu paljastaa, että se käyttää näitä sovellusliittymiä, mutta koodi on liian hämärtynyt, jotta se voisi todella ymmärtää kaiken. Löysimme jopa hakemiston, johon eheyssäännöt on tallennettu - /data/system/integrity_rules - mutta siitä oli vain vähän hyötyä, koska se sisältää vain sarjoitettuja tietoja. Emme myöskään ole löytäneet tapaa poistaa eheyden vahvistusta käytöstä (se ei näytä olevan niin helppoa kuin vain asetuksen muuttaminen), vaikka uskomme syyn siihen, että tehdasasetusten palauttaminen toimii joillakin, koska Google Play Palvelut eivät saa mahdollisuutta alustaa sääntöään estääkseen asennuksen. Logcat-viesti ja näiden uusien sovellusliittymien käyttöönotto Android 11:ssä viittaavat vahvasti siihen, että tämä kaikki on suunniteltu eikä vika.

Google ei ole julkisesti kommentoinut näiden sovellusliittymien käyttöä (emmekä odota niiden vastaavan), eivätkä he vastanneet, kun niitä pyydettiin kommentoimaan. Meillä on kuitenkin muutamia teorioita, miksi ne estävät sivulta ladatut päivitykset. Ensinnäkin ne voivat suojella ihmisiä asentamasta väärää sovelluksen versiota laitteelleen. Google toimittaa tiettyjä versioita sovelluksistaan ​​tietyille Pixel-laitteille. Esimerkiksi useita versioita Device Personalization Services -sovelluksesta löytyy verkosta. Vaikka ne kaikki ovat asennettavissa Pixel-laitteille, se oli mahdollista yhdessä vaiheessa menettää livetekstitysominaisuuden Pixel 4:ssä lataamalla vanhemmalle Pixel-laitteelle rakennetun version. Toinen syy voi olla "sovellusten jäljitettävyyden parantaminen luvattoman jakelun suhteen", kuten Google selittää SourceStampVerifier-luokassa.

Toistaiseksi vain muutama Googlen sovelluspakettimuotoa käyttävistä sovelluksista (kuten Google Camera ja Google Recorder) on estää muiden kuin Play Kaupan asennukset, mutta emme tiedä, laajentaako yritys tätä toimintaa muihin sovelluksiinsa kun ne kaikki siirtyvät AAB-muotoon. Pohdimme myös, vaatiko siirtyminen sovelluspaketteihin App Integrityn käyttöönottoa, mutta huomasimme, että Google jo nyt on ratkaisu käsitellä, kun käyttäjät yrittävät asentaa sovelluksen, jossa ei ole kaikkia vaadittuja jakoja. Olipa tilanne mikä tahansa, emme usko, että Google aikoo estää kaikkea sovellusten sivulatausta, vaikka nämä työkalut antavat heille mahdollisuuden tehdä niin.

Kiitos kehittäjille vvb2060, aviraxp ja Quinny899 heidän avustaan ​​tässä artikkelissa, ja tkiitos PNF Softwarelle käyttöluvan myöntämisestä JEB Decompiler, ammattitason käänteissuunnittelutyökalu Android-sovelluksille.