Sumário
Exportar um APK do Android Studio significa produzir um pacote de release assinado pelo menu Build, Generate Signed Bundle or APK: escolha o módulo, aponte para a sua keystore de release, escolha a variante release e compile. O Flutter precisa de um comando, o React Native precisa de uma tarefa Gradle e puxar um APK instalado do celular precisa de ADB. Exporte apenas builds que são seus, assine todo release e proteja a keystore.
Parte do hub de modding: Como modar um APK · Pegar apps instalados: Extrair um APK · Assinar qualquer coisa: Assinar um APK.
Por Abdul Emam, testador de APKs da ApkZena. Já enviei uma build de teste assinada com chave de debug para um segundo aparelho e passei uma hora me perguntando por que a atualização de release se recusava a instalar por cima dela. Chave diferente, app diferente. Confira a assinatura antes de compartilhar qualquer coisa.
Este guia cobre debug versus release, a criação da keystore, o assistente de exportação do Studio, as builds em Flutter e React Native, a extração de APKs instalados, a decisão entre APK e AAB, a assinatura e os erros de build que você vai encontrar.
Debug versus Release APK
APKs de debug usam uma configuração de desenvolvimento e servem para testes, enquanto APKs de release usam as configurações de produção e uma chave de assinatura de release; escolha a variante release para distribuição e depois confira o certificado e o comportamento em um aparelho de destino.
Quando cada um se aplica
Debug para o desenvolvimento diário e sessões de logcat. Release para testadores, distribuição por sideload e qualquer coisa que saia da sua máquina. Uma build de debug que escape para a natureza selvagem não recebe atualizações adequadas depois, deixando na mão todo mundo que a instalou.
Antes de exportar
Antes de exportar, confirme que existe uma keystore de release, que as senhas dela estão disponíveis, que um backup está guardado com segurança e que a variante de build está definida como release; essas verificações evitam erros de keystore ausente e a criação acidental de um artefato assinado com debug para distribuição.
Configure a keystore
Crie-a uma única vez com keytool, anote as duas senhas em algum lugar durável e copie o arquivo para dois locais independentes. A documentação de assinatura de apps do Google documenta cada flag e o racional por trás de manter as chaves de release privadas.
Faça o backup da keystore primeiro
Perder esse arquivo deixa órfãos todos os apps que ele assina: sem recuperação, sem apelo, reinstalação para todos os usuários. Faça o backup antes da primeira exportação, não depois do primeiro susto. Um disco USB criptografado mais um arquivo offline cobre quase todos os modos de falha.
Configure as variantes de build
Selecione a variante release no painel Build Variants para que a exportação use as configurações de produção. Compilar a variante de debug por engano produz um pacote que parece pronto e se comporta como uma build de teste, inclusive com a assinatura errada.
Como exportar um APK assinado
O assistente Generate Signed Bundle or APK do Android Studio guia exportações pontuais e a criação inicial da keystore, pedindo módulo, chave e variante release antes de compilar; confira o certificado resultante em vez de confiar apenas na mensagem de sucesso do assistente.
Passo 1: abra o assistente
Escolha Build e depois Generate Signed Bundle or APK no menu. Selecione APK em vez de Bundle quando o objetivo é a distribuição direta, já que bundles só se tornam instaláveis pelo processamento do Play.
Passo 2: selecione o módulo e a keystore
Escolha o módulo do app e depois a sua keystore de release com as senhas dela. Crie uma nova aqui apenas se não existir nenhuma, e faça o backup imediatamente depois: o assistente não vai te lembrar duas vezes.
Passo 3: escolha release e compile
Selecione o build type release, ative o shrinking e execute a build. O APK assinado cai em app/release/, nomeado com a variante e pronto para verificação.
Passo 4: verifique com o apksigner
apksigner verify --print-certs app-release.apk
Confirme o seu certificado e um resultado limpo. Depois instale em um aparelho real, não apenas em um emulador, porque caminhos de código específicos de hardware só existem em hardware.
Como compilar um APK em Flutter
O build de Android do Flutter compila o código Dart e empacota o app pelo Gradle; depois de configurar a assinatura de release, flutter build apk --release cria um APK na pasta de saída do Flutter, que deve ser verificado antes de distribuir para testadores em aparelhos de destino suportados.
O comando de release
flutter build apk --release
Adicione --split-per-abi para arquivos menores por arquitetura, que instalam mais rápido em aparelhos com recursos limitados. As saídas caem em build/app/outputs/flutter-apk/, como documentado no guia de implantação Android do Flutter.
Configuração da assinatura
Crie android/key.properties apontando para a sua keystore de release e ligue-a na configuração do Gradle. Sem isso, o Flutter assina com chaves de debug e a saída parece pronta enquanto carrega uma identidade descartável.
Como compilar um APK em React Native
APKs de Android do React Native são compilados pelo wrapper do Gradle no diretório android/ do projeto; configure a keystore de release primeiro, depois use a tarefa de release do projeto e siga o guia oficial de assinatura para a configuração do Gradle.
A tarefa Gradle
cd android && ./gradlew assembleRelease
O APK assinado aparece em android/app/build/outputs/apk/release/. Configure signingConfigs com a keystore de release primeiro, ou a tarefa emite um artefato sem assinatura que exige o apksigner depois.
Como extrair o APK de um app instalado
Exportar compila um APK novo a partir de um projeto-fonte, enquanto extrair copia o pacote que já está instalado em um aparelho; use um extrator ou adb shell pm path com adb pull para a segunda tarefa, seguindo o guia de extração de APK.
APK versus AAB para distribuição
O Android App Bundle é um formato de publicação que o Google Play processa em APKs específicos para cada aparelho, enquanto um APK independente pode ser instalado diretamente para teste ou distribuição; escolha o artefato com base no seu canal de destino e nos requisitos atuais da plataforma.
Qual produzir e quando
Lista no Play significa AAB, sempre. Sideload, entrega a testadores, arquivo e base de modding significam APK. Produzir o artefato errado desperdiça um ciclo de build e confunde quem recebe, então decida o canal antes de abrir qualquer assistente.
A comparação APK versus AAB cobre a mecânica dos bundles, o Play signing e os casos em que cada formato ganha.
Como assinar um APK compilado
O Android Studio pode assinar um APK quando o assistente de exportação ou a configuração do Gradle fornece uma keystore, enquanto o apksigner consegue assinar e verificar saídas de outros sistemas de build; confira o certificado antes de compartilhar e mantenha a chave disponível para futuras atualizações.
Geração de keystore, escolha de esquema e toda mensagem de erro estão no guia de assinatura. Assine e verifique num único movimento antes que qualquer arquivo saia da sua máquina.
Erros de build comuns
Keystores ausentes, configuração de assinatura inexistente, falhas do Gradle e classes removidas por reflexão podem afetar builds no Android Studio, Flutter ou React Native; examine a primeira mensagem de erro e identifique se foi a assinatura, a configuração de dependências ou o shrinking de release que falhou antes de repetir a tarefa de build.
Keystore não encontrada
Caminho errado, arquivo movido ou alias digitado com erro. Confirme no seu gerenciador de arquivos e com keytool -list, e depois guarde as keystores em uma pasta fixa para que os caminhos nunca mudem entre projetos.
Configuração de assinatura ausente
O Gradle compilou sem signingConfigs nem o arquivo de propriedades que ele referencia. Adicione a configuração, aponte-a para a keystore de release e compile de novo. Saídas sem assinatura causadas por isso parecem completas e não instalam em lugar nenhum.
Falha na build do Gradle
Resolução de dependências, licenças do SDK ou incompatibilidades de versão param antes de o empacotamento começar. Leia apenas o primeiro erro: o Gradle para na causa raiz, e tudo abaixo dela geralmente é consequência.
O R8 remove código necessário
O shrinking apaga uma classe que o app acessa por reflexão, produzindo travamentos em runtime nas builds de release que builds de debug nunca mostram. Adicione regras keep para as classes afetadas, compile de novo e teste novamente no hardware.
Conflitos de version code
Uma build de release com um version code igual ou menor que a cópia instalada instala como downgrade e falha em silêncio ou com erro, dependendo do aparelho. Aumente o versionCode em toda build distribuída e anote qual código foi para qual grupo de testadores.
Componentes de SDK ausentes
Uma máquina nova sem a revisão certa de build-tools falha antes de compilar qualquer coisa. Instale exatamente as versões de plataforma e build-tools que o projeto mira pelo SDK Manager e mantenha-as fixadas em todas as máquinas da equipe.
Checklist de exportação antes de compartilhar
Antes de compartilhar um APK de release, confirme a variante release, o certificado de assinatura esperado, o version code crescente, a instalação bem-sucedida em um aparelho de destino e o backup atual da keystore; essas verificações pegam erros de empacotamento antes que os destinatários dependam do arquivo para teste ou distribuição.
Cinco confirmações
- Variante release selecionada, não debug.
- O apksigner verify nomeia o seu certificado de produção.
- O version code supera toda build já distribuída.
- Instalada e aberta uma vez no hardware real.
- Backup da keystore confirmado como atual antes de enviar o arquivo.
Exporte builds de release, assine-as com uma keystore com backup e verifique antes de compartilhar. Quando o objetivo é estudar um app instalado em vez de compilá-lo, o guia de extração assume daqui.
Pontos principais
- Exporte apenas builds de release, assinadas com uma keystore de produção que você guarda em backup duas vezes.
- Flutter e React Native compilam APKs de release com um único comando assim que a assinatura está configurada.
- Verifique toda saída com o apksigner e teste em um aparelho real antes de distribuir.
Perguntas frequentes
Qual é a diferença entre um APK de debug e um de release?
Builds de debug usam uma chave gerada automaticamente e mantêm a depuração ativa, então servem apenas para teste e nunca devem ser distribuídas. Builds de release são reduzidas, assinadas com a sua keystore de produção e representam a identidade permanente do app. Distribua somente builds de release e mantenha a keystore com backup em dois lugares.
Como exporto um APK assinado do Android Studio?
Abra Build e depois Generate Signed Bundle or APK, escolha APK, selecione o módulo e aponte o assistente para a sua keystore de release. Escolha a variante release, ative o shrinking e compile. Verifique a saída com o apksigner antes de distribuir para qualquer aparelho ou testador.
O que é uma keystore?
Uma keystore é um arquivo criptografado que guarda a sua chave privada de assinatura e o certificado, protegidos por senhas que você define. O Android identifica o app por essa chave em todas as atualizações que ele receber. Perder o arquivo deixa o app órfão para sempre, forçando os usuários a reinstalar sob uma nova identidade.
Consigo extrair um APK sem root?
Sim. Aplicativos extratores e o ADB alcançam qualquer app que você instalou sem root nenhum, usando pm path para localizar o pacote e adb pull para copiá-lo. Root só importa para partições de sistema, que você deve deixar em paz. O procedimento completo está no nosso guia de extração.
Como compilo um APK em Flutter?
Execute flutter build apk --release na raiz do projeto, ou adicione --split-per-abi para arquivos menores por arquitetura. As saídas ficam em build/app/outputs/flutter-apk/. Configure android/key.properties com a sua keystore de release antes, ou a build será assinada com chaves de debug.
Qual é a diferença entre um APK e um AAB?
Um APK instala diretamente em qualquer aparelho, enquanto um AAB é um contêiner de publicação que só o Google Play transforma em APKs específicos para cada aparelho. Envie AABs para a loja e exporte APKs para distribuição direta, testes e sideload. Nosso guia APK versus AAB compara os dois caminhos.
Como assino um APK que eu compilei?
Assine o APK com o apksigner e a sua keystore de release e depois verifique o certificado antes de distribuir. O Android Studio pode assinar durante o assistente ou pelas signingConfigs do Gradle quando configuradas. Confirme também o build type e o version code, porque uma assinatura válida sozinha não deixa uma build de debug pronta para os usuários.
O que é o shrinking do R8?
O R8 é o redutor e ofuscador de código do Android: remove classes e métodos não usados e renomeia o que sobra. Builds de release o ativam para reduzir o tamanho e dificultar a engenharia reversa casual. Teste builds reduzidas em um aparelho real, porque um shrinking agressivo ocasionalmente remove código de que o app precisa.
Como verifico se um APK está assinado corretamente?
Execute apksigner verify --print-certs no arquivo e confirme que ele nomeia o seu certificado sem nenhum erro. Um verify aprovado significa que o pacote está íntegro e instalável. Um reprovado significa que a build, a chave ou a transferência do arquivo precisam de atenção antes de qualquer coisa ser enviada.
Consigo compilar um APK de graça?
Sim. O Android Studio, as SDK build tools, o Flutter e o React Native são todos gratuitos, e assinar com a sua própria keystore não custa nada. Os únicos custos reais são uma máquina que rode a IDE e a disciplina de fazer o backup da keystore duas vezes.