Android Studio: ¿cómo generar apk firmado usando Gradle?

89

He buscado en Google y SO, pero no puedo encontrar mi respuesta.

Esta es la primera vez que trabajo con el sistema gradle y ahora estoy a punto de generar un APK firmado para cargarlo en google play (el proyecto se importa desde eclipse).

Ahora he leído la parte aquí http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks que debes agregar signingConfigsa tubuild.gradle

./gradlew assembleReleaseAgregué estas líneas y ahora vi que necesita ejecutar, pero ejecutar esto en mi cmd devuelve 'gradle' no se reconoce como un comando interno o externo, programa operable o archivo por lotes. También intenté hacer clic derecho en build.gradle y ejecutarlo, diciendo que fue exitoso, pero una vez que miré en la carpeta build / apk, solo un archivo llamadoapp-debug-unaligned.apk

Entonces, ¿cómo puedo generar la apk firmada usando el sistema Gradle?

Pegajoso
fuente
@ScottBarta Parcialmente hizo el truco, una vez que cambié al modo de lanzamiento y ejecuté el gradle, todavía recibí un error, pero al usar él build> generar apk firmado a través del menú, finalmente funcionó. Gracias, te voté a favor en el enlace proporcionado.
Gooey
firmar con la versión v1 (firma jar) o v2 (firma completa apk) del archivo gradle? solución aquí: stackoverflow.com/questions/57943259/…
user1506104

Respuestas:

97

Hay tres formas de generar su compilación según el buildType. (En su caso, es una versión, pero se puede nombrar como desee).

  1. Vaya a Gradle Task en el panel derecho de Android Studio y busque assembleReleaseo assemble(#your_defined_buildtype)en Module Tasks

  2. Vaya a Compilar variante en el Panel izquierdo y seleccione la compilación del menú desplegable

  3. Vaya al directorio raíz del proyecto en File Explore y abra cmd / terminal y ejecute:

    Linux: ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    Ventanas: gradlew assembleRelease or assemble(#your_defined_buildtype)

Si desea hacer una compilación de lanzamiento (solo), puede usar Build> Generate Signed apk. Para otros tipos de compilación, solo están disponibles las tres opciones anteriores.

Puede encontrar el APK generado en su module/builddirectorio con el nombre del tipo de compilación.

pyus13
fuente
4
Esto solo construirá una apk firmada si tiene la configuración de compilación en su build.gradle. Si almacena esto en herramientas de administración de código fuente o lo comparte con otras personas, debería pensar en separar las credenciales de su clave de firma de su código fuente.
Janusz
Construir> Generar apk firmado ... es tan simple como eso
Atul
61

Es posible tomar cualquier proyecto gradle de Android Studio existente y compilarlo / firmarlo desde la línea de comandos sin editar ningún archivo. Esto lo hace muy bueno para almacenar su proyecto en el control de versiones mientras mantiene sus claves y contraseñas separadas:

./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD
Wayne Piekarski
fuente
1
Dado que necesitamos pasar el código fuente al compañero, esta es la mejor manera de mantener en secreto nuestro almacén de claves. Gracias.
Yeung
2
de todos modos llegar a conocer la existencia de estas propiedades android.injected.signing. * ?
Tixeon
Obtuve esta información de Xav del equipo de Android Studio, y no sé si hay otras variables como esta.
Wayne Piekarski
Recibo java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: No se pudo leer la clave XXXXXX de la tienda "C: \ Users \ somedirectory \ Desktop \ someKey.jks": No hay clave con alias 'XXXXXX' que se encuentra en el almacén de claves C: \ Users \ somedirectory \ Desktop \ someKey.jks. ¿Porqué es eso?
Archie G. Quiñones
39

Puedes usar este código

android {
   ...
    signingConfigs {
        release {
            storeFile file("../your_key_store_file.jks")
            storePassword "some_password"
            keyAlias "alias_name"
            keyPassword "key_password"
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
        }
    }
   ...
}

luego desde tu terminal ejecuta

./gradlew assembleRelease

obtendrás la apk en

su-aplicación-android / build / outputs / apk / your-android-app-release.apk

droidchef
fuente
@ozcanovunc, por favor verifique la ruta de su almacén de claves nuevamente, podría ser su ruta definida incorrectamente.
bhavesh kaila
Al hacer esto, es probable que usted build.gradleesté registrado en el control de versiones, ¡y también sus contraseñas! Considere tomar otra ruta cuando la seguridad sea importante en su proyecto.
Marco7757
1
gradle ensamblarRelease no funciona. Úselo en lugar de gradlew ensamblar Lanzamiento
Sathish Gadde
-3

menú de compilación> generar apk firmado

engañado por David
fuente
Si ejecuta eso, le dice que esa no es la forma de hacerlo. Además, si subo ese archivo .apk, genera un error que dice que hay detecciones de errores o algo.
Gooey
11
dice que la depuración está activada ... en Android Studio, a la izquierda, debería haber una pestaña que diga 'compilar variantes' ... haga clic en ella y cambie todo de 'depurar' a 'liberar' ... después de eso , generar apk firmado de nuevo ...
trickedoutdavid
2
¡Esto ya no funciona! Por ejemplo, el APK que crea tiene BuildConfig.DEBUG establecido en verdadero. Esto me ha causado un sinfín de problemas, ahora debe usar el método gradlew assembleRelease.
Ben Clayton
@BenClayton ¡Tienes toda la razón! ¡Perdí horas por esto! Otro "error" muy molesto en Android Studio - No hay un final a la vista con problemas ...
sjkm
Me pregunto por qué este simple paso no puede ser la forma más adecuada de generar apk firmado, como se menciona claramente. Este paso generó una aplicación y funciona perfectamente para mí, sin ningún problema. Pero muchas otras respuestas sobre SO me confundieron pensando que lo que hice podría no ser correcto o qué.
Atul