¿Por qué es necesario firmar los archivos APK?
Cada aplicación de Android debe estar firmada digitalmente antes de poder instalarse. La firma tiene varios propósitos:
- Verifica la identidad del desarrollador de la aplicación.
- Garantiza que el APK no haya sido manipulado
- Permite que Android haga coincidir las actualizaciones de la aplicación con la original
- Requerido para instalar en todos los dispositivos Android
Herramienta de escritorio requerida
La firma de APK requiere herramientas de línea de comandos (JDK/Android SDK). Esto no se puede hacer en un navegador web. Siga la guía a continuación para firmar APK en su computadora.
Método 1: firmar con apksigner (recomendado)
apksigner es la herramienta de firma de APK oficial de Google, incluida en las herramientas de compilación del SDK de Android.
Paso 1: generar un almacén de claves
keytool -genkey -v -keystore my-release-key.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias my-key-alias
Paso 2: firma el APK
apksigner sign --ks my-release-key.jks \
--ks-key-alias my-key-alias \
--out signed-app.apk unsigned-app.apk
Paso 3: verificar la firma
apksigner verify --verbose signed-app.apk
Método 2: firmar con jarsigner (Legacy)
# Sign
jarsigner -verbose -sigalg SHA256withRSA \
-digestalg SHA-256 \
-keystore my-release-key.jks \
app-unsigned.apk my-key-alias
# Verify
jarsigner -verify -verbose app-signed.apk
Paso 4: Zipalign (¡Importante!)
Después de firmar, optimice el APK con zipalign:
zipalign -v 4 signed-app.apk aligned-app.apk
Firma de depuración (para pruebas)
Para fines de prueba, puede utilizar el almacén de claves de depuración predeterminado de Android:
# Location of debug keystore:
# Linux/Mac: ~/.android/debug.keystore
# Windows: C:\Users\{USERNAME}\.android\debug.keystore
# Sign with debug key
apksigner sign --ks ~/.android/debug.keystore \
--ks-key-alias androiddebugkey \
--ks-pass pass:android \
app.apk
Comparación de herramientas de firma
| Métrica | firmante de apk | jarsigner |
|---|---|---|
| Firma V1 | ||
| Firma V2 | ||
| Firma V3 | ||
| Recomendado | Legado |
Firmante de APK: preguntas frecuentes
Preguntas comunes sobre la firma de APK, los almacenes de claves y la firma de códigos de Android
Por qué es importante el orden de alineación (zipalign antes de apksigner) en Android 11-15
Uno de los errores más frecuentes que cometen los desarrolladores y modders al firmar un APK modificado o fusionado es ejecutar zipalign después firmando el paquete, o usar la utilidad jarsigner heredada de Java en lugar del SDK de Android apksigner de Google. Debido a que APK Signature Scheme v2 y v3 calculan un hash criptográfico sobre todo el diseño binario del archivo ZIP, modificar los desplazamientos de bytes con zipalign después de firmar invalida inmediatamente el bloque de firma v2/v3.
A partir de Android 11 (nivel de API 30) y aplicado estrictamente en Android 14 y 15, PackageManager requiere dos condiciones no negociables para cualquier APK dirigido a niveles de SDK modernos:
- resources.arsc alineado de 4 bytes sin comprimir: La tabla de recursos compilada (resources.arsc) debe almacenarse sin comprimir (STORED) y alinearse en un límite de 4 bytes para que Android pueda asignarla en memoria (mmap) directamente sin copiarla en la RAM. Ejecute siempre la firma zipalign -p -f -v 4 input.apk aligned.apk antes.
- Bloque de firma obligatorio v2+: Firmar un APK dirigido a API 30+ con jarsigner (que solo escribe una firma META-INF/ v1) hará que Android 11–15 rechace la instalación con INSTALL_PARSE_FAILED_NO_CERTIFICATES. Utilice el generador de comandos interactivo anterior para crear el comando apksigner --v2-signing-enabled=true exacto para su almacén de claves, o verifique su salida firmada en nuestro Verificador de firma APK.