Cómo firmar un archivo apk de Android

111

Estoy intentando firmar mi archivo apk. No sé cómo hacerlo. No puedo encontrar buenas direcciones detalladas. Tengo muy poca experiencia en programación, por lo que cualquier ayuda sería apreciada.

chriss
fuente
2
compruebe esto: Cómo firmar el proyecto de Android apk
droid kid
2
Puede encontrar un gran tutorial sobre esto aquí en androidcookers.co.cc/2012/06/…
Bratin
1
Utilicé este tutorial completo desde la creación de mi propio almacén de claves hasta la exportación de un APK firmado en Eclipse. mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

Respuestas:

84

El manual es lo suficientemente claro. Especifique con qué parte se queda atascado después de trabajar en ella, sugeriría:

https://developer.android.com/studio/publish/app-signing.html

De acuerdo, una pequeña descripción general sin referencia o eclipse alrededor, así que deje algo de espacio para errores, pero funciona así

  • Abra su proyecto en eclipse
  • Presione el botón derecho del mouse -> herramientas (¿herramientas de Android?) -> exportar aplicación firmada (¿apk?)
  • Pasar por el asistente:
  • Haz una nueva tienda de llaves. recuerda esa contraseña
  • Firma tu 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 utilizar el Asistente de exportación para exportar un .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 discutió 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 tanto Keytool como 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 .apk firmado y alineado en Eclipse:

  1. Seleccione el proyecto en el Explorador de paquetes y seleccione Archivo> Exportar.
  2. Abra la carpeta de Android, seleccione Exportar aplicación de Android y haga clic en Siguiente.

    Ahora se inicia el asistente Exportar aplicación de 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 el .apk (o crear un nuevo almacén de claves y clave privada).

  3. Complete el Asistente de exportación y su aplicación se compilará, firmará, alineará y estará lista para su distribución.
Nanne
fuente
No entiendo cómo empezar. Estoy usando la versión de eclipse: Helios Service Release 1
chriss
2
pero por favor lea TODO. También hay algunos consejos al final para el eclipse
Nanne
1
en la creación de la clave, ¿qué debo ingresar para el alias?
chriss
9
¿Leíste el manual? -alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.Es solo un alias. Un nombre, por así decirlo. Sugeriría "primera tecla" :-)
Nanne
1
Lo siento, todavía no entiendo. ¿Cómo usaría este alias? ¿Cual es su propósito?
user462990
37

Aquí hay una guía sobre cómo firmar manualmente un APK. Incluye información sobre las novedades apk-signerintroducidas en build-tools 24.0.3 (10/2016)

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 la 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 secuencia de comandos 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í.

Patrick Favre
fuente
10

Para los usuarios de IntelliJ IDEA o Android Studio, siga estos pasos:
* Desde el menú Build/Generate signed APK
* Necesita crear una ruta de almacenamiento de claves. En el cuadro de diálogo, haga clic en Create new. Creará un archivo jks que incluye sus claves. Seleccione carpeta, defina una contraseña. Entonces su almacén de claves está bien.
* Cree una nueva clave para su aplicación utilizando un alias, contraseña de clave, su nombre, etc.
* Haga clic en Siguiente.
* En 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

trante
fuente
8

¡No te preocupes ...! Siga estos pasos a continuación y obtendrá su archivo .apk firmado. También estaba preocupado por eso, pero estos pasos me sacan de la frustración. Pasos para firmar su solicitud:

  1. Exporta 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 existe su "jarsigner.exe" (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 proporcione su contraseña: Introduzca 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á utilizando eclipse con ADT, entonces es sencillo compilar, firmar, alinear y preparar el archivo para su distribución. Lo que tiene que hacer es seguir estos pasos.

  • Archivo> Exportar.
  • Exportar aplicación de Android
  • Examinar -> seleccione su proyecto
  • Siguiente -> Siguiente

Estos pasos compilarán, firmarán y alinearán en zip su proyecto y ahora está listo para distribuir su proyecto o cargarlo en la tienda Google Play.

Pir Fahim Shah
fuente
Eso es exactamente lo que necesitaba, estaba usando una nueva herramienta de construcción en línea y tuve que usar mi almacén de claves anterior, no el recién generado. Lo único que me faltaba era ZIP ALIGNing el apk, así que si alguien tiene el mismo problema, vaya aquí stackoverflow.com/a/22682132/826194
Larzan
5

Proceso de firma de APK

Para firmar manualmente un archivo APK de Android, ejecute estos tres comandos:

  1. Generar archivo de almacén de claves

    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. Alinear APK firmado usando la herramienta zipalign

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH

PASO 1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validez 10000

Ejemplo:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

contraseña del almacén de claves: yourApp @ 123 contraseña clave: 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:
[Storing id.keystore]

D:\ru\SignedBuilds\MySignedApp>

PASO 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>

PASO 3


Alinear el paquete APK final usando 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 successfully

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:

¡El comando de verificación es solo para verificar si el APK está construido y firmado correctamente!

Referencias

Espero que esto ayude a todos :)

Rupesh Yadav
fuente
2

Me encontré con este problema y lo resolví al verificar la versión min sdk en el manifiesto. Estaba configurado en 15 (ICS), pero mi teléfono funcionaba con 10 (Gingerbread)

RJL
fuente