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.
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.
Respuestas:
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í
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:
- 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 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).
- Complete el Asistente de exportación y su aplicación se compilará, firmará, alineará y estará lista para su distribución.
-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" :-)
Aquí hay una guía sobre cómo firmar manualmente un APK. Incluye información sobre las novedades apk-signer
introducidas en build-tools 24.0.3
(10/2016)
Utilice esta herramienta (utiliza el nuevo apksigner de Google):
https://github.com/patrickfav/uber-apk-signer
Descargo de responsabilidad: soy el desarrollador :)
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
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
Use la 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
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 /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
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
¡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:
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.
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.
Para firmar manualmente un archivo APK de Android, ejecute estos tres comandos:
Generar archivo de almacén de claves
keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
Firme su archivo APK usando jarsigner
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
Alinear APK firmado usando la herramienta zipalign
zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH
Generate Keystore file
keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validez 10000
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
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>
Sign your app with your private keystore using jarsigner
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id
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
jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
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>
zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK
zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
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
zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
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>
¡El comando de verificación es solo para verificar si el APK está construido y firmado correctamente!
Espero que esto ayude a todos :)