Ось чому ви не можете завантажувати оновлення до Google Camera and Recorder

Якщо ви побачили помилку «не вдалося перевірити» під час завантаження оновлення додатків Google Camera або Recorder, прочитайте це, щоб дізнатися, чому.

Коли Google випустив Pixel 5 у жовтні, ми були раді отримати нові програми. (Сам телефон це дуже круто) З випуском Pixel 5 з’явилися нові версії Google Camera і Google Recorder програм, якими ми поділилися з спільнотою. Однак, коли багато користувачів старіших пристроїв Pixel намагалися завантажити оновлення збоку, вони зустріли помилку (показано вище). Як не дивно, але не у всіх виникали проблеми зі встановленням оновлень. Деяким вдалося встановити їх просто чудово, тоді як іншим довелося скинути заводські налаштування, щоб встановити нові версії. Через, здавалося б, випадковий характер цієї проблеми, багато хто зарахував її до помилки. Тепер ми цілком впевнені, що ця проблема виникла не через помилку, а через використання Google нового API в Android 11 для блокування оновлень, що завантажуються збоку.

Якщо ви спробуєте завантажити Google Camera 8.0 або пізнішої версії або Google Recorder 2.0 або пізнішої версії на пристрій Pixel під керуванням Android 11, ви побачите повідомлення про помилку з повідомленням про те, що перевірка не вдалася. Навіть якщо ви спробуєте завантажити файл APK за допомогою команди оболонки, ви не отримаєте більш конкретної причини помилки встановлення. Код повернення, який ви отримаєте: "

INSTALL_FAILED_VERIFICATION_FAILURE", який, на жаль, не повідомляє вам, чому перевірка не вдається. Досліджуючи logcat, ми можемо точно дізнатися, чому перевірка не вдається:

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]

Згідно з цим повідомленням, перевірка цілісності встановлення Google Camera не вдалася, оскільки "INSTALLER_NAME" не збігається з "com.android.vending", назвою пакета для Google Play Store. (Я намагався встановити Google Camera 8.0 за допомогою програми APKMirror Installer, чого це варте.) Це повідомлення додав до системного журналу "AppIntegrityManagerServiceImpl», який є частиною нової функції Android «App Integrity». Відповідно до коду в AOSP, App Integrity розроблено, щоб забезпечити додатковий рівень перевірок на додаток до існуючої перевірки підпису APK менеджера пакетів. Схоже, API цілісності програми використовує набір правила щоб вирішити, дозволити чи заборонити встановлення. Правила надаються системною програмою, яка, на нашу думку, є службами Google Play зберігається у файлі.

Крім того, App Integrity також дзвонить викликав інший клас SourceStampVerifier якщо «штамп джерела» вбудовано в метадані маніфесту. Наприклад, ось що, на нашу думку, є «штампом джерела» з маніфесту програми Google Camera:

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

З того, що ми можемо сказати, штамп джерела використовується для перевірки підпису інсталятора пакета. Так, наприклад, ви не можете обманом змусити AppIntegrity дозволити встановлення, навіть якщо ви підробив Play Store як інсталятор.

Окрім цього, нам не вдалося точно з’ясувати, як Google використовує AppIntegrity та пов’язані API для блокування стороннього завантаження оновлень додатків Google Camera та Google Recorder. Швидкий огляд APK Google Play Services показує, що він використовує ці API, але код надто заплутаний, щоб справді все зрозуміти. Ми навіть знайшли каталог, де зберігаються правила цілісності — /data/system/integrity_rules — але він мало корисний, оскільки містить лише серіалізовані дані. Ми також не знайшли способу вимкнути перевірку цілісності (здається, це не так просто, як просто зміна налаштування), хоча ми вважаємо, що причиною того, що скидання до заводських налаштувань працює для деяких, є те, що служби Google Play не мають можливості ініціалізувати свій набір правил, щоб заблокувати встановлення. Повідомлення logcat і впровадження цих нових API в Android 11 переконливо свідчать про те, що все це задумано, а не помилка.

Google публічно не коментував використання цих API (і не очікує від них), і вони не відповіли, коли звернулися за коментарем. Однак у нас є кілька теорій, чому вони блокують завантажені збоку оновлення. По-перше, вони можуть захищати людей від встановлення неправильної версії програми для свого пристрою. Google постачає певні версії своїх програм на певні пристрої Pixel. Наприклад, кілька версій програми Device Personalization Services можна знайти в Інтернеті. Незважаючи на те, що їх усі можна встановити на пристроях Pixel, одного разу це стало можливим втратити функцію живих субтитрів на Pixel 4, завантаживши версію, розроблену для старішого пристрою Pixel. Іншою причиною може бути «поліпшення відстеження додатків щодо несанкціонованого розповсюдження», як пояснює Google у класі SourceStampVerifier.

Наразі лише кілька програм Google, які використовують формат пакета програм (як-от Google Camera та Google Recorder), є блокування встановлення не з Play Store, але ми не знаємо, чи поширить компанія цю поведінку на інші свої програми як тільки вони всі перейдуть на формат AAB. Ми також розглянули, чи потребує перехід на пакети додатків впровадження App Integrity, але ми виявили, що Google уже це зробив має рішення для обробки, коли користувачі намагаються встановити програму, яка не має всіх необхідних розділів. Як би там не було, ми не думаємо, що Google має намір блокувати всі сторонні завантаження своїх додатків, хоча ці інструменти, безперечно, дозволяють їм це робити.

Дякуємо розробникам vvb2060, aviraxp і Quinny899 за допомогу в цій статті таДякуємо PNF Software за надання нам ліцензії на використання Декомпілятор JEB, професійний інструмент зворотного проектування для програм Android.