Cómo firmar un APK ya compilado
He descodificado un APK con apktool (como el código fuente original se perdió) por lo que podría arreglar algunos problemas con los archivos xml de diseño. Lo he reconstruido de nuevo con apktool y cuando intenté instalarlo en mi dispositivo (usando adb: adb install appname.apk) me dio este error:
[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
El apk original sin embargo fue firmado por un keystore (en eclipse IDE), este no es, ¿cómo puedo firmarlo correctamente con su archivo de trama original fuera de Eclipse?
- Ocultar una aplicación android instalada
- "Aplicación no instalada" al instalar un apk autofirmado en la tarjeta SD
- Un archivo .apk que instala dos aplicaciones
- Instalar APK de forma programática en android
- Android compara la firma del paquete actual con debug.keystore
- Desarrollador de Android "Subir nuevo APK a la producción 99% completa" y pegado
- Fallo al intentar instalar APK en el emulador
- Error al generar APK firmado en Android Studio 'Se permite acceso sólo desde el hilo de envío de eventos.'
- ¿Es incluso posible modificar .apk, agregando la clase adicional a .dex y re-embalar con manifest.xml modificado?
- Cómo ejecutar el archivo .APK en el emulador
- Cómo hacer un APK firmado en Sencha Touch 2
- Android: ¿Cómo obtener el nombre de archivo del instalador mediante programación?
- Filtrado de recursos del monolito de Play Services para hacer su APK más pequeño
Crear una clave usando
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
Luego firma el apk usando:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
Marque aquí para más información
Proceso automatizado:
Utilice esta herramienta (utiliza el nuevo apksigner de Google):
https://github.com/patrickfav/uber-apk-signer
Exención de responsabilidad: Im the developer 🙂
Proceso manual:
Paso 1: Generar Keystore (sólo una vez)
Necesita generar un almacén de claves una vez y usarlo para firmar su apk unsigned
. Utilice el keytool
proporcionado por el JDK que se encuentra en %JAVA_HOME%/bin/
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
Paso 2 o 4: Zipalign
zipalign
que es una herramienta proporcionada por el SDK de Android que se encuentra en %ANDROID_HOME%/sdk/build-tools/24.0.2/
es un paso de optimización obligatorio si desea cargar el apk en Play Store.
zipalign 4 -p my.apk my-aligned.apk
Nota: al usar el jarsigner
viejo usted necesita zipalign DESPUÉS de firmar. Al usar el nuevo método de apksigner
lo haces ANTES de firmar (confuso, lo sé). Invocando zipalign antes apksigner funciona bien porque apksigner preserva alineación y compresión APK (a diferencia de jarsigner).
Puede verificar la alineación con
zipalign -c 4 my-aligned.apk
Paso 3: firmar y verificar
Uso de build-tools 24.0.2 y anteriores
Use jarsigner
que, al igual que el keytool, viene con la distribución JDK que se encuentra en %JAVA_HOME%/bin/
y lo usa de la siguiente manera:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
Y se puede verificar con
jarsigner -verify -verbose my_application.apk
Uso de build-tools 24.0.3 y versiones posteriores
Android 7.0 introduce APK Signature Scheme v2, un nuevo esquema de firma de aplicaciones que ofrece tiempos de instalación de aplicaciones más rápidos y más protección contra las alteraciones no autorizadas a los archivos APK. (Véase aquí y aquí para más detalles). Por lo tanto, Google implementó su propio firmante apk llamado apksigner
(duh!) El archivo de script se puede encontrar en %ANDROID_HOME%/sdk/build-tools/24.0.3/
(el .jar está en la subcarpeta /lib
). Úsalo así
apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name
Y se puede verificar con
apksigner verify my-app.apk
La documentación oficial se puede encontrar aquí.
Usa jarsigner para firmar APK. No tiene que firmar con el almacén de claves original, simplemente genere uno nuevo. Lea los detalles: http://developer.android.com/guide/publishing/app-signing.html
La manera más rápida es firmando con el depurador keystore: jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android
Compruebe a apk-signer una buena manera de firmar su aplicación
Para aquellos de ustedes que no quieren crear un archivo de murciélagos para editar para cada proyecto, o no quieren recordar todos los comandos asociados con los keytools y los programas jarsigner y sólo quieren hacerlo en un proceso, utilicen este programa:
http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx
Lo construí porque estaba harto del largo proceso de tener que escribir todas las ubicaciones de los archivos cada vez.
Este programa puede guardar su configuración para que la próxima vez que lo inicie, solo tiene que pulsar Generar un archivo que lo manejará para usted. Eso es.
No requiere instalación, es totalmente portátil y guarda sus configuraciones en un CSV en la misma carpeta.