Cómo firmar tu app

Android exige que todos los APK se firmen digitalmente con un certificado para que puedan instalarse. Y necesitas firmar tu Android App Bundle antes de que puedas subirlo a Play Console.

En este documento, se describe la manera de firmar tus APK o conjuntos de apps usando Android Studio, incluidos los procesos de creación y almacenamiento de tu certificado, la firma de diferentes configuraciones de compilación con distintos certificados y la configuración del proceso de compilación para firmar tus APK automáticamente.

Certificados y keystores

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

Cuando firmas un APK, la herramienta de firma adjunta a este el certificado de clave pública, y lo mismo ocurre cunado firmas un conjunto de apps. El certificado de clave pública sirve como una "huella digital" que asocia de manera exclusiva el APK o conjunto de apps contigo y con tu clave privada correspondiente. Esto permite a Android verificar que cualquier actualización futura a tu appsea auténtica y provenga del autor original. La clave que se usa para la creación de este certificado se llama clave de firma de apps.

Un keystore es un campo binario que contiene una o más claves privadas.

Todas las apps deben usar el mismo certificado durante su vida útil para que los usuarios puedan instalar versiones nuevas como actualizaciones de las apps. Para obtener más información sobre los beneficios que tiene usar el mismo certificado para todas tus apps durante su vida útil, consulta Consideraciones respecto de las firmas, a continuación.

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 de SDK de Android. La primera vez que ejecutas o depuras tu proyecto en Android Studio, el IDE automáticamente crea el keystore y el certificado de depuración en $HOME/.android/debug.keystore, y configura el keystore y las contraseñas de claves.

Debido a que el certificado de depuración se crea con las herramientas de compilación y no es seguro por diseño, en la mayoría de las tiendas de aplicaciones (incluida Google Play Store) no se aceptará un APK o conjunto de apps firmado con un certificado de depuración para la publicación.

Android Studio almacena automáticamente tu información de firma de depuración en una configuración de firma para que no debas ingresarla cada vez que realices depuraciones. Una configuración de firma es un objeto que comprende toda la información necesaria para firmar una app, como la ubicación y la contraseña del keystore, y el nombre y la contraseña de la clave. No puedes editar directamente la configuración de firma de depuración, pero puedes configurar la forma de firmar tu compilación de lanzamiento.

Si deseas obtener más información sobre la manera de compilar y ejecutar aplicaciones para la depuración, consulta Cómo compilar y ejecutar tu app.

Fecha de vencimiento del certificado de depuración

El certificado autofirmado que se usa para firmar tu appen el modo de depuración tiene un plazo de vencimiento de 30 años a partir de su fecha de creación. Cuando el certificado caduque, aparecerá un error de compilación.

Para solucionar este problema, simplemente borra el archivo debug.keystore. El archivo se almacena en 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 7, 8 y 10

La próxima vez que compiles y ejecutes el tipo de compilación de depuración, las herramientas de compilación volverán a generar un keystore y una clave de depuración nuevos. Ten en cuenta que debes ejecutar tu app; la compilación por sí sola no regenera el keystore ni la clave de depuración.

Cómo administrar tu clave

Ya que tu clave de firma de apps se usa para verificar tu identidad como desarrollador y garantizar que las actualizaciones se realicen de forma seguras y sin inconvenientes para tus usuarios, es muy importante administrar tu clave y mantenerla protegida, tanto para ti como para tus usuarios. Puedes optar por usar la firma de apps de Google Play para administrar y guardar tu clave de firma de aplicaciones de manera segura a través de la infraestructura de Google, o puedes administrar y proteger tu clave de firma de aplicaciones y tu keystore propios.

Si eliges la firma de apps de Google Play, obtendrás los siguientes beneficios:

  • Te aseguras de no perder la clave de firma de app. La pérdida de la clave de firma significa que no se puede actualizar la app. Por ello, es fundamental no perderla.
  • Te aseguras de que no falle la clave de firma de app. Una falla de la clave permite que un atacante implemente una versión maliciosa de tu app como una actualización en una instalación existente. Con la firma de apps de Play, los desarrolladores solo administran una clave de carga que se puede restablecer en caso de pérdidas o fallas. En caso de fallas, un atacante también necesita acceder a la cuenta del desarrollador para una actividad maliciosa.

Cómo usar la firma de apps de Google Play

Con la firma de apps de Google Play, Google gestiona y protege la clave de firma de tu app y la utiliza para firmar los APK que se distribuyen. Y, debido a que los conjuntos de apps difieren en la creación y firma de APKs en Google Play Store, es necesario que te inscribas en la firma de apps antes de subir tu conjunto.

Cuando uses la firma de apps de Google Play, emplearás dos claves: la de firma de apps y la de subida. Guarda la clave de carga y úsala para firmar tu app a fin de cargarla en Google Play Store.

Al aceptar usar la firma de apps de Google Play, exportarás y encriptarás tu clave de firma de apps usando la herramienta Play Encrypt Private Key que provee Google Play, y luego la subirás a la infraestructura de Google. Después de esto, crearás una clave de subida aparte y la registrarás con Google. Cuando estés listo para la publicación, firmarás tu aplicación usando la clave de subida y la subirás a Google Play. Luego, Google usará el certificado de subida para verificar tu identidad y firmará tus APK con tu clave de firma de apps para su distribución, como se muestra en la figura 1. (Si todavía no posees una clave de firma de aplicaciones, puedes generar una durante el proceso de registro.)

Figura 1. Cómo firmar apps con el método de Google Play

Cuando usas la firma de apps de Google Play, si pierdes tu clave de subida, o si esta se ve comprometida, puedes contactar a Google para revocar tu clave de subida antigua y generar una nueva. Debido a que tu clave de firma de apps se encuentra protegida por Google, puedes seguir subiendo nuevas versiones de tu aplicación como actualizaciones de la app original, aunque cambies las claves de subida.

Para obtener más información sobre cómo incorporar la firma de apps de Google Play, consulta Cómo administrar tus claves de firma de apps.

Cómo administrar tu clave y keystore propios

En lugar de usar la firma de apps de Google Play, puedes administrar tu clave de firma y tu keystore propios. Si optas por administrar tu clave de firma de apps y tu keystore propios, tendrás la responsabilidad de protegerlos. Además, no puedes subir conjuntos de apps de Android sin haberte registrado en la firma de apps de Google Play.

Cuando estés listo para crear tu propia clave y keystore, asegúrate de primero elegir una contraseña segura para tu keystore y una contraseña segura independiente para cada clave privada almacenada en el keystore. Debes conservar tu keystore en un lugar seguro y protegido. Si pierdes el acceso a tu clave de firma de apps o esta se ve comprometida, Google no podrá recuperarla 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 tu clave de firma de apps y tu keystore propios, cuando firmes tu APK, lo firmarás de manera local usando tu clave de firma de aplicaciones y subirás el APK directamente a Google Play Store para su distribución, como se muestra en la figura 2.

Figura 2. Firma de una app cuando se administra una clave de firma de aplicaciones propia

Cómo generar una clave y un keystore

Si aún no dispones de una clave de firma o de carga, genera una con Android Studio, tal como se indica a continuación:

  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 dialog, selecciona Android App Bundle o APK, y haz clic en Next.
  3. Debajo del campo Key store path, haz clic en Create new.

  4. En la ventana New Key Store, proporciona la siguiente información para tu keystore y clave, como se muestra en la figura 3.

    Figura 3. Crea un keystore en Android Studio.

    Keystore

    • Key store path: Selecciona la ubicación en la que se debe crear el keystore.
    • Password: Genera y confirma una contraseña segura para el keystore.

    Key

    • Alias: Ingresa un nombre de identificación para la clave.
    • Password: Genera y confirma una contraseña segura para la clave. Debe ser diferente de la contraseña que elegiste para el keystore.
    • Validity (years): Fija el período en años de validez de la clave. La clave debe ser válida durante al menos 25 años. Por ello, puedes firmar actualizaciones para tu aplicación con la misma clave durante toda su vida útil.
    • Certificate: Ingresa información sobre ti para tu certificado. Esta información no se muestra en tu app, pero se incluye en tu certificado como parte del APK.

    Una vez que completes el formulario, haz clic en OK.

  5. Continúa hacia Sign your app for release si deseas generar un APK firmado con tu nueva clave, o haz clic en Cancel si solo deseas generar una clave y un keystore, sin firmar un APK.
  6. Si deseas usar la firma de apps de Google Play, dirígete a Manage your app signing keys y sigue las instrucciones para configurar la firma de apps de Google Play.

Cómo firmar tu app para su lanzamiento

Independientemente de cómo decidas gestionar tu clave y keystore, o si deseas crear un APK o un conjunto de apps, puedes usar Android Studio para firmar tu app con la clave de carga o con la clave de firma:

  • Si optas por administrar y proteger tu clave de firma de apps y tu keystore propios, deberías firma tu app con tu clave de firma .
  • Si optas por usar la firma de apps de Google Play para administrar y proteger tu clave de firma de apps y tu keystore propios, deberías firma tu app con tu clave de carga.

Si deseas firmar tu APK para el lanzamiento en Android Studio, sigue estos pasos:

  1. Haz clic en Build > Generate Signed Bundle/APK.
  2. En el cuadro de diálogo Generate Signed Bundle or APK dialog, selecciona Android App Bundle o APK, y haz clic en Next.
  3. Selecciona un módulo del menú desplegable.
  4. Si tienes lista la información de firma, selecciona un keystore y una clave privada, e ingresa las contraseñas de ambos. De lo contrario, primero genera una clave y un keystore y, luego, regresa para completar este paso.

    Nota: Si usas la firma de apps de Google Play, debes especificar aquí tu clave de carga. Si, en cambio, administras tu clave de firma de apps y tu keystore propios, deberías especificar aquí tu clave de firma. Para obtener más información, consulta Cómo administrar tu clave más arriba.

    Figura 4. Elige una clave privada en Android Studio.

  5. Si estás compilando un conjunto de apps, puedes indicarle a Android Studio que también guarde tu clave de firmas como archivo encriptado marcando la casilla junto a Export encrypted key. Para poder subir tu conjunto de apps y aprovechar la Publicación dinámica, debes subir este archivo encriptado a Play Console e inscribirte en la Firma de apps de Google Play
  6. Haz clic en Next.
  7. En la siguiente ventana, selecciona un destino para el conjunto de apps o APK firmado, el tipo de compilación y, si corresponde, las clases de productos, y haz clic en Finish.

    Figura 5. Genera una versión firmada de tu app para los tipos de productos seleccionados.

    Nota: Si tu proyecto usa clases de productos, puedes elegir varias manteniendo presionada la tecla Control (Windows/Linux) o Command (Mac OSX). Android Studio generará un APK o conjunto de apps independientes para cada tipo de producto que selecciones.

Una vez que Android Studio haya terminado de compilar la app firmada, puedes ubicarla o analizarla haciendo clic en la opción correspondiente de la notificación emergente. Si seleccionaste la opción para exportar tu clave de firma, navega rápidamente hacia ella haciendo clic en la flecha desplegable de la esquina inferior derecha de la ventana emergente para expandirla y haciendo clic en Show Exported Key File, tal como se muestra en la figura 6.

Figura 6. Después de que el IDE termine de generar tu conjunto de apps firmadas, haz clic en los vínculos de la ventana emergente para analizar o ubicar tu conjunto de apps, o solo ubicar tu clave de firma exportada.

Ahora podrás distribuir tu app firmada a través de un mercado de apps como Google Play Store o con el mecanismo que elijas. Para obtener más información sobre la publicación de tu APK firmado en Google Play Store, consulta Primeros pasos con la publicación. Si deseas obtener más información sobre otras opciones de distribución, lee Opciones de distribución alternativas.

Para que los usuarios instalen con éxito actualizaciones en tu app, debes firmarla con el mismo certificado durante toda la vida útil de tu aplicación. Para obtener más información sobre esto y otros beneficios que supone firmar tus apps con la misma clave, consulta Consideraciones respecto de las firmas a continuación. Para obtener más información sobre la protección de tu clave privada y keystore, consulta Cómo proteger tu clave privada a continuación.

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

En Android Studio, puedes configurar tu proyecto para firmar la versión de lanzamiento de tu app de manera automática durante el proceso de compilación generando una configuración de firmas y asignándola a tu tipo de compilación de versión. Una configuración de firma consta de una ubicación y contraseña de keystore, y un alias y una contraseña de clave. Para generar una configuración de firma y asignarla a tu tipo de compilación de versión usando Android Studio, sigue estos pasos:

  1. En la ventana Project, haz clic con el botón secundario en tu aplicación y luego con el primario en Open Module Settings.
  2. En la ventana Project Structure, sección Modules del panel izquierdo, haz clic en el módulo que desees firmar.
  3. Haz clic en la pestaña Signing y luego en Add .
  4. Selecciona el archivo de tu keystore e ingresa un nombre para esta configuración de firma (ya que puedes crear más de una) y la información requerida.

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

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

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

  8. Haz clic en OK.

Ahora, cada vez que compiles tu tipo de versión, selecciona una opción en Build > Build Bundle(s) / APK(s) en Android Studio, el IDE firmará tu app automáticamente, utilizando la configuración de firma que especificaste. Puedes encontrar tus APK o 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, tu información de firma se incluye en texto sin formato en tus 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 quitándola de los archivos de compilación y almacenándola por separado. Puedes obtener más información sobre la manera de quitar tu información de firma de tus archivos de compilación en Cómo quitar información sobre firmas de tus archivos de compilación. Si deseas obtener más información sobre la forma de mantener protegida tu información de firma, lee Cómo proteger tu clave.

Cómo firmar cada clase de producto de manera diferente

Si en tu aplicación se usan las clases de productos y deseas firmar cada clase de manera diferente, puedes crear configuraciones de firmas adicionales y asignarlas por clase:

  1. En la ventana Project, haz clic con el botón secundario en tu aplicación y luego con el primario en Open Module Settings.
  2. En la ventana Project Structure, sección Modules del panel izquierdo, haz clic en el módulo que desees firmar.
  3. Haz clic en la pestaña Signing y luego en Add .
  4. Selecciona el archivo de tu keystore e ingresa un nombre para esta configuración de firma (ya que puedes crear más de una) y la información requerida.

    Figura 9. Ventana para crear una configuración nueva de firma.

  5. Repite los pasos 3 y 4 cuando sea necesario hasta crear todas tus configuraciones de firmas.
  6. Haz clic en la pestaña Flavors.
  7. Haz clic en la clase que desees configurar y, luego selecciona la configuración correspondiente de firmas en el menú desplegable Signing Config.

    Figura 10. Configuración de ajustes de firmas según la clase de producto.

    Repite el procedimiento para configurar cualquier clase de producto adicional.

  8. Haz clic en OK.

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

Cómo firmar apps de Wear OS

Si compilas una app para Wear OS, el proceso de firma de la aplicación puede ser diferente del que se describe en esta página. Consulta la documentación sobre empaquetado y publicación de apps para Wear OS.

Consideraciones respecto de las firmas

Debes firmar tu app con el mismo certificado a lo largo de toda la vida útil esperada. Existen varias razones por las cuales deberías hacer esto:

  • Actualización de las apps: Al instalar una actualización en una aplicación, el sistema compara el o los certificados de la nueva versión con los de la versión existente. El sistema permite la actualización si los certificados concuerdan. Si firmas la nueva versión con un certificado diferente, debes asignar un nombre de paquete diferente a la aplicación. En este caso, el usuario instala la nueva versión como una aplicación completamente nueva.
  • Modularidad de las apps: Android permite que los APK firmados por el mismo certificado se ejecuten en el mismo proceso, si las aplicaciones lo solicitan, para que el sistema las considere como una misma aplicación. De este modo puedes implementar tu aplicación en módulos, y los usuarios pueden actualizar cada uno de estos de manera independiente.
  • Cómo compartir código o datos mediante permisos: Android ofrece ejecución de permisos basados en firmas, para que una aplicación pueda exponer la funcionalidad ante otra app firmada con un certificado determinado. Al firmar varios APK con el mismo certificado y aplicar control de permisos basados en firmas, tus aplicaciones pueden compartir código y datos de manera segura.

Si planeas admitir actualizaciones para una aplicación, asegúrate de que tu clave de firma de aplicaciones tenga un período de validez que exceda la vida útil prevista de la aplicación. Se recomienda un período de validez de 25 o más años. Cuando expire el período de validez de tu clave, los usuarios ya no podrán realizar actualizaciones a versiones nuevas de tu aplicación de manera fluida.

Si planeas publicar tus aplicaciones en Google Play, la clave que uses para firmar las debe tener un período de validez que termine después del 22 de octubre de 2033. Google Play exige este requisito para garantizar que los usuarios puedan actualizar aplicaciones sin inconvenientes cuando haya nuevas versiones disponibles. Si usas la firma de apps de Google Play, Google se asegurará de que tus aplicaciones se firmen correctamente y puedan recibir actualizaciones durante su vida útil.

Cómo proteger tu clave

Si eliges administrar y proteger tu clave de firma de aplicaciones y tu keystore por cuenta propia (en vez de usar la firma de apps de Google Play), es imprescindible que protejas tu clave de firma de aplicaciones, tanto para ti como para el usuario. Si permites que alguien use tu clave, o dejas tu keystore y tus contraseñas en un lugar desprotegido como para que un tercero pueda encontrarlos y usarlos, tu identidad de autoría y la confianza del usuario se verán comprometidas.

Nota: Si usas la firma de aps de Google Play, tu clave de firma de aplicaciones permanecerá protegida a través de la infraestructura de Google. No obstante, también deberás proteger tu clave de subida como se describe a continuación. Si tu clave de subida se ve comprometida, puedes contactar a Google para que la revoque y recibas una clave de subida nueva.

Si un tercero lograra obtener tu clave sin tu conocimiento o permiso, podría firmar y distribuir aplicaciones que reemplacen maliciosamente tus aplicaciones verdaderas, o alterarlas. También podría firmar y distribuir con tu identidad aplicaciones que ataquen a otras aplicaciones o al propio sistema, o bien que dañen o sustraigan información del usuario.

Tu clave privada se necesita para firmar versiones futuras de tu aplicación. Si pierdes tu clave o no la guardas correctamente, no podrás publicar actualizaciones para tu aplicación. No puedes regenerar una clave ya generada.

Tu reputación como entidad desarrolladora depende de que protejas correctamente tu clave de firma de aplicaciones en todo momento, hasta que esta expire. A continuación, te proporcionamos algunas sugerencias para mantener protegida tu clave:

  • Escoge contraseñas seguras para el keystore y la clave.
  • No des ni prestes tu clave privada a nadie, y no dejes que personas no autorizadas conozcan tu keystore y contraseñas de claves.
  • Guarda el archivo de keystore que contiene tu clave privada en un lugar seguro y protegido.

En general, si tomas precauciones basadas en el sentido común al generar, usar y guardar tu clave, esta estará protegida.

Cómo quitar información sobre firmas de tus archivos de compilación

Cuando creas una configuración de firma, Android Studio agrega tu información de firma en el texto sin formato a los archivos build.gradle del módulo. Si trabajas en equipo o con código abierto, debes retirar esta información confidencial de los archivos de compilación de modo que otros no puedan acceder fácilmente a ella. Para hacerlo, debes crear un archivo de propiedades por separado a fin de almacenar información segura y hacer referencia a él en tus archivos de compilación de la siguiente manera:

  1. Genera 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 tu tipo de compilación de lanzamiento, como se describe en Configurar el proceso de compilación para que firme automáticamente tu app, previamente.
  2. Crea un archivo llamado keystore.properties en el directorio raíz de tu proyecto. Este archivo debe contener tu información de firmas, con el siguiente aspecto:
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. En el archivo build.gradle de tu módulo, agrega código para cargar tu 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 tu archivo keystore.properties en otra ubicación (por ejemplo, en la carpeta del módulo en lugar de la carpeta raíz para el proyecto, o en tu servidor de compilación si usas 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 usando 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 usando esta sintaxis.
    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }
    
  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 en Build > Build Bundle(s) / APK(s) para compilar un APK o conjunto de apps de tu compilación de lanzamiento. Deberías ver el resultado de la compilación en el directorio build/outputs/ de tu módulo.

Debido a que tus archivos de compilación ya no contendrán información confidencial, ahora podrás incluirlos en el control de orígenes o cargarlos en una base de códigos compartida. Asegúrate de mantener protegido el archivo keystore.properties. Esto puede incluir eliminarlo del sistema de control de orígenes.

Cómo compilar y firmar tu app desde la línea de comandos

No necesitas Android Studio para firmar tu app. Puedes hacerlo desde la línea de comandos usando apksigner para APK o jarsigner para conjuntos de apps , o bien configurar Gradle para que se encargue de ello durante la compilación. En cualquier caso, debes generar primero una clave privada usando keytool. Por ejemplo:

keytool -genkey -v -keystore my-release-key.jks
-keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

Nota: keytool se encuentra en el directorio bin/ de tu JDK. Para encontrar tu JDK desde Android Studio, selecciona File > Project Structure y luego haz clic en SDK Location. Con esto, verás la ubicación del JDK.

En este ejemplo, se te solicitan contraseñas para el keystore y la clave, y para otorgar los campos de nombre distinguido de tu clave. Luego, se genera el keystore como un archivo llamado my-release-key.jks, que se guarda en el directorio actual (puedes moverlo cuando lo desees). El keystore contiene una clave única válida por 10,000 días.

Ahora puedes compilar un APK o conjunto de apps sin firma y firmarlo manualmente o configurar Gradle para que firme tu app.

Cómo firmar tu app manualmente desde la línea de comando

Si aún no lo hiciste, compila tu app desde la línea de comando. Si quieres usar un paquete de apps desde la línea de comando, usa jarsigner. Si prefieres firmar un APK, usa zipalign y apksigner tal como se describe a continuación.

  1. Abre una línea de comando desde Android Studio, selecciona View > Tool Windows > Terminal y navega al directorio donde se encuentra el APK sin firmar.
  2. Alinea el APK sin firmar usando zipalign:

    zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
    

    zipalign garantiza que todos los datos descomprimidos comiencen con una alineación de bytes en particular relacionada con el comienzo del archivo, lo que reduce el consumo de memoria RAM de una aplicación.

  3. Firma tu APK con tu clave privada usando apksigner:

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

    En este ejemplo, se genera el APK firmado en my-app-release.apk una vez que se firma con una clave privada y un certificado, que se almacenan en un único archivo de keystore: my-release-key.jks.

    La herramienta apksigner admite otras opciones de firmas, incluidas la firma de un archivo APK con archivos de clave y certificado privados separados y la firma de un APK con varios firmantes. Para obtener información detallada, consulta la referencia apksigner .

    Nota: Para usar la herramienta apksigner, debes tener instalada la revisión 24.0.3 o revisiones posteriores de Android SDK Build Tools. Puedes actualizar este paquete con SDK Manager.

  4. Verifica que tu APK esté firmado:

    apksigner verify my-app-release.apk
    

Cómo configurar Gradle para que firme tu app

Abre el archivo build.gradle de nivel de módulo y agrega el bloque signingConfigs {} con entradas para storeFile, storePassword, keyAlias y keyPassword, y luego pasa ese objeto a la propiedad signingConfig en tu tipo de compilación. Por ejemplo:

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            // You need to specify either an absolute path or include the
            // keystore file in the same directory as the build.gradle file.
            storeFile file("my-release-key.jks")
            storePassword "password"
            keyAlias "my-alias"
            keyPassword "password"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

Nota: En este caso, el keystore y la contraseña de clave pueden verse directamente en el archivo build.gradle. Para una mayor seguridad, debes quitar la información de firmas de tu archivo de compilación.

Ahora, cuando compiles tu app desde la línea de comando invocando una tarea de Gradle, Gradle firmará tu app (y ejecutará zipaling) por ti.

Ahora que ya configuraste la compilación de lanzamiento con tu clave de firma, la tarea "install" estará disponible para ese tipo de compilación. Por lo tanto, podrás compilar, alinear, firmar e instalar el APK de lanzamiento en un emulador o dispositivo con la tarea installRelease.

Un app firmada con tu clave privada está lista para su distribución, pero antes debes leer más información sobre cómo publicar tu app y revisar la lista de comprobación de lanzamiento para Google Play.