Cómo firmar tu app

Android requiere que todos los APKs estén firmados de manera digital con un certificado para poder instalarse o actualizarse en un dispositivo. Cuando lanzas tu app con Android App Bundle, debes firmar el paquete de aplicación con una clave de carga antes de subirlo a Play Console, y la firma de apps de Play se encargará del resto. En el caso de las apps que se distribuyen con APKs en Play Store o en otras tiendas, debes firmar manualmente los APKs para subirlos.

En esta página, se proporciona una guía sobre conceptos importantes relacionados con la firma y la seguridad de las apps, cómo firmar tu app para publicarla en Google Play con Android Studio y cómo configurar la firma de apps de Play.

A continuación, se proporciona una descripción general de los pasos para firmar y publicar una app nueva en Google Play:

  1. Genera una clave de carga y un almacén de claves.
  2. Firma la app con la clave de carga.
  3. Cómo configurar la firma de apps de Play
  4. Sube la app a Google Play.
  5. Prepara e implementa el lanzamiento de la app.

En cambio, si tu app ya está firmada y publicada en Google Play Store con una clave de firma de la app existente, o si deseas usar una clave de firma de la app para una app nueva en lugar de la que crea Google, puedes generarla a través de los siguientes pasos:

  1. Firma la app con la clave de firma de la app.
  2. Sube la clave de firma de la app a la firma de apps de Play.
  3. Recomendación: Genera y registra un certificado de carga para actualizaciones futuras de tu app.
  4. Sube la app a Google Play.
  5. Prepara e implementa el lanzamiento de la app.

En esta página, también se explora cómo administrar tus propias claves cuando subes la app a otras tiendas de aplicaciones. Si no usas Android Studio o prefieres firmar la app desde la línea de comandos, obtén información sobre el uso de apksigner.

Firma de apps de Play

Con la firma de apps de Play, Google administra y protege la clave de firma de tu app, y la utiliza para firmar los APKs que se distribuyen. Además, debido a que los paquetes de aplicación difieren en la compilación y la firma de APKs en Google Play Store, debes configurar la firma de apps de Play para poder subir tu paquete de aplicación. Esto te permitirá beneficiarte de lo siguiente:

  • Usa Android App Bundle y la compatibilidad con los modos de entrega avanzados de Google Play. Además, Android App Bundle reduce muchísimo el tamaño de la app, simplifica las actualizaciones y permite usar módulos de funciones y ofrecer experiencias instantáneas.
  • Aumenta la seguridad de tu clave de firma y permite usar una clave de carga separada para firmar el paquete de aplicación que se carga en Google Play.
  • La actualización de la clave te permite cambiar la clave de firma de la app por si la existente se ve comprometida o si necesitas migrar a una clave más segura a nivel criptográfico.

La firma de apps de Play usa dos claves: la clave de firma de la app y la clave de carga, que se describen con más detalle en la sección sobre Claves y almacenes de claves. Debes guardar la clave de carga y usarla para firmar la app y subirla a Google Play Store. Google usará el certificado de carga para verificar tu identidad y firmará tus APKs con tu clave de firma de la app para su distribución, como se muestra en la Figura 1. Si usas una clave de carga separada, puedes solicitar un restablecimiento de la clave de carga si alguna vez la pierdes o se ve comprometida.

En comparación, en el caso de las apps que no habilitaron la firma de apps de Play, si pierdes la clave de firma, ya no podrás actualizar tu app.

Figura 1: Firma una app con la firma de apps de Play

Las claves se almacenan en la misma infraestructura que usa Google para guardar sus propias claves, donde se protegen mediante el servicio de administración de claves de Google. Puedes obtener más información acerca de la infraestructura técnica de Google en los informes de seguridad de Google Cloud.

Cuando usas la firma de apps de Play, si pierdes tu clave de carga, o si esta se ve comprometida, puedes solicitar que se restablezca en Play Console. Debido a que Google protege tu clave de firma de la app, puedes seguir subiendo versiones nuevas de tu app como actualizaciones de la app original, incluso si cambias las claves de carga. Para obtener más información, consulta Cómo restablecer una clave de carga privada cuando se pierde o se ve comprometida.

En la siguiente sección, se describen algunos términos y conceptos importantes relacionados con la firma y la seguridad de las apps. Si prefieres omitir esto y obtener información sobre cómo preparar la app para subirla a Google Play Store, accede a Cómo firmar la app para el lanzamiento.

Almacenes de claves, claves y certificados

Los almacenes de claves de Java (.jks o .keystore) son archivos binarios que funcionan como repositorios de certificados y claves privadas.

Un certificado de clave pública (archivos .der o .pem), también conocido como certificado digital o de identidad, contiene la clave pública de un par de claves públicas/privadas, así como otros metadatos que identifican al propietario (por ejemplo, nombre y ubicación) de la clave privada correspondiente.

A continuación, se indican los diferentes tipos de claves que debes comprender:

  • Clave de firma de la app: es la clave que se usa para firmar los APKs que están instalados en el dispositivo de un usuario. Como parte del modelo de actualización segura de Android, la clave de firma nunca cambia durante el ciclo de vida de la app. Además, es privada y debe ser secreta. Sin embargo, puedes compartir el certificado que se genera con la clave de firma de la app.
  • Clave de carga: Es la clave que usas para firmar el paquete de aplicación o el APK antes de subirlo con el objetivo de que reciba la firma de app de Google Play. Debes mantenerla en secreto, aunque sí puedes compartir el certificado que se genera junto con ella. Puedes generar una clave de carga de una de las siguientes formas:

    • Si durante el proceso de activación de la firma de apps decides que quieres que Google genere la clave de firma, entonces se designará como clave de carga la que uses para firmar la primera versión de tu app.
    • Si durante el proceso de activación de firma de la app (nueva o existente) le proporcionas la clave de firma a Google, tendrás la posibilidad de generar una nueva clave de carga en ese momento o después para proporcionar mayor seguridad.
    • Si no generas una clave de carga nueva, seguirás usando la clave de firma de la app como clave de carga para firmar cada actualización.

    Sugerencia: Para mantener la seguridad de las claves, asegúrate de que las claves de firma y de carga sean diferentes.

Trabaja con proveedores de API

Puedes descargar el certificado de la clave de firma de la app y la clave de carga desde Versión > Configuración > Firma de apps en la página de Play Console. Esto se usa para registrar claves públicas con proveedores de API. El objetivo es compartirlo, ya que no contiene tu clave privada.

Una huella digital de certificado es una representación única y breve de un certificado que suelen solicitar los proveedores de API junto con el nombre del paquete a la hora de registrar una app que utilice su servicio. Puedes encontrar las huellas digitales MD5, SHA-1 y SHA-256 de los certificados de carga y firma de apps en la página de firma de apps de Play Console. Para procesar otras huellas digitales, descarga el certificado original (.der) de la misma página.

Cómo firmar tu compilación de depuración

Cuando ejecutas o depuras tu proyecto desde el IDE, Android Studio automáticamente firma tu app con un certificado de depuración generado por las herramientas del SDK de Android. La primera vez que ejecutas o depuras tu proyecto en Android Studio, el IDE crea automáticamente el almacén de claves y el certificado de depuración en $HOME/.android/debug.keystore, y configura el almacén de claves y las contraseñas de claves.

Dado que el certificado de depuración se crea mediante las herramientas de compilación y su diseño no es seguro, la mayoría de las tiendas de aplicaciones (incluida Google Play Store) no publican apps firmadas con un certificado de depuración.

Android Studio almacena automáticamente la información de firma de depuración en una configuración de firma, de modo que no es necesario ingresarla cada vez que realizas una depuración. La configuración de firma es un objeto compuesto por toda la información necesaria para firmar tu app, como la ubicación del almacén de claves, el nombre de las claves y su contraseña.

Si quieres obtener más información sobre la compilación y ejecución de apps para depuración, consulta Cómo compilar y ejecutar tu app.

Fecha de vencimiento del certificado de depuración

El certificado autofirmado sirve para firmar una app que se va a depurar, y la fecha de vencimiento es 30 días a partir de la fecha de creación. Una vez que venza el certificado, se mostrará un error de compilación.

Para solucionar este problema, borra el archivo debug.keystore almacenado en una de las siguientes ubicaciones:

  • ~/.android/ en OS X y Linux
  • C:\Documents and Settings\user\.android\ en Windows XP
  • C:\Users\user\.android\ en Windows Vista y Windows 7, 8 y 10

La próxima vez que compiles y ejecutes una versión de depuración de tu app, Android Studio volverá a generar un almacén de claves y una clave de depuración nuevos.

Cómo firmar una app para lanzarla en Google Play

Cuando esté todo listo para publicar tu app, deberás firmarla y subirla a una tienda de aplicaciones, como Google Play. Cuando publicas tu app en Google Play por primera vez, también debes configurar la firma de apps de Play. La firma de apps de Play es opcional para las apps que se crearon antes de agosto de 2021. En esta sección, se muestra cómo firmar correctamente la app para su lanzamiento y configurar la firma de apps de Play.

Genera una clave de carga y un almacén de claves.

Si todavía no tienes una clave de carga, que sirve para configurar la firma de apps de Play, puedes generar una con Android Studio de la siguiente manera:

  1. En la barra de menú, haz clic en Build > Generate Signed Bundle/APK
  2. En el diálogo Generate Signed Bundle or APK, selecciona Android App Bundle o APK, y haz clic en Next.
  3. En el campo Key store path, haz clic en Create new.
  4. En la ventana New Key Store, proporciona la siguiente información para el almacén de claves y la clave, como se muestra en la Figura 2.

    Figura 2: Crea una clave de carga y un almacén de claves nuevos en Android Studio

  5. Almacén de claves

    • Key store path: Selecciona la ubicación en la que quieras crear el almacén de claves. Además, se debe agregar un nombre de archivo al final de la ruta de acceso de ubicación con la extensión .jks.
    • Password: Crea y confirma una contraseña segura para el almacén de claves.
  6. Clave

    • Alias: Ingresa un nombre de identificación para la clave.
    • Password: Crea y confirma una contraseña segura para tu clave. Debe ser la misma que la contraseña del almacén de claves. (Consulta el problema conocido para obtener más información).
    • Validity (years): Establece durante cuántos años será válida la clave. Debe ser válida durante al menos 25 años para que puedas firmar actualizaciones con la misma clave durante todo el ciclo de vida de la app.
    • Certificate: ingresa información acerca de ti para el certificado. Esta información no se muestra en la app, pero se incluye en el certificado como parte del APK.
  7. Una vez que completes el formulario, haz clic en OK.

  8. Si deseas compilar y firmar la app con la clave de carga, continúa con la sección Cómo firmar tu app con la clave de carga. Si solo deseas generar la clave y el almacén de claves, haz clic en Cancel.

Cómo firmar tu app con la clave

Si ya tienes una clave de carga, úsala para firmar la app. Si, en cambio, la app ya está firmada y publicada en Google Play Store con una clave de firma de la app existente, úsala para firmarla. Luego, puedes generar y registrar una clave de carga separada con Google Play para firmar y subir las actualizaciones posteriores de la app.

Para firmar la app con Android Studio, sigue estos pasos:

  1. Si no tienes abierto el diálogo Generate Signed Bundle or APK, haz clic en Build > Generate Signed Bundle/APK.
  2. En el cuadro de diálogo Generate Signed Bundle or APK, selecciona Android App Bundle o APK, y luego haz clic en Next.
  3. Selecciona un módulo de la lista desplegable.
  4. Especifica la ruta de acceso al almacén de claves, el alias de la clave y las contraseñas de ambos. Si aún no preparaste el almacén de claves de carga y la clave, primero debes generar una clave de carga y un almacén de claves, y luego debes regresar para completar este paso.

    Figura 3: Firma la app con la clave de carga

  5. Haz clic en Next.

  6. En la siguiente ventana (que se muestra en la Figura 4), selecciona una carpeta de destino para la app firmada, elige el tipo de compilación y, si corresponde, selecciona la variante de producto.

  7. Si compilas y firmas un APK, deberás seleccionar con qué versiones de firma quieres que sea compatible la app en Signature Versions. Para obtener más información, consulta los esquemas de firma de la app.

  8. Haz clic en Create.

Figura 5: Haz clic en el vínculo de la ventana emergente para analizar o ubicar el paquete de aplicación.

Cuando Android Studio termine de compilar la app firmada, podrás ubicar o analizar la app. Para ello, haz clic en la opción correspondiente de la notificación emergente, como se muestra en la Figura 5.

Ahora puedes habilitar tu app para la firma de apps de Play y subirla para lanzarla. Si es la primera vez que publicas una app, consulta Descripción general del lanzamiento. De lo contrario, continúa con la página sobre Cómo subir la app a Play Console.

Cómo usar la firma de apps de Play

Como se describió anteriormente en esta página, es necesario configurar la firma de apps de Play para firmar tu app y poder distribuirla mediante Google Play (excepto en el caso de las apps creadas antes de agosto de 2021, que pueden continuar distribuyendo APKs autofirmados). Los pasos que debes seguir dependen de si tu app aún no se publicó en Google Play o si ya se firmó y se publicó antes de agosto de 2021 con una clave de firma de la app existente.

Cómo configurar una nueva app

Para configurar la firma de una app que aún no se publicó en Google Play, haz lo siguiente:

  1. Si aún no lo hiciste, genera una clave de carga para firmar la app.
  2. Accede a Play Console.
  3. Sigue los pasos para preparar e implementar la versión, y crear una versión nueva.
  4. Una vez que hayas elegido un segmento, configura la firma de apps en la sección Firma de apps de la siguiente manera:
    • No necesitas hacer nada para que Google Play genere una clave de firma de la app y la use para firmar la app. La clave que uses para firmar la primera versión se convertirá en la clave de carga y deberás usarla para firmar las actualizaciones futuras.
    • Para usar la misma clave que otra app de tu cuenta de desarrollador, selecciona Change app signing key > Use the same key as another app in this account, selecciona una y luego haz clic en Continue.
    • Si quieres proporcionar tu propia clave para que Google la use cuando firme tu app, selecciona Change app signing key y elige una de las opciones de Export and upload que te permiten subir de forma segura una clave privada y su certificado público.

En la sección Paquetes de aplicación, haz clic en Explorar archivos para ubicar y subir la app que firmaste con la clave de carga. Si quieres obtener más información para actualizar la app, consulta Cómo preparar y lanzar versiones. Cuando lanzas la app después de configurar la firma de apps de Play, Google Play genera (a menos que subas una clave existente) y administra la clave de firma de la app por ti. Simplemente, firma las actualizaciones subsiguientes de la app con la clave de carga antes de subirla a Google Play.

Si necesitas crear una clave de carga nueva, consulta la sección sobre cómo restablecer una clave de carga privada cuando se pierde o se ve comprometida.

Cómo habilitar una app existente en el programa de firmas

Si actualizas una app que ya está publicada en Google Play con una clave de firma de la app existente, puedes habilitar la firma de apps de Play de la siguiente manera:

  1. Accede a Play Console y navega hasta la app.
  2. En el menú de la izquierda, haz clic en Versión > Configuración > Firma de apps.
  3. Si corresponde, revisa las Condiciones del Servicio y selecciona Aceptar.
  4. Selecciona una de las opciones que mejor describa la clave de firma que quieres subir a Google Play y sigue las instrucciones que aparecen en la pantalla. Por ejemplo, si usas Java KeyStore para la clave de firma, selecciona Subir una nueva clave de firma de la app de Java KeyStore y sigue las instrucciones para descargar y ejecutar la herramienta PEPK y sube el archivo generado con la clave encriptada.
  5. Haz clic en Inscribirse.

Se mostrará una página con los detalles de firma de la app y los certificados de carga. Google Play ahora firma la app con la clave existente cuando se implementa para los usuarios. Sin embargo, uno de los beneficios más importantes de la firma de apps de Play es la capacidad de separar la clave que usas para firmar el artefacto que subes a Google Play de la clave que usa Google Play para firmar tu app para la distribución a los usuarios. Por lo tanto, considera seguir los pasos de la siguiente sección para generar y registrar una clave de carga por separado.

Cómo generar y registrar un certificado de carga

Cuando se publica una app que no está firmada con una clave de carga, Google Play Console ofrece la opción de registrar una para las actualizaciones futuras de la app. Aunque se trata de un paso opcional, se recomienda que publiques tu app con una clave independiente de la que usa Google Play para distribuir la app a los usuarios. De esa manera, Google mantiene segura la clave de firma, y tú tienes la opción de restablecer una clave de carga privada que se perdió o está comprometida. En esta sección, se describe cómo crear una clave de carga, cómo generar un certificado de carga a partir de ella y cómo registrar ese certificado con Google Play para futuras actualizaciones de la app.

A continuación, se describen las situaciones en las que tienes la opción de registrar un certificado de carga en Play Console:

  • Si publicas una nueva app que está firmada con una clave de firma y te inscribes para participar en el programa de firma de apps de Play.
  • Si estás a punto de publicar una app existente que ya está inscrita en la firma de apps de Play, pero que se firmó con su clave de firma.

Si no publicas una actualización a una app existente que ya se inscribió en la firma de apps de Play, y deseas registrar un certificado de carga, completa los siguientes pasos y continúa con la sección sobre Cómo restablecer una clave de carga privada cuando se pierde o se ve comprometida.

Si aún no lo hiciste, genera una clave de carga y un almacén de claves.

Después de crear la clave de carga y el almacén de claves, deberás generar un certificado público a partir de la clave de carga con keytool usando el siguiente comando:

$ keytool -export -rfc
  -keystore your-upload-keystore.jks
  -alias upload-alias
  -file output_upload_certificate.pem

Ahora que tienes el certificado de carga, regístralo en Google cuando lo solicite Play Console o cuando restablezcas tu clave de carga.

Cómo actualizar la clave de firma de la app

En algunas circunstancias, es posible que quieras cambiar la clave de firma de tu app (por ejemplo, cuando quieres implementar una clave con una criptografía más eficaz o cuando la clave de firma está comprometida). Sin embargo, debido a que los usuarios solo pueden actualizar la app si la actualización está firmada con la misma clave de firma, es difícil cambiar la clave de firma para una app que ya está publicada.

Si publicas la app en Google Play, puedes actualizar la clave de firma de la app publicada a través de Play Console: se usa la clave nueva para firmar instalaciones y actualizaciones de la app en Android 13 y versiones posteriores, mientras que la versión anterior se usa para firmar actualizaciones de usuarios de versiones anteriores de Android.

Para obtener más información, consulta Cómo actualizar la clave de firma de tu app.

Cómo restablecer una clave de carga privada si se pierde o se ve comprometida

Si perdiste la clave de carga privada o si está comprometida, puedes crear una nueva y solicitar un restablecimiento de la clave de carga en Play Console.

Cómo configurar el proceso de compilación para firmar tu app automáticamente

En Android Studio, puedes configurar el proyecto para firmar la versión de actualización de tu app de manera automática durante el proceso de compilación. Para ello, debes crear una configuración de firmas y asignarla al tipo de compilación de lanzamiento. Una configuración de firma consta de una ubicación de almacén de claves, una contraseña de almacén de claves, un alias de clave y una contraseña de clave. Para crear una configuración de firma y asignarla a tu tipo de compilación de lanzamiento con Android Studio, sigue estos pasos:

  1. En la ventana Project, haz clic con el botón derecho en la app y elige Open Module Settings.
  2. En la ventana Project Structure, en la opción Modules del panel izquierdo, haz clic en el módulo que quieras firmar.
  3. Haz clic en la pestaña Signing y luego en Add .
  4. Selecciona el archivo del almacén de claves, ingresa un nombre para esta configuración de firma (es posible que crees más de una) e ingresa la información necesaria.

    Figura 7: Ventana para crear una configuración de firma nueva

  5. Haz clic en la pestaña Build Types.
  6. Haz clic en la compilación de versión.
  7. En Signing Config, selecciona la configuración de firma que creaste.

    Figura 8: Selecciona una configuración de firma en Android Studio

  8. Haz clic en OK.

Cada vez que compiles el tipo de compilación de lanzamiento mediante la selección de una opción de Build > Build Bundle(s) / APK(s) en Android Studio, el IDE firmará tu app automáticamente con la configuración de firma que hayas especificado. Puedes encontrar tus APKs o tu conjunto de apps firmados en el directorio build/outputs/ dentro del directorio del proyecto del módulo que compiles.

Cuando creas una configuración de firma, la información de firma se incluye como texto sin formato en los archivos de compilación de Gradle. Si trabajas en un equipo o compartes tu código públicamente, debes mantener protegida la información de tu firma. Para ello, quítala de los archivos de compilación y almacénala por separado. Si quieres obtener más información para quitar la información de firma de los archivos de compilación, consulta Cómo quitar la información de firma de los archivos de compilación. Para obtener más información sobre cómo mantener segura la información de tu firma, consulta Cómo proteger tu clave a continuación.

Cómo firmar cada variante de producto de manera diferente

Si tu app usa diferentes variantes de productos y quieres firmar cada una de una manera diferente, puedes crear configuraciones de firma adicionales y asignarlas por variante:

  1. En la ventana Project, haz clic con el botón derecho en la app y elige Open Module Settings.
  2. En la ventana Project Structure, en la opción Modules del panel izquierdo, haz clic en el módulo que quieras firmar.
  3. Haz clic en la pestaña Signing y luego en Add .
  4. Selecciona el archivo del almacén de claves, ingresa un nombre para esta configuración de firma (es posible que crees más de una) e ingresa la información necesaria.

    Figura 10: Ventana para crear una configuración de firma nueva

  5. Repite los pasos 3 y 4 según sea necesario hasta que hayas creado todas las configuraciones de firma.
  6. Haz clic en la pestaña Flavors.
  7. Haz clic en la variante que desees configurar y luego selecciona la configuración de firma correspondiente del menú desplegable Signing Config.

    Figura 11: Configuración de ajustes de firmas según el tipo de producto

    Repite el procedimiento para configurar cualquier tipo de producto adicional.

  8. Haz clic en OK.

También puedes especificar la configuración de firma en los archivos de configuración de Gradle. Para obtener más información, consulta Cómo configurar los ajustes de firma.

Cómo ejecutar un informe de firma

Para obtener información sobre firmas de cada una de las variantes de tu app, ejecuta la tarea signingReport de Gradle en Android Studio:

  1. Selecciona View > Tool Windows > Gradle para abrir la ventana de herramientas de Gradle.
  2. Selecciona YourApp > Tasks > android > signingReport para ejecutar el informe.

Cómo administrar tu propia clave de firma

Si decides no habilitar la firma de apps de Play (solo para apps creadas antes de agosto de 2021), puedes administrar tu propia clave de firma de la app y tu almacén de claves. Ten en cuenta que eres responsable de la seguridad de la clave y del almacén de claves. Además, tu app no será compatible con Android App Bundles, Play Feature Delivery ni Play Asset Delivery.

Cuando tengas todo listo para crear tu propia clave y almacén de claves, asegúrate de primero elegir una contraseña segura para el almacén y otra independiente para cada clave privada guardada en el almacén. Debes conservar el almacén de claves en un lugar seguro y protegido. Si pierdes el acceso a la clave de firma de la app o tu clave se ve comprometida, Google no podrá recuperar la clave de firma de la app y no podrás lanzar versiones nuevas de tu app como actualizaciones de la app original. Para obtener más información, consulta Cómo proteger tu clave a continuación.

Si administras la clave de firma de la app y el almacén de claves, cuando firmes el APK, lo firmarás de manera local con tu clave de firma y subirás el APK firmado directamente a Google Play Store para su distribución, como se muestra en la Figura 12.

Figura 12: Firma de una app cuando administras una clave de firma de la app propia

Cuando usas la firma de apps de Play, Google mantiene la seguridad de la clave de firma y garantiza que las apps estarán correctamente firmadas y podrán recibir actualizaciones durante su vida útil. Sin embargo, si decides administrar la clave de firma de tu app, debes tener en cuenta algunas consideraciones.

Consideraciones sobre las firmas

Debes firmar la app con el mismo certificado durante todo el ciclo de vida esperado. Existen varias razones por las cuales deberías hacer esto:

  • Actualización de la app: cuando el sistema instala una actualización en una app, compara los certificados de la versión nueva con los de la versión existente. El sistema permite la actualización si los certificados concuerdan. Si firmas la versión nueva con un certificado diferente, deberás asignar otro nombre de paquete a la app. En este caso, el usuario instalará la versión nueva como una app completamente nueva.
  • Modularidad de la app: Android permite que los APKs firmados por el mismo certificado ejecuten el mismo proceso si las apps lo solicitan, de modo que el sistema los trata como una única app. De este modo, puedes implementar tu app en módulos, y los usuarios pueden actualizar cada uno de estos de manera independiente.
  • Uso compartido de código/datos mediante permisos: Android proporciona la aplicación de permisos basados en firmas, de modo que una app puede exponer la funcionalidad a otra que está firmada con un certificado específico. Mediante la firma de varios APKs con el mismo certificado y la aplicación de controles de permisos basados en firmas, las apps pueden compartir código y datos de manera segura.

Si planeas admitir actualizaciones para una app, asegúrate de que su clave de firma tenga un período de validez que exceda el ciclo de vida previsto de la app. Se recomienda un período de 25 años o más. Cuando se venza el período de validez de la clave, los usuarios ya no podrán actualizar a versiones nuevas de la app sin problemas.

Si planeas publicar tus apps en Google Play, la clave que uses para firmar tu app deberá tener un período de validez que termine después del 22 de octubre de 2033. Google Play aplica este requisito de manera forzosa para garantizar que los usuarios puedan actualizar sin inconvenientes sus apps cuando haya versiones nuevas disponibles.

Cómo proteger tu clave

Si eliges administrar y proteger la clave de firma de la app y el almacén de claves (en vez de usar la firma de apps de Play), es imprescindible que protejas la clave de firma, tanto para ti como para el usuario. Si permites que alguien use la clave, o si dejas el almacén de claves o las contraseñas en un lugar poco seguro, donde un tercero podría encontrarlos y usarlos, tu identidad de autor y la confianza de los usuarios se verán comprometidas.

Si un tercero lograra obtener la clave sin tu conocimiento o permiso, esa persona podría firmar y distribuir apps que reemplazaran de forma malintencionada las apps verdaderas o las dañaran. Esa persona también podría firmar y distribuir apps con tu identidad, así como atacar otras apps o el sistema, o dañar o robar datos del usuario.

Tu clave privada se requiere para firmar todas las versiones futuras de tu app. Si pierdes o descuidas tu clave, no podrás publicar actualizaciones para las apps que ya tengas. Ten en cuenta que no es posible volver a generar una clave ya generada.

Tu reputación como entidad de desarrollador dependerá en todo momento de la protección correcta de la clave de firma de tu app hasta que venza la clave. A continuación, te proporcionamos algunas sugerencias para mantener protegida tu clave:

  • Elige contraseñas seguras para la clave y el almacén.
  • No des ni prestes a nadie tu clave privada y no permitas que personas no autorizadas sepan las contraseñas de la clave y el almacén.
  • Guarda el archivo del almacén de claves que contiene tu clave privada en un lugar seguro y protegido.

En general, si tomas precauciones basadas en el sentido común cuando generes, uses y almacenes tus claves, estarán protegidas.

Cómo quitar la información de firmas de los archivos de compilación

Cuando creas una configuración de firma, Android Studio agrega la información de firma existente como texto sin formato a los archivos build.gradle del módulo. Si trabajas con un equipo o con un código abierto, deberás mover esta información sensible hacia fuera de los archivos de compilación para que otras personas no puedan acceder fácilmente. Para ello, debes crear un archivo de propiedades separado para almacenar la información segura y debes hacer referencia a ese archivo en los archivos de compilación de la siguiente manera:

  1. Crea una configuración de firma y asígnala a uno o más tipos de compilación. En estas instrucciones, se da por sentado que tienes preparada una configuración de firma única para el tipo de compilación de lanzamiento, como se describió antes en Cómo configurar el proceso de compilación para que firme automáticamente la app.
  2. Crea un archivo llamado keystore.properties en el directorio raíz de tu proyecto. Este archivo debe contener la información de firma de la siguiente manera:
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. En el archivo build.gradle del módulo, agrega código para cargar el archivo keystore.properties antes del bloque android {}.

    Groovy

    ...
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    def keystoreProperties = new Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Kotlin

    ...
    import java.util.Properties
    import java.io.FileInputStream
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    val keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    val keystoreProperties = Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Nota: Puedes optar por almacenar el archivo keystore.properties en otra ubicación (por ejemplo, en la carpeta del módulo en lugar de en la carpeta raíz del proyecto, o en el servidor de compilación si estás usando una herramienta de integración continua). En ese caso, debes modificar el código anterior para inicializar de manera correcta keystorePropertiesFile usando la ubicación real de tu archivo keystore.properties.

  4. Puedes hacer referencia a las propiedades almacenadas en keystoreProperties mediante la sintaxis keystoreProperties['propertyName']. Modifica el bloque signingConfigs del archivo build.gradle de tu módulo para hacer referencia a la información de firma almacenada en keystoreProperties mediante esta sintaxis.

    Groovy

    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }

    Kotlin

    android {
        signingConfigs {
            create("config") {
                keyAlias = keystoreProperties["keyAlias"] as String
                keyPassword = keystoreProperties["keyPassword"] as String
                storeFile = file(keystoreProperties["storeFile"] as String)
                storePassword = keystoreProperties["storePassword"] as String
            }
        }
        ...
      }
  5. Abre la ventana de herramientas Build Variants y asegúrate de que esté seleccionado el tipo de compilación de lanzamiento.
  6. Selecciona una opción de Build > Build Bundle(s) / APK(s) para compilar un APK o un paquete de aplicación de la compilación de lanzamiento. Deberías ver el resultado de la compilación en el directorio build/outputs/ de tu módulo.

Dado que los archivos de compilación ya no contienen información confidencial, ahora puedes incluirlos en el control de fuente o subirlos a una base de código compartida. Asegúrate de mantener protegido el archivo keystore.properties. Esto puede involucrar la eliminación del archivo del sistema de control de fuente.