Android Studio: como gerar apk assinado usando o Gradle?

89

Eu pesquisei no Google e no SO, mas não consigo encontrar minha resposta.

Esta é a primeira vez que trabalho com o sistema gradle e agora estou gerando um APK assinado para fazer upload para o Google Play (o projeto é importado do eclipse).

Agora eu li a parte aqui http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks que você deve adicionar signingConfigsao seubuild.gradle

Eu adicionei essas linhas e agora vi que você precisa executar, ./gradlew assembleReleasemas executando isso em meu cmd retorna 'gradle' não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote. Também tentei clicar com o botão direito do mouse no build.gradle e executá-lo, dizendo que foi bem-sucedido, mas quando olho na pasta build / apk apenas um arquivo chamadoapp-debug-unaligned.apk

Então, como faço para gerar o apk assinado usando o sistema Gradle?

Pegajoso
fonte
@ScottBarta Parcialmente fez o truque, depois que mudei para o modo de liberação e executei o gradle, ainda recebi um erro, mas usando ele construir> gerar apk assinado através do menu acabou dando certo! Obrigado, eu votei a favor no link fornecido.
Gooey
assinar com a versão v1 (assinatura jar) ou v2 (assinatura apk completa) do arquivo gradle? solução aqui: stackoverflow.com/questions/57943259/…
user1506104

Respostas:

97

Existem três maneiras de gerar sua construção de acordo com o buildType. (No seu caso, é lançamento, mas pode ser nomeado como você quiser.)

  1. Vá para Gradle Task no painel direito do Android Studio e pesquise assembleReleaseou assemble(#your_defined_buildtype)em Module Tasks

  2. Vá para Build variant no painel esquerdo e selecione a build no menu suspenso

  3. Vá para o diretório raiz do projeto em File Explore e abra cmd / terminal e execute:

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

    Janelas: gradlew assembleRelease or assemble(#your_defined_buildtype)

Se você quiser fazer uma versão de lançamento (apenas), você pode usar Build> Generate Signed apk. Para outros tipos de construção, apenas as três opções acima estão disponíveis.

Você pode encontrar o APK gerado em seu module/builddiretório com o nome do tipo de compilação nele.

pyus13
fonte
4
Isso só vai construir um apk assinado se você tiver a configuração de construção em seu build.gradle. Se você armazenar isso em ferramentas de gerenciamento de código-fonte ou compartilhar com outras pessoas, deve pensar em separar as credenciais de sua chave de assinatura de seu código-fonte.
Janusz
Construir> Gerar apk assinado ... é tão simples quanto isso
Atul
61

É possível pegar qualquer projeto gradle do Android Studio existente e construí-lo / assiná-lo a partir da linha de comando sem editar nenhum arquivo. Isso o torna muito bom para armazenar seu projeto no controle de versão, enquanto mantém suas chaves e senhas 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
fonte
1
Como precisamos passar o código-fonte para o complementar, esta é a melhor maneira de manter nosso armazenamento de chaves em segredo. Obrigado.
Yeung
2
mesmo assim, conhecendo a existência dessas propriedades android.injected.signing. * ?
Tixeon
Consegui essa informação com Xav da equipe do Android Studio e não sei se existem outras variáveis ​​como essa.
Wayne Piekarski
Estou recebendo java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Falha ao ler a chave XXXXXX da loja "C: \ Users \ somedirectory \ Desktop \ someKey.jks": Nenhuma chave com o alias 'XXXXXX' encontrado em keystore C: \ Users \ somedirectory \ Desktop \ someKey.jks. Por que é que?
Archie G. Quiñones
39

Você pode 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
        }
    }
   ...
}

então de seu terminal executado

./gradlew assembleRelease

você obterá o apk em

your-android-app / build / outputs / apk / your-android-app-release.apk

droidchef
fonte
@ozcanovunc, verifique o caminho do armazenamento de chaves novamente, pode ser o caminho definido incorretamente.
bhavesh kaila
Ao fazer isso, é provável que seu build.gradlecontrole de versão seja verificado, assim como suas senhas! Considere seguir outro caminho quando a segurança for importante em seu projeto.
Marco7757 de
1
gradle assembleRelease não está funcionando. Use em vez de gradlew assembleRelease
Sathish Gadde
-3

menu de construção> gerar apk assinado

trickedoutdavid
fonte
Se você executar isso, ele dirá que não é assim que se faz. Além disso, se eu fizer upload desse arquivo .apk, ele gerará um erro dizendo que a detecção de erros ou algo está ativado.
Gooey
11
diz que a depuração está ativada ... no android studio, à esquerda, deve haver uma guia que diz 'variantes de compilação' ... clique nela e mude tudo de 'depurar' para 'liberar' ... depois disso , gerar apk assinado novamente ...
trickedoutdavid
2
Isso não funciona mais! Por exemplo, o APK que ele cria tem BuildConfig.DEBUG definido como verdadeiro. Isso me causou muitos problemas, agora você deve usar o método gradlew assembleRelease.
Ben Clayton de
@BenClayton Você está absolutamente certo! Perdi horas por causa disso! Outro "bug" muito chato no Android Studio - Sem problemas à vista ...
sjkm
Eu me pergunto por que esta etapa simples não pode ser a maneira mais adequada para gerar apk assinado, como menciona claramente. Esta etapa gerou aplicativo e funciona perfeitamente para mim, sem nenhum problema. Mas muitas outras respostas em cima de SO me confundiram pensando que o que eu fiz pode não ser correto ou o quê.
Atul