Kui olete Google'i kaamera või salvestaja rakendusse värskenduse külglaadimisel näinud veateadet „Ebaõnnestunud kinnitamine”, lugege seda põhjuse väljaselgitamiseks.
Kui Google tõi oktoobris turule Pixel 5, olime põnevil, et saime selle uued rakendused kasutusele võtta. (Telefon ise on päris laheka .) Pixel 5 turuletulekuga tulid uued versioonid Google'i kaamera ja Google'i salvesti rakendused, mida kogukonnaga jagasime. Kui aga paljud vanemate Pixeli seadmete kasutajad proovisid värskendusi külglaadida, tekkis neil viga (näidatud ülal). Kummalisel kombel ei olnud kõigil värskenduste installimisega probleeme. Mõned said need suurepäraselt installida, samas kui teised pidid tehaseseadetele lähtestama, et saaksid uued versioonid installida. Selle probleemi näiliselt juhusliku olemuse tõttu hindasid paljud selle veaks. Oleme nüüd üsna kindlad, et see probleem ei tulene veast, vaid pigem sellest, et Google kasutab Android 11-s uut API-t, et blokeerida värskenduste külglaadimine.
Kui proovite külglaadida Google Camera 8.0 või uuemat versiooni või Google Recorder 2.0 või uuemat versiooni Pixeli seadmes, kus töötab Android 11, näete veateadet, mis ütleb, et kinnitamine ei õnnestunud. Isegi kui proovite APK-d shell-käsuga külglaadida, ei saa te installitõrke täpsemat põhjust. Installimise tagastuskood, mis teile antakse, on "
INSTALL_FAILED_VERIFICATION_FAILURE", mis kahjuks ei ütle teile, miks kinnitamine ei õnnestu. Logcati uurides saame täpselt teada, miks kinnitamine ebaõnnestub: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]
Selle sõnumi kohaselt ebaõnnestus Google'i kaamera installi terviklikkuse kontroll, kuna "INSTALLER_NAME" ei vastanud Google Play poe paketi nimele "com.android.vending". (Üritasin installida Google Camera 8.0, kasutades rakendust APKMirror Installer, mis on väärt.) Selle sõnumi lisas süsteemilogi "AppIntegrityManagerServiceImpl", mis on osa Androidi uuest funktsioonist "App Integrity". AOSP koodi kohaselt on rakenduse terviklikkus loodud pakkuma täiendavat kontrollikihti paketihalduri olemasoleva APK allkirja kontrollimise peale. Näib, et App Integrity API kasutab komplekti Reeglid otsustada, kas installimine lubada või keelata. Reegleid pakub süsteemirakendus – mis meie arvates on Google Play teenused – ja on salvestatud faili.
Lisaks App Integrity ka helistab helistas teine klass SourceStampVerifier kui manifesti metaandmetesse on manustatud "allikatempel". Näiteks siin on meie arvates Google'i kaamera rakenduse manifesti "allikatempel".
<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>
Sellest, mida me võime öelda, kasutatakse paketi installija allkirja kontrollimiseks lähtetemplit. Näiteks ei saa te petta rakendust AppIntegrity installimist lubama isegi siis, kui te võltsinud Play poodi paigaldajana.
Peale selle ei õnnestunud meil täpselt teada saada, kuidas Google kasutab rakendust AppIntegrity ja sellega seotud API-sid, et blokeerida Google'i kaamera ja Google Recorderi rakenduste värskenduste külglaadimine. Google Play teenuste APK kiire uurimine näitab, et see kasutab neid API-sid, kuid kood on liiga segane, et kõike tegelikult mõtestada. Leidsime isegi kataloogi, kus terviklikkuse reeglid on salvestatud – /data/system/integrity_rules –, kuid sellest oli vähe kasu, kuna see sisaldab ainult jadaandmeid. Samuti ei ole me leidnud viisi terviklikkuse kontrollimise keelamiseks (see ei tundu olevat nii lihtne kui lihtsalt seadistuse muutmine), kuigi usume, et tehaseseadetele lähtestamine mõne jaoks toimib, on see, et Google Play teenused ei saa installimise blokeerimiseks oma reeglistikku lähtestada. Logcati sõnum ja nende uute API-de kasutuselevõtt operatsioonisüsteemis Android 11 viitavad tugevalt sellele, et see kõik on kavandatud, mitte aga viga.
Google ei ole nende API-de kasutamist avalikult kommenteerinud (ja me ei eeldagi, et nad seda teeksid) ja nad ei vastanud, kui kommentaari saamiseks pöörduti. Meil on siiski mõned teooriad, miks nad blokeerivad külglaaditud värskendusi. Esiteks võivad nad kaitsta inimesi oma seadmesse vale rakenduse versiooni installimise eest. Google tarnib oma rakenduste konkreetseid versioone konkreetsetesse Pixeli seadmetesse. Näiteks võib võrgust leida seadme isikupärastamise teenuste rakenduse mitu versiooni. Kuigi need kõik on Pixeli seadmetesse installitavad, oli see ühel hetkel võimalik kaotada reaalajas subtiitrite funktsioon Pixel 4 jaoks, laadides alla vanema Pixeli seadme jaoks loodud versiooni. Teine põhjus võib olla rakenduste jälgitavuse parandamine seoses volitamata levitamisega, nagu Google selgitas klassis SourceStampVerifier.
Seni on ainult mõned Google'i rakendused, mis kasutavad rakenduste kogumi vormingut (nt Google'i kaamera ja Google'i salvesti) blokeerides mitte-Play poe installid, kuid me ei tea, kas ettevõte laiendab seda käitumist oma teistele rakendustele kui nad kõik lülituvad AAB-vormingusse. Kaalusime ka seda, kas rakenduste kogumitele üleminek tingis rakenduse terviklikkuse juurutamise, kuid avastasime, et Google juba on lahendus käsitleda, kui kasutajad proovivad installida rakendust, millel pole kõiki vajalikke jaotusi. Mis iganes juhtum ka ei oleks, me ei arva, et Google kavatseb blokeerida kogu oma rakenduste külglaadimise, kuigi need tööriistad võimaldavad neil seda kindlasti teha.
Täname arendajaid vvb2060, aviraxp ja Quinny899 abi eest selle artikli koostamisel ning ttäname PNF-tarkvara meile kasutuslitsentsi andmise eest JEB dekompiler, professionaalse kvaliteediga pöördprojekteerimise tööriist Androidi rakenduste jaoks.