He aquí por qué no puedes descargar actualizaciones en Google Camera and Recorder

Si has visto un error de "verificación fallida" al descargar una actualización de las aplicaciones de Cámara o Grabadora de Google, lee esto para descubrir por qué.

Cuando Google lanzó el Pixel 5 en octubre, estábamos emocionados de tener en nuestras manos sus nuevas aplicaciones. (El teléfono en sí es bastante genial, también.) Con el lanzamiento del Pixel 5 llegaron nuevas versiones de la cámara de google y Grabadora de Google aplicaciones que compartimos con la comunidad. Sin embargo, cuando muchos usuarios de dispositivos Pixel más antiguos intentaron descargar las actualizaciones, se encontraron con un error (como se muestra arriba). Curiosamente, no todos tuvieron problemas para instalar las actualizaciones. Algunos pudieron instalarlos sin problemas, mientras que otros tuvieron que restablecer los valores de fábrica para poder instalar las nuevas versiones. Debido a la naturaleza aparentemente aleatoria de este problema, muchos lo atribuyeron a un error. Ahora estamos bastante seguros de que este problema no se debe a un error, sino al uso por parte de Google de una nueva API en Android 11 para bloquear la descarga de actualizaciones.

Si intenta descargar Google Camera 8.0 o posterior o Google Recorder 2.0 o posterior en un dispositivo Pixel con Android 11, verá un mensaje de error que indica que la verificación no se pudo realizar correctamente. Incluso si intenta descargar el APK usando un comando de shell, no obtendrá una razón más específica para el error de instalación. El código de retorno de instalación que se le proporcionará es "INSTALL_FAILED_VERIFICATION_FAILURE", que lamentablemente no indica por qué la verificación no se realizó correctamente. Al examinar el logcat, podemos saber exactamente por qué falla la verificación:

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]

Según este mensaje, una verificación de integridad de la instalación de Google Camera falló porque "INSTALLER_NAME" no coincidía con "com.android.vending", el nombre del paquete de Google Play Store. (Estaba intentando instalar Google Camera 8.0 usando la aplicación APKMirror Installer, por si sirve de algo). Este mensaje fue agregado al registro del sistema por "AppIntegrityManagerServiceImpl", que forma parte de la nueva función "Integridad de la aplicación" de Android. Según el código de AOSP, App Integrity está diseñado para proporcionar una capa adicional de comprobaciones además de la verificación de firma APK existente del administrador de paquetes. La API App Integrity parece utilizar un conjunto de Normas para decidir si permite o rechaza la instalación. Las reglas las proporciona una aplicación del sistema, que creemos que son los servicios de Google Play, y son almacenado en un archivo.

Además, la integridad de la aplicación también llama otra clase llamada FuenteStampVerifier si un "sello de origen" está incrustado en los metadatos del Manifiesto. Por ejemplo, esto es lo que creemos que es el "sello de origen" del Manifiesto de la aplicación Google Camera:

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

Por lo que podemos ver, el sello de origen se utiliza para verificar la firma del instalador del paquete. Entonces, por ejemplo, no puedes engañar a AppIntegrity para que permita la instalación incluso si falsificó la Play Store como instalador.

Más allá de esto, no pudimos descubrir exactamente cómo Google utiliza AppIntegrity y las API relacionadas para bloquear la descarga de actualizaciones en las aplicaciones Google Camera y Google Recorder. Un examen rápido del APK de Google Play Services revela que está utilizando estas API, pero el código está demasiado confuso para que todo tenga sentido. Incluso encontramos el directorio donde se almacenan las reglas de integridad (/data/system/integrity_rules), pero fue de poca utilidad porque solo contiene datos serializados. Tampoco hemos encontrado una manera de desactivar la verificación de integridad (no parece ser tan fácil como simplemente cambiar una configuración), aunque creemos que la razón por la que el restablecimiento de fábrica funciona para algunos es que los Servicios de Google Play no tienen la oportunidad de inicializar su conjunto de reglas para bloquear la instalación. Sin embargo, el mensaje de logcat y la introducción de estas nuevas API en Android 11 sugieren fuertemente que todo esto es por diseño y no un error.

Google no ha comentado públicamente sobre el uso de estas API (ni esperamos que lo hagan) y no respondieron cuando se les contactó para hacer comentarios. Sin embargo, tenemos algunas teorías de por qué están bloqueando las actualizaciones descargadas. En primer lugar, podrían estar protegiendo a las personas para que no instalen la versión incorrecta de la aplicación para su dispositivo. Google ofrece versiones específicas de sus aplicaciones para dispositivos Pixel específicos. Por ejemplo, se pueden encontrar en línea varias versiones de la aplicación Device Personality Services. Aunque todos se pueden instalar en dispositivos Pixel, en un momento fue posible perder la función de subtítulos en vivo en el Pixel 4 descargando una versión creada para un dispositivo Pixel más antiguo. Otro motivo podría ser "mejorar la trazabilidad de las aplicaciones con respecto a la distribución no autorizada", como explica Google en la clase SourceStampVerifier.

Hasta ahora, sólo algunas de las aplicaciones de Google que utilizan el formato de paquete de aplicaciones (como Google Camera y Google Recorder) son bloquear instalaciones que no sean de Play Store, pero no sabemos si la empresa extenderá este comportamiento a sus otras aplicaciones una vez que todos cambien al formato AAB. También consideramos si el cambio a paquetes de aplicaciones requería implementar App Integrity, pero descubrimos que Google ya tiene una solución para manejar cuando los usuarios intentan instalar una aplicación que no tiene todas las divisiones requeridas. Cualquiera que sea el caso, no creemos que Google tenga la intención de bloquear todas las descargas de sus aplicaciones, aunque estas herramientas ciertamente les permiten hacerlo.

Gracias a los desarrolladores vvb2060, aviraxp y Quinny899 por su ayuda en este artículo.Gracias a PNF Software por proporcionarnos una licencia para usar Descompilador JEB, una herramienta de ingeniería inversa de nivel profesional para aplicaciones de Android.