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.