Ha „sikertelen ellenőrzés” hibát lát a Google Fényképezőgép vagy Felvevő alkalmazás frissítésének oldalbetöltésekor, olvassa el ezt, hogy megtudja, miért.
Amikor a Google piacra dobta a Pixel 5-öt októberben, izgatottan vártuk az új alkalmazásait. (Maga a telefon nagyon klasszis.) A Pixel 5 piacra dobásával új verziók jelentek meg a Google Fényképezőgép és Google Recorder alkalmazásokat, amelyeket megosztottunk a közösséggel. Amikor azonban a régebbi Pixel eszközök sok felhasználója megpróbálta oldalra tölteni a frissítéseket, hibába ütköztek (fent látható). Furcsa módon nem mindenkinek volt problémája a frissítések telepítésével. Néhányan jól tudták telepíteni őket, míg másoknak vissza kellett állítaniuk a gyári beállításokat, hogy telepíthessék az új verziókat. A probléma véletlenszerűnek tűnő természete miatt sokan hibának minősítették. Most már eléggé biztosak vagyunk abban, hogy ez a probléma nem egy programhibából ered, hanem abból, hogy a Google egy új API-t használ az Android 11-ben a frissítések oldalbetöltésének blokkolására.
Ha egy Android 11-et futtató Pixel-eszközön megpróbálja oldalról betölteni a Google Camera 8.0-s vagy újabb, illetve a Google Recorder 2.0-s vagy újabb verzióját, hibaüzenet jelenik meg, amely szerint az ellenőrzés nem sikerült. Még ha shell paranccsal próbálja is oldalba tölteni az APK-t, akkor sem fog pontosabb okot kapni a telepítési hibára. A telepítés visszatérési kódja "INSTALL_FAILED_VERIFICATION_FAILURE", ami sajnos nem mondja meg, miért nem sikerül az ellenőrzés. A logcat vizsgálatával pontosan megtudhatjuk, miért nem sikerül az ellenőrzés:
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]
Az üzenet szerint a Google Fényképezőgép telepítésének integritás-ellenőrzése meghiúsult, mert az „INSTALLER_NAME” nem egyezik a „com.android.vending”, a Google Play Áruház csomagnevével. (Megpróbáltam telepíteni a Google Camera 8.0-t az APKMirror Installer alkalmazással, amiért megéri.) Ezt az üzenetet a rendszernaplóba adta a "AppIntegrityManagerServiceImpl", amely az Android új "App Integrity" funkciójának része. Az AOSP kódja szerint az App Integrity egy további ellenőrzési réteget biztosít a csomagkezelő meglévő APK-aláírás-ellenőrzéséhez. Úgy tűnik, hogy az App Integrity API egy készletet használ Szabályok eldönteni, hogy engedélyezi-e vagy megtagadja a telepítést. A szabályokat egy rendszeralkalmazás biztosítja – amelyről úgy gondoljuk, hogy ez a Google Play Szolgáltatások – és azok is fájlban tárolva.
Ezen kívül az App Integrity hív is hívott egy másik osztály SourceStampVerifier ha a „forrásbélyeg” be van ágyazva a Manifest metaadataiba. Például itt van, amiről úgy gondoljuk, hogy a „forrásbélyeg” a Google Fényképezőgép alkalmazás Manifestjében:
<meta-dataandroid: name="com.android.stamp.source"android: value="https://play.google.com/store"/>
Megállapítható, hogy a forrásbélyegző a csomagtelepítő aláírásának ellenőrzésére szolgál. Így például nem lehet rávenni az AppIntegrity-t, hogy engedélyezze a telepítést, még akkor sem, ha Ön meghamisította a Play Áruházat mint a telepítő.
Ezen túlmenően nem tudtuk megtudni, hogy a Google pontosan hogyan használja az AppIntegrityt és a kapcsolódó API-kat a Google Fényképezőgép és a Google Recorder alkalmazások oldalbetöltésének blokkolására. A Google Play Services APK gyors vizsgálata feltárja, hogy ezeket az API-kat használja, de a kód túlságosan homályos ahhoz, hogy mindennek értelme legyen. Még azt a könyvtárat is megtaláltuk, ahol az integritási szabályok vannak tárolva – /data/system/integrity_rules –, de nem sok haszna volt, mert csak soros adatokat tartalmaz. Nem találtunk módot az integritás-ellenőrzés letiltására sem (úgy tűnik, ez nem olyan egyszerű, mint beállítás módosítása), bár úgy gondoljuk, hogy a gyári beállítások visszaállítása egyeseknél azért működik, mert a Google Play Services nem kap lehetőséget a szabálykészlet inicializálására a telepítés blokkolása érdekében. A logcat-üzenet és az új API-k bevezetése az Android 11-ben határozottan azt sugallja, hogy mindez a tervezésből fakad, nem pedig hiba.
A Google nem kommentálta nyilvánosan ezen API-k használatát (és nem is várjuk el tőlük), és nem válaszoltak, amikor megjegyzést kértek. Van azonban néhány elméletünk, hogy miért blokkolják az oldalról betöltött frissítéseket. Először is, megvédhetik az embereket attól, hogy az alkalmazás rossz verzióját telepítsék eszközükre. A Google bizonyos Pixel-eszközökre szállítja alkalmazásai bizonyos verzióit. Például a Device Personalization Services alkalmazás számos verziója megtalálható az interneten. Annak ellenére, hogy ezek mindegyike telepíthető Pixel eszközökre, egykor ez lehetséges volt elveszíti az Élő feliratozás funkciót a Pixel 4-en egy régebbi Pixel-eszközhöz készült verzió letöltésével. Egy másik ok lehet az "alkalmazások nyomon követhetőségének javítása a jogosulatlan terjesztés tekintetében", amint azt a Google a SourceStampVerifier osztályban kifejti.
Eddig csak néhány Google-alkalmazás, amely az alkalmazáscsomag formátumát használja (például a Google Camera és a Google Recorder) blokkolja a nem Play Áruházból történő telepítéseket, de nem tudjuk, hogy a vállalat kiterjeszti-e ezt a viselkedést a többi alkalmazásaira ha egyszer mind átváltanak AAB formátumra. Azt is mérlegeltük, hogy az alkalmazáscsomagokra való váltás szükségessé teszi-e az App Integrity megvalósítását, de azt tapasztaltuk, hogy a Google máris van megoldása kezelni, ha a felhasználók olyan alkalmazást próbálnak telepíteni, amely nem rendelkezik az összes szükséges részével. Bármi is legyen a helyzet, úgy gondoljuk, hogy a Google nem szándékozik blokkolni alkalmazásai oldalbetöltését, bár ezek az eszközök ezt biztosan lehetővé teszik számukra.
Köszönet a vvb2060, az aviraxp és a Quinny899 fejlesztőknek a cikkben nyújtott segítségükért, és tköszönet a PNF Software-nek, hogy engedélyt adott nekünk a felhasználásra JEB Decompiler, egy professzionális minőségű visszafejtő eszköz Android alkalmazásokhoz.