Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Cómo firmar tu app

Android requiere que todos los APK estén firmados de manera digital con un certificado para poder instalarse o actualizarse en un dispositivo. Si usas Android App Bundles, debes firmar solo el paquete de aplicación antes de subirlo a Play Console, y la firma de apps de Google Play se encargará del resto. Sin embargo, también puedes firmar tu app manualmente para subirla en Google Play y en otras tiendas de aplicaciones.

En esta página, se proporciona una guía para conceptos importantes relacionados con la firma y seguridad de las apps, cómo firmar tu app para publicarla en Google Play mediante Android Studio y cómo inscribirla para que reciba la firma de Google 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. Inscribe la app para que reciba la firma de Google 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 existente, o si deseas usar una clave de firma para una app nueva en lugar de que la cree Google, puedes generarla mediante los siguientes pasos:

  1. Firma la app con la clave de firma de la app y selecciona la opción para encriptar y exportar la clave de firma.
  2. Sube la clave de firma de la app a fin de inscribir la app para que reciba la firma de Google Play.
  3. Recomendado: Genera y registra un certificado de carga para actualizaciones futuras de la 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 cómo usar apksigner.

Firma de apps de Google Play

Con la firma de apps de Google Play, Google administrará y protegerá la clave de firma de la app, y la usará para firmar los APK que se distribuyan. Además, debido a que la compilación y la firma de los paquetes de aplicación son diferentes de la compilación y la firma de los APK en Google Play Store, debes inscribir la app para que la firme Google Play antes de subir el paquete correspondiente. Esto te permitirá beneficiarte de lo siguiente:

  • Usa Android App Bundle y la compatibilidad con Dynamic Delivery de Google Play. Además, Android App Bundle reduce muchísimo el tamaño de la app, simplifica las actualizaciones y permite crear funciones dinámicas y experiencias instantáneas.
  • Aumenta la seguridad de la 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 firma de app de Google Play usa dos claves: la clave de firma de app y la clave de carga, que se describen con mayor detalle en la sección sobre claves y almacenes de claves. Debes guardar la clave de carga y usarla a fin de firmar la app para subirla a Google Play Store. 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, si no inscribes la app para que reciba la firma de Google Play y pierdes la clave de firma de la app, ya no podrás actualizar la aplicación.

Cuando esté todo listo para publicar la app, podrás firmarla con Android Studio y subirla a Google Play. La clave con la que firmes la app se convertirá en la clave de carga de la app. Google usará el certificado de carga para verificar tu identidad y firmará los APK con tu clave para su distribución, como se muestra en la figura 1.

Si todavía no tienes una clave de firma de app, puedes generar una durante el proceso de registro.

Figura 1. Firma de app con Google 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 documentos técnicos de seguridad de Google Cloud.

Cuando usas la firma de apps de Google Play, si pierdes tu clave de carga, o si esta se ve comprometida, puedes comunicarte con Google para revocar la clave y generar una nueva. Debido a que Google protege tu clave de firma de apps, puedes seguir subiendo versiones nuevas de tu aplicación 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 app. 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.

Claves, certificados y almacenes de claves

Cuando se trata de firmar una app, es importante comprender los conceptos y las definiciones que se describen a continuación.

Certificados

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.

Cuando se firma una app, la herramienta de firma adjunta un certificado, que asocia el APK o el paquete de aplicación con el desarrollador y con la clave privada correspondiente. De esta forma, Android puede asegurarse de que las actualizaciones futuras de la app sean auténticas y provengan del autor original. La clave que se usa para crear este certificado se denomina clave de firma de app.

Puedes descargar el certificado de la clave de firma y la clave de carga desde la página de firma de apps de Play Console a fin de registrar las claves con los proveedores de API. El certificado se puede compartir con cualquier persona, ya que no contiene la clave privada.

Cada app debe usar el mismo certificado durante todo el ciclo de vida para que los usuarios puedan instalar versiones nuevas como actualizaciones de la app. Para obtener más información sobre los beneficios de usar el mismo certificado para todas las apps durante la vida útil, consulta Consideraciones respecto de las firmas.

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.

A continuación, se indican los diferentes tipos de claves y almacenes de claves con los que debes familiarizarte:

  • Clave de firma de apps: Es la clave que se usa para firmar los APK 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, aunque sí puedes compartir el certificado que se genera junto con ella.
  • Clave de carga: Es la clave que usas para firmar el paquete de aplicación o el APK antes de subirlo para 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. Para generar una clave de carga, elige una de estas opciones:

    • 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 la firma para 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, a fin de 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.

  • Almacén de claves Java (.jks o .keystore): Es un archivo binario que funciona como repositorio de certificados y claves privadas.

  • Herramienta Play Encrypt Private Key (PEPK): Usa esta herramienta para exportar claves privadas de un almacén de claves de Java y encriptar claves privadas para transferirlas a Google Play. Si proporcionas una clave de firma para usar con Google, selecciona la opción Exportar y subir una clave desde un almacén de claves Java y sigue las instrucciones para descargar y usar la herramienta. De forma alternativa, puedes seleccionar la opción Exportar y subir una clave (sin usar un almacén de claves Java) para descargar, revisar y usar el código abierto de la herramienta PEPK.

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 de forma automática 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 la app, incluida la ubicación del almacén de claves, el nombre de las claves y su contraseña. No puedes editar directamente la configuración de firma de depuración, pero puedes configurar la manera en la que firmas la compilación de lanzamiento.

Para obtener más información sobre cómo compilar y ejecutar 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, 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 nuevas.

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 publiques la app en Google Play, también deberás inscribirla para que reciba la firma correspondiente. En esta sección, se muestra cómo firmar correctamente la app para lanzamiento y cómo inscribirla para que reciba la firma de Google Play.

Cómo generar una clave de carga y un almacén de claves

Si aún no tienes una clave de carga, que sirve para que tu app reciba la firma de Google Play, puedes generar una mediante Android Studio de la siguiente manera:

  1. En la barra de menú, haz clic en Build > Build > Generate Signed Bundle/APK.
  2. En el cuadro de 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.
    • 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 el almacén de calves. Debe ser diferente de la contraseña que elegiste para el almacén de claves.
    • Validity (years): Establece la cantidad de años que será válida la contraseña. 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. Cuando hayas completado 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 acerca de Cómo firmar tu app con la clave de carga. Si solo deseas generar la clave y el almacén de clave, 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 la tienda de Google Play con una clave de firma de app existente, úsala para firmar la app y asegúrate de encriptarla y exportarla a fin de inscribir la app para que reciba la firma de Google Play. Luego, podrás generar un clave de carga separada y registrar el certificado público de clave de carga con Google Play para firmar y subir las actualizaciones subsiguientes a la app.

Para firmar la app con Android Studio y exportar una clave de firma de app existente, sigue estos pasos:

  1. Si no tienes abierto el cuadro de 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, regresar para completar este paso.

    Figura 3: Firma la app con la clave de carga

  5. Si firmas un paquete de app con una clave de firma existente y más tarde quieres inscribir tu app para que reciba la firma de Google Play, activa la casilla junto a Export encrypted key y especifica una ruta para guardar la clave de firma como archivo *.pepk encriptado. Luego, podrás usar la clave de firma de app encriptada existente a fin de inscribir una app existente para que reciba la firma de Google Play.

  6. Haz clic en Next.

  7. 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 el tipo de producto.

  8. 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 Esquema de firma del APK v2

  9. Haz clic en Finish.

    Figura 4: Genera una versión firmada de la app para los tipos de producto seleccionados

Figura 5: Haz clic en el vínculo de la ventana emergente para analizar o ubicar el paquete de app, o bien para ubicar la clave de firma exportada

Cuando Android Studio haya terminado 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. Si seleccionaste la opción para exportar la clave de firma, podrás navegar rápidamente hasta ella haciendo clic en la flecha desplegable de la esquina inferior derecha del mensaje emergente para ampliarla y, luego, en Show Exported Key File, como se muestra en la figura 5.

De esta forma, ya puedes inscribir la app para que reciba la firma de Google Play y subirla a fin de 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 inscribir la app para que reciba la firma de Google Play

Como se describió anteriormente en esta página, la firma de apps de Google Play es la manera recomendada de firmar apps para su distribución mediante Google Play. Los pasos que debes seguir para inscribir la app dependen de si ya se publicó en Google Play o de si ya está firmada y publicada mediante un clave de firma de app existente.

Cómo inscribir una app nueva

Para inscribir una app que aún no se publicó en Google Play, sigue estos pasos:

  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 con el fin de crear una versión nueva.
  4. Después de elegir un segmento, configura la firma de apps en la sección Permitir que Google cree y administre una clave de firma de la app de la siguiente manera:
    • Para que Google Play genere una clave de firma y la use para firmar la app, selecciona Continuar. 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 Opciones avanzadas > Usar la misma clave que usa otra app de esta cuenta, selecciona una app y, luego, haz clic en Continuar.
    • Para proporcionar tu propia clave a fin de que Google la use cuando firme tu app, selecciona Opciones avanzadas y elige una de las opciones que te permita subir una clave privada y su certificado público de forma segura.

En la sección Android App Bundles y APK que se pueden agregar, haz clic en Examinar archivos para ubicar y subir la app que firmaste con la clave de carga. Para obtener más información sobre cómo actualizar la app, consulta Cómo preparar y lanzar versiones. Después de lanzar la app tras habilitar la firma de app de por parte de Google Play, este servicio generará y administrará la clave de firma. 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 inscribir una app existente en el programa de firmas

Si actualizas una app que ya está publicada en Google Play mediante una clave de firma existente, puedes inscribirte para participar en el programa de firma de apps de Google Play, como se indica a continuación:

  1. Si aún no lo hiciste, firma tu app con la clave de firma de app existente y asegúrate de marcar la casilla junto a Exportar la clave encriptada para que se guarde la clave de firma como un archivo *.pepk encriptado. Necesitarás este archivo en un paso posterior.
  2. Acceder a Play Console y navega hasta la app.
  3. En el menú de la izquierda, haz clic en Administración de lanzamientos > Firma de apps.
  4. Si corresponde, revisa las Condiciones del Servicio y selecciona Aceptar.
  5. 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 usaste Android Studio para exportar la clave de firma de tu app, como se describe en esta página, selecciona Subir una clave exportada desde Android Studio y sube el archivo *.pepk encriptado de tu clave.
  6. 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 Google 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 a fin de firmar la app para distribuirla 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 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 que Google Play firme tu app
  • Si estás a punto de publicar una app existente que ya estás inscrita en la firma de apps de Google Play, pero que se firmó con su clave firma

Si no publicas una actualización a una app existente que ya se inscribió en la firma de apps de Google Play, y deseas registrar un certificado de carga, completa los siguientes pasos y continúa con la sección acerca de 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, mediante 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 Play Console lo solicite, o consulta la siguiente sección para registrarlo a través del equipo de asistencia de Google Play.

Cómo actualizar la clave de firma de tu 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 nuevas de la app, mientras que se usa la clave anterior para firmar actualizaciones de usuarios que instalaron la app antes de que se actualizara la clave.

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

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 comunicarte con el equipo de asistencia de Google Play para que restablezca la clave.

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 lanzamiento 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 la versión. 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 versión 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 versión 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 el APK firmado o el paquete de app en el directorio build/outputs/ del directorio del proyecto correspondiente al módulo que estés compilando.

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 tu información de firma. Para ello, quítala de los archivos de compilación y almacénala por separado. Para obtener más información sobre cómo 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.

Cómo firmar cada clase de producto de manera diferente

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

  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 el tipo 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 administrar tu propia clave de firma

Si optas por no inscribir la app para que la firme Google Play, puedes administrar tu propia clave de firma y almacén de claves. Ten en cuenta que eres responsable de la seguridad de la clave y del almacén de claves. Además, la app no será compatible con Android App Bundles ni Dynamic Delivery de Google Play.

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 app o si la clave está comprometida, Google no podrá recuperar la clave de firma de app y no podrás ofrecer a los usuarios nuevas versiones de tu aplicación 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 y el almacén de claves de tu app, cuando firmes el APK, lo firmarás de manera local usando 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 10.

Figura 12. Firma de una app cuando administras una clave de firma de app propia

Cuando usas la firma de apps de Google 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 respecto de 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 APK firmados por el mismo certificado ejecuten el mismo proceso, si las app 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 APK 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 validez de 25 o más años. 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 debe 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 y el almacén de claves (en vez de usar la firma de Google 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 reemplacen de forma malintencionada las apps verdaderas, o bien dañarlas. 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.

La clave privada es necesaria para firmar versiones futuras de la app. Si pierdes la clave, no podrás publicar actualizaciones en la app existente. 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 fuera de los archivos de compilación, de modo que otras personas no puedan acceder fácilmente. Para ello, debes crear un archivo de propiedades separado para almacenar la información segura, y 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 del 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 {}.
        ...
    
        // 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 {
            ...
        }
    
        

    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 de arriba para inicializar correctamente keystorePropertiesFile con la ubicación actual del archivo keystore.properties.

  4. Puedes hacer referencia a las propiedades almacenadas en keystoreProperties con la sintaxis keystoreProperties['propertyName']. Modifica el bloque signingConfigs del archivo build.gradle del módulo para hacer referencia a la información de firma almacenada en keystoreProperties con esta sintaxis.
        android {
            signingConfigs {
                config {
                    keyAlias keystoreProperties['keyAlias']
                    keyPassword keystoreProperties['keyPassword']
                    storeFile file(keystoreProperties['storeFile'])
                    storePassword keystoreProperties['storePassword']
                }
            }
            ...
          }
        
  5. Abre la ventana de la herramienta 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. Se mostrará el resultado de la compilación en el directorio build/outputs/ del módulo.

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