Вот почему вы не можете загружать обновления для Google Camera и Recorder

Если вы столкнулись с ошибкой «не удалось пройти проверку» при загрузке обновления для приложений Google Camera или Recorder, прочитайте это, чтобы узнать, почему.

Когда Google выпустил Pixel 5 еще в октябре, мы были рады получить в свои руки его новые приложения. (Сам телефон это довольно круто.) С выпуском Pixel 5 появились новые версии Google Камера и Google Регистратор приложения, которыми мы поделились с сообществом. Однако, когда многие пользователи старых устройств Pixel пытались загрузить обновления, они столкнулись с ошибкой (показанной выше). Как ни странно, не у всех были проблемы с установкой обновлений. Некоторым удалось их установить без проблем, в то время как другим пришлось выполнить сброс настроек до заводских настроек, чтобы установить новые версии. Из-за кажущегося случайного характера этой проблемы многие списали ее на ошибку. Теперь мы вполне уверены, что эта проблема связана не с ошибкой, а с использованием Google нового API в Android 11 для блокировки загрузки неопубликованных обновлений.

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

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, чего бы это ни стоило.) Это сообщение было добавлено в системный журнал пользователем «Аппинтегритиманажерсервицеимпл", которая является частью новой функции Android "Целостность приложений". Согласно коду AOSP, целостность приложений предназначена для обеспечения дополнительного уровня проверок поверх существующей проверки подписи APK менеджера пакетов. API целостности приложений, похоже, использует набор Правила чтобы решить, разрешить или запретить установку. Правила предоставляются системным приложением (которое, по нашему мнению, представляет собой Сервисы Google Play), и хранится в файле.

Кроме того, целостность приложения также звонит другой класс под названием 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. Например, в Интернете можно найти несколько версий приложения Службы персонализации устройств. Несмотря на то, что все они могут быть установлены на устройствах Pixel, в какой-то момент было возможно потерять функцию Live Captions на Pixel 4, загрузив версию, созданную для более старого устройства Pixel. Другой причиной может быть «улучшение отслеживания приложений в отношении несанкционированного распространения», как объяснил Google в классе SourceStampVerifier.

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

Благодарим разработчиков vvb2060, aviraxp и Quinny899 за помощь в этой статье и т. д.Благодарим PNF Software за предоставление нам лицензии на использование JEB-декомпилятор, инструмент профессионального уровня для обратного проектирования приложений Android.