Android Studio: come generare apk firmato utilizzando Gradle?


89

Ho cercato su Google e SO ma non riesco a trovare la mia risposta.

Questa è la prima volta che lavoro con il sistema gradle e ora sono sul punto di generare un APK firmato da caricare su Google Play (il progetto è importato da eclipse).

Ora ho letto la parte qui http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks che dovresti aggiungere signingConfigsal tuobuild.gradle

Ho aggiunto queste righe e ora ho visto che è necessario eseguire ./gradlew assembleReleasema eseguirlo nel mio cmd restituisce 'gradle' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch. Ho anche provato a fare clic con il pulsante destro del mouse su build.gradle ed eseguirlo, dicendo che ha avuto successo ma una volta che guardo nella cartella build / apk solo un file chiamatoapp-debug-unaligned.apk

Quindi come faccio a generare l'apk firmato utilizzando il sistema Gradle?



@ScottBarta ha fatto parzialmente il trucco, una volta che sono passato alla modalità di rilascio e ho eseguito il gradle ho ancora ricevuto un errore, ma usando he build> generate apk firmato tramite il menu alla fine ha funzionato! Grazie per averti votato al link fornito.
Appiccicoso

firmare con la versione v1 (firma jar) o v2 (firma apk completa) dal file gradle? soluzione qui: stackoverflow.com/questions/57943259/...
user1506104

Risposte:


97

Ci sono tre modi per generare la tua build secondo il buildType. (Nel tuo caso, è rilasciato ma può essere chiamato come vuoi.)

  1. Vai a Gradle Task nel pannello di destra di Android Studio e cerca assembleReleaseo assemble(#your_defined_buildtype)sotto Module Tasks

  2. Vai a Build Variant nel pannello di sinistra e seleziona la build dal menu a discesa

  3. Vai alla directory principale del progetto in Esplora file e apri cmd / terminal ed esegui:

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

    Finestre: gradlew assembleRelease or assemble(#your_defined_buildtype)

Se vuoi fare una build di rilascio (solo), puoi usare Build> Generate Signed apk. Per altri tipi di build, sono disponibili solo le tre opzioni precedenti.

Puoi trovare l'APK generato nella tua module/builddirectory contenente il nome del tipo di build.


4
Questo creerà un apk firmato solo se hai la configurazione di build nel tuo build.gradle. Se lo archivi negli strumenti di gestione del codice sorgente o lo condividi con altre persone, dovresti pensare di separare le credenziali della tua chiave di firma dal codice sorgente.
Janusz

Build> Genera apk firmato ... è così semplice
Atul

61

È possibile prendere qualsiasi progetto gradle Android Studio esistente e crearlo / firmarlo dalla riga di comando senza modificare alcun file. Ciò lo rende molto utile per archiviare il progetto nel controllo della versione mantenendo separate le chiavi e le password:

./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

1
Poiché abbiamo bisogno di passare il codice sorgente al companion, questo è il modo migliore per mantenere segreti i nostri dati del keystore. Grazie.
Yeung

2
comunque conoscere l' esistenza di queste proprietà android.injected.signing. * ?
Tixeon

Ho ottenuto queste informazioni da Xav dal team di Android Studio e non so se ci sono altre variabili come questa.
Wayne Piekarski

Ricevo java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Impossibile leggere la chiave XXXXXX dall'archivio "C: \ Users \ somedirectory \ Desktop \ someKey.jks": nessuna chiave con alias "XXXXXX" trovato nel keystore C: \ Users \ somedirectory \ Desktop \ someKey.jks. Perché?
Archie G. Quiñones

39

Puoi usare questo codice

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

    buildTypes {

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

quindi dal tuo terminale esegui

./gradlew assembleRelease

otterrai l'apk all'indirizzo

tua-app-android / build / output / apk / tua-app-android-release.apk


@ozcanovunc controlla di nuovo il percorso del tuo keystore potrebbe essere il tuo percorso definito sbagliato.
bhavesh kaila

Quando lo fai, è probabile che tu build.gradlesia controllato nel controllo della versione, così come le tue password! Considera l'idea di prendere un'altra strada quando la sicurezza è importante nel tuo progetto.
Marco7757

1
gradle assemblareRelease non funziona. Usa invece di assemblare gradlewRelease
Sathish Gadde,


-3

menu build> genera apk firmato


Se lo esegui, ti dice che non è il modo per farlo. Inoltre, se carico quel file .apk, viene generato un errore che dice che sono stati rilevati errori o qualcosa.
Appiccicoso

11
dice che il debug è attivo ... in Android Studio, a sinistra, dovrebbe esserci una scheda che dice "build varianti" ... fai clic su di essa e cambia tutto da "debug" a "release" ... dopodiché , genera di nuovo l'apk firmato ...
trickedoutdavid

2
Non funziona più! Ad esempio, l'APK che crea ha BuildConfig.DEBUG impostato su true. Questo mi ha causato innumerevoli problemi, ora devi usare il metodo gradlew assemblareRelease.
Ben Clayton

@BenClayton Hai assolutamente ragione! Ho perso ore per questo! Un altro "bug" molto fastidioso in Android Studio - Nessuna fine in vista con problemi ...
sjkm

Mi chiedo perché questo semplice passaggio non possa essere il modo più adatto per generare apk firmato come menzionato chiaramente. Questo passaggio ha generato l'app e funziona perfettamente per me, senza problemi. Ma molte altre risposte su SO mi hanno confuso pensando che cosa ho fatto potrebbe non correggere in modo o cosa.
Atul
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.