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 unsigned
apk. 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 apksigner
mé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 jarsigner
que, 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 /lib
subcarpeta). Ú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í.