Proceso automatizado:
Utilice esta herramienta (utiliza el nuevo apksigner de Google):
https://github.com/patrickfav/uber-apk-signer
Descargo de responsabilidad: soy el desarrollador :)
Proceso manual:
Paso 1: Genere el almacén de claves (solo una vez)
Necesita generar un almacén de claves una vez y usarlo para firmar su unsignedapk. Utilice el proporcionado por el JDK que se encuentra enkeytool %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, por ejemplo, %ANDROID_HOME%/sdk/build-tools/24.0.2/es un paso de optimización obligatorio si desea cargar el apk en Play Store.
zipalign -p 4 my.apk my-aligned.apk
Nota: cuando utilice el antiguo jarsigner, deberá zipalign DESPUÉS de firmar. Cuando usa el nuevo apksignermétodo, lo hace ANTES de firmar (confuso, lo sé). Invocar zipalign antes de apksigner funciona bien porque apksigner conserva la alineación y la compresión del APK (a diferencia de jarsigner).
Puede verificar la alineación con
zipalign -c 4 my-aligned.apk
Paso 3: Firmar y verificar
Uso de herramientas de compilación 24.0.2 y anteriores
Use jarsignerque, como la herramienta de teclas, viene con la distribución JDK que se encuentra en %JAVA_HOME%/bin/y úsela así:
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 herramientas de compilación 24.0.3 y posteriores
Android 7.0 presenta 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 alteraciones no autorizadas en archivos APK (consulte aquí y aquí para obtener más detalles). Por lo tanto, Google implementó su propio firmante de apk llamadoapksigner (¡duh!). El archivo de script se puede encontrar en %ANDROID_HOME%/sdk/build-tools/24.0.3/(el .jar está en la /libsubcarpeta). Úselo 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í.