android - studio - Cómo firmar una aplicación ya compilada
generate keystore android (6)
Proceso automatizado:
Use esta herramienta (usa el nuevo apksigner de Google):
https://github.com/patrickfav/uber-apk-signer
Descargo de responsabilidad: soy el desarrollador :)
Proceso manual:
Paso 1: Genera Keystore (solo una vez)
Debe generar un almacén de claves una vez y usarlo para firmar su apk unsigned
. Utilice la keytool
proporcionada 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, 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 se utiliza el jarsigner
antiguo, debe zipalign DESPUÉS de la firma. Al usar el nuevo método apksigner
lo haces ANTES de firmar (confuso, lo sé). Invocar zipalign antes de apksigner funciona bien porque apksigner preserva la alineación y compresión de APK (a diferencia de jarsigner).
Puede verificar la alineación con
zipalign -c 4 my-aligned.apk
Paso 3: firmar y verificar
Usar build-tools 24.0.2 y versiones anteriores
Use jarsigner
que, al igual que la herramienta de claves, viene con la distribución JDK que se encuentra en %JAVA_HOME%/bin/
y la usa así:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
y puede ser verificado con
jarsigner -verify -verbose my_application.apk
Usando build-tools 24.0.3 y más nuevas
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 los archivos APK (Consulte here y here para obtener más detalles). Por lo tanto, Google implementó su propio apk apksigner
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
). Úselo así
apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name
y puede ser verificado con
apksigner verify my-app.apk
Descodifiqué un APK con apktool (ya que se perdió el código fuente original), así que pude solucionar algunos problemas con los archivos xml de diseño. Luego lo reconstruí con apktool y cuando traté de instalarlo en mi dispositivo (usando adb: adb install appname.apk) me dio este error:
[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
Sin embargo, el apk original fue firmado por un keystore (en eclipse IDE), este no es, ¿cómo puedo firmarlo correctamente con su archivo trapezoidal original fuera de Eclipse?
La forma más rápida es mediante la firma con el almacén de claves de depuración:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android
o en Windows:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android
Para aquellos de ustedes que no desean crear un archivo bat para editar para cada proyecto, o no quieren recordar todos los comandos asociados con los keytools y los programas jarsigner y solo quieren hacerlo en un solo 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 archivos cada vez.
Este programa puede guardar su configuración así que la próxima vez que la inicie, solo necesita presionar Generar y se encargará de ello. Eso es.
No requiere instalación, es completamente portátil y guarda sus configuraciones en un archivo CSV en la misma carpeta.
Utiliza jarsigner para firmar APK. No es necesario que firme con el almacén de claves original, solo genere uno nuevo. Lea sobre los detalles: http://developer.android.com/guide/publishing/app-signing.html
crea una clave usando
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
luego, firme el apk usando:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
revisa apk-signer una buena manera de iniciar sesión en tu aplicación