studio - Cómo firmar un archivo apk de Android
generar apk debug android studio (6)
APK Signing Process
Para firmar manualmente el archivo APK de Android necesitamos tres comandos debajo
1 Generar archivo Keystore
keytool -genkey -v -keystore <_YOUR_KEYSTORE_NAME>.keystore -alias <_ALIAS_NAME> -keyalg RSA -keysize 2048 -validity 10000
2 Firme su archivo APK usando Jarsigner
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <_KEYSTORE_FILE_PATH> <_UNSIGNED_APK_PATH> <_ALIAS_NAME>
3 Alinee el APK firmado con la herramienta zipalign
zipalign -v 4 <_jarsigned_APK_FILE_PATH> <_ZIPALIGNED_SIGNED_APK_FILE_PATH>
#STEP-1#
Generate Keystore file
F: / ru / ru_doc / Signed_apk / MySignedApp> keytool -genkey -v -keystore <_YOUR_KEYSTORE_NAME> .keystore -alias <_ALIAS_NAME> -keyalg RSA -keysize 2048 -validez 10000
Ejemplo_
F:/ru/ru_doc/Signed_apk/MySignedApp>keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
contraseña de keystore : contraseña de la clave de su aplicación @ 123 : yourApp @ 123
CMD O / P-
D:/ru/SignedBuilds/MySignedApp>keytool -genkey -v -keystore id.keystore
-alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: MySignedApp Sample
What is the name of your organizational unit?
[Unknown]: Information Technology
What is the name of your organization?
[Unknown]: MySignedApp Demo
What is the name of your City or Locality?
[Unknown]: Mumbai
What is the name of your State or Province?
[Unknown]: Maharashtra
What is the two-letter country code for this unit?
[Unknown]: IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
[no]: y
Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
C=IN
Enter key password for <MySignedApp>
(RETURN if same as keystore password):
Re-enter new password:
They don''t match. Try again
Enter key password for <MySignedApp>
(RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]
D:/ru/SignedBuilds/MySignedApp>
#STEP-2#
Sign your app with your private keystore using jarsigner
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore <_KEYSTORE_FILE_PATH> <_UNSIGNED_APK_PATH> <_ALIAS_NAME>
Ejemplo_
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:/ru/SignedBuilds/MySignedApp/id.keystore D:/ru/SignedBuilds/MySignedApp/MySignedAppS1-release-unsigned.apk id
CMD O / P-
D:/ru/SignedBuilds/MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:/ru/SignedBuilds/MySignedApp/id.keystore D:/ru/SignedBuilds/MySignedApp/MySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
adding: META-INF/MANIFEST.MF
adding: META-INF/---.SF
adding: META-INF/---.RSA
signing: AndroidManifest.xml
.....
signing: classes.dex
signing: lib/commons-codec-1.6.jar
signing: lib/armeabi/libkonyjsvm.so
jar signed.
Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not
be able to validate this jar after the signer certificate''s expiration date (2044-02-07) or after an
y future revocation date.
D:/ru/SignedBuilds/MySignedApp>
Verify that your APK is signed
jarsigner -verify -verbose -certs <_JARSIGNED_APK_FILE_PATH>
Ejemplo_
jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
CMD O / P-
D:/ru/SignedBuilds/MySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
s = signature was verified
m = entry is listed in manifest
k = at least one certificate was found in keystore
i = at least one certificate was found in identity scope
jar verified.
Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate''s expiration date (2044-02-09) or after any
future revocation date.
D:/ru/SignedBuilds/MySignedApp>
#STEP 3#
Alinee el paquete APK final con zipalign
zipalign -v 4 <_jarsigned_APK_FILE_PATH> <_ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK_>
Ejemplo_
zipalign -v 4 D:/ru/SignedBuilds/MySignedApp/MySignedAppS1-release-unsigned.apk D:/ru/SignedBuilds/MySignedApp/MySignedApp.apk
CMD O / P-
D:/Android/android-sdk/build-tools/19.1.0>zipalign -v 4 D:/ru/ru_doc/Signed_apk/MySignedApp/28.09.16
_prod_playstore/MySignedAppS1-release-unsigned.apk D:/ru/ru_doc/Signed_apk/MySignedApp/28.09.16_prod
_playstore/MySignedApp.apk
Verifying alignment of D:/ru/SignedBuilds/MySignedApp/MySignedApp.apk (
4)...
4528613 classes.dex (OK - compressed)
5656594 lib/commons-codec-1.6.jar (OK - compressed)
5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful
D:/Android/android-sdk/build-tools/19.1.0>
Verify that your APK is Aligned succesfully
zipalign -c -v 4 <_YOUR_APK_PATH>
Ejemplo_
zipalign -c -v 4 D:/ru/SignedBuilds/MySignedApp/MySignedApp.apk
CMD O / P-
D:/Android/android-sdk/build-tools/19.1.0>zipalign -c -v 4 D:/ru/SignedBuilds/MySignedApp/MySignedApp.apk
Verifying alignment of D:/ru/SignedBuilds/MySignedApp/MySignedApp.apk (
4)...
4453984 res/drawable/zoomout.png (OK)
4454772 res/layout/tabview.xml (OK - compressed)
4455243 res/layout/wheel_item.xml (OK - compressed)
4455608 resources.arsc (OK)
4470161 classes.dex (OK - compressed)
5597923 lib/commons-codec-1.6.jar (OK - compressed)
5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful
D:/Android/android-sdk/build-tools/19.1.0>
Nota:
Verify
comandos es solo para verificar si el APK está compilado y firmado correctamente!
Referencia
androidapk-code-signing-process
Espero que esto ayude en e y todos :)
Estoy intentando firmar mi archivo apk. No puedo entender cómo hacerlo. No puedo encontrar buenas direcciones en profundidad. Tengo muy poca experiencia en programación, por lo que cualquier ayuda sería apreciada.
¡No te preocupes ...! Siga estos pasos a continuación y obtendrá su archivo .apk firmado. También me preocupaba eso, pero estos pasos me alejan de la frustración. Pasos para firmar su solicitud:
- Exportar el paquete sin firmar:
Haga clic derecho en el proyecto en Eclipse -> Herramientas de Android -> Exportar paquete de aplicaciones sin firmar (como aquí exportamos nuestro GoogleDriveApp.apk al escritorio)
Firme la aplicación usando su almacén de claves y la herramienta jarsigner (siga los pasos a continuación):
Abra cmd -> cambie el directorio donde su "jarsigner.exe" existe (como aquí en mi sistema existe en "C: / Archivos de programa / Java / jdk1.6.0_17 / bin"
Ahora ingrese el comando belwo en cmd:
jarsigner -verbose -keystore c: / users / android / debug.keystore c: / users / pir fahim / Desktops / GoogleDriveApp.apk my_keystore_alias
Le pedirá que ingrese su contraseña: ingrese la frase de contraseña para el almacén de claves: firmará su apk. Para verificar que la firma sea exitosa, puede ejecutar:
jarsigner -verify c: / users / pir fahim / Desktops / GoogleDriveApp.apk
Debería volver con: jar verificado.
Método 2
Si está usando eclipse con ADT, entonces es simple compilar, firmar, alinear y preparar el archivo para su distribución. Qué debe hacer simplemente siga estos pasos.
- Archivo> Exportar.
- Exportar aplicaciones de Android
- Examinar -> seleccionar su proyecto
- Siguiente -> Siguiente
Estos pasos compilarán, firmarán y ajustarán su proyecto de forma zip y ahora están listos para distribuir su proyecto o cargarlo en Google Play Store.
Aquí hay una guía sobre cómo firmar manualmente un APK. Incluye información sobre el nuevo apk-signer
introducido en build-tools 24.0.3
(10/2016)
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 obligatoria 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
El manual es lo suficientemente claro. Por favor, especifique a qué parte se queda atascado después de trabajar en ello, sugeriría:
https://developer.android.com/studio/publish/app-signing.html
Bien, un pequeño resumen sin referencia o eclipse, así que deja un poco de espacio para errores, pero funciona así
- Abra su proyecto en eclipse
- Presione el botón derecho -> herramientas (¿herramientas de Android?) -> exportar aplicación firmada (apk?)
- Revisa el asistente:
- Crea una nueva tienda de claves. recuerda esa contraseña
- Firme su aplicación
- Guárdalo, etc.
Además, desde el enlace:
Compilar y firmar con Eclipse ADT
Si está utilizando Eclipse con el complemento ADT, puede usar el Asistente de exportación para exportar un archivo .apk firmado (e incluso crear un nuevo almacén de claves, si es necesario). El Asistente de exportación realiza toda la interacción con Keytool y Jarsigner por usted, lo que le permite firmar el paquete utilizando una GUI en lugar de realizar los procedimientos manuales para compilar, firmar y alinear, como se explicó anteriormente. Una vez que el asistente haya compilado y firmado su paquete, también realizará la alineación del paquete con zip align. Debido a que el Asistente de exportación utiliza Keytool y Jarsigner, debe asegurarse de que estén accesibles en su computadora, como se describe anteriormente en la Configuración básica para la firma.
Para crear un archivo .apk firmado y alineado en Eclipse:
- Seleccione el proyecto en el Explorador de paquetes y seleccione Archivo> Exportar.
Abra la carpeta de Android, seleccione Exportar aplicación de Android y haga clic en Siguiente.
Ahora se inicia el asistente Exportar aplicación Android, que lo guiará a través del proceso de firma de su aplicación, incluidos los pasos para seleccionar la clave privada con la que firmar .apk (o crear un nuevo almacén de claves y una clave privada).
- Complete el Asistente de exportación y su aplicación será compilada, firmada, alineada y lista para su distribución.
Me encontré con este problema y fue resuelto al verificar la versión min SDK en el manifiesto. Se estableció en 15 (ICS), pero mi teléfono corría 10 (Gingerbread)
Para los usuarios de IntelliJ IDEA o Android Studio, siga estos pasos:
* Desde el menú Build/Generate signed APK
* Necesita crear una ruta del almacén de claves. Desde el cuadro de diálogo, haz clic en Create new
. Creará un archivo jks que incluye sus claves. Seleccionar carpeta, definir una contraseña. Entonces tu almacén de claves está bien.
* Crea una nueva clave para tu aplicación usando alias, contraseña, tu nombre, etc.
* Haga clic en Siguiente.
* Desde el cuadro de diálogo, seleccione Proguard o no.
Su archivo APK firmado está listo.
Archivo de ayuda: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html