Sumário
Recompilar um APK significa reconstruir uma pasta de decode editada de volta para um pacote instalável, geralmente com apktool b, seguido da assinatura com a sua própria chave. Decodifique com o APKTool, mude um arquivo, reconstrua, corrija qualquer erro que ele apontar, assine e depois instale em um aparelho de teste. Recompile apenas cópias de apps que lhe pertencem e mantenha cada resultado privado.
Parte do hub de modding: Como Modificar um APK · Leia primeiro: Descompilar um APK · Assine em seguida: Assinar um APK.
Por Abdul Emam, testador de APK no ApkZena. Meu primeiro rebuild falhou por uma única string apagada: o manifesto ainda a referenciava, o aapt nomeou a entrada exata que faltava e restaurar uma linha consertou o build. A mensagem de erro é o depurador. Leia-a primeiro.
Este guia cobre o que significa recompilar, as verificações antes de construir, os caminhos do APKTool e do Android Studio, as quatro famílias de erros, a assinatura, a instalação e os pacotes que resistem ao rebuild. Cada correção nomeia a mensagem exata a ser procurada.
O Que Significa Recompilar um APK?
Recompilar monta Smali, recursos e arquivos de manifesto editados em um APK reconstruído, invertindo o passo de decode sem restaurar a assinatura do desenvolvedor; assine o resultado separadamente e leve em conta a divergência de assinatura antes de instalar por cima de um app já existente no seu aparelho.
Quando Você Precisa Disso
Depois de qualquer ciclo de decode e edição: Smali alterado, recursos modificados ou manifesto mudado todos terminam aqui. Ler com o JADX nunca precisa desse passo, já que o JADX não produz saída compilável. Se você editou arquivos, você recompila; se apenas leu, você para.
Antes de Recompilar
Antes de construir, confirme que a pasta decodificada está completa, que toda edição foi salva e que você sabe quais arquivos mudaram; essas verificações pegam recursos ausentes e edições velhas cedo, enquanto um diff contra um decode intocado ajuda a isolar problemas antes da compilação.
Confira a Estrutura da Pasta
Confirme que smali/, res/, AndroidManifest.xml e apktool.yml estão todos presentes a partir do fluxo de descompilação. Uma pasta sem apktool.yml reconstrói com as configurações de empacotamento erradas, e uma pasta sem res/ falha na primeira referência de recurso.
Salve Toda Edição
Feche ou salve cada arquivo editado no seu editor antes de rodar o build. Uma mudança de Smali não salva simplesmente não existe para o compilador, e a confusão resultante, em que o build ignora a sua correção, gasta mais tempo do que leva para salvar.
Saiba Qual Foi a Última Mudança
Anote o que você mudou desde o último build bem-sucedido. Quando o compilador nomear um arquivo, você saberá imediatamente se é seu ou dano pré-existente, o que decide entre corrigir e começar de novo.
Como Recompilar Com o APKTool
Execute o comando de build do APKTool contra o projeto decodificado, leia a saída e trate o arquivo ou recurso relatado; repita após cada correção para isolar falhas em vez de mudar várias partes do projeto de uma vez durante um build. A referência de CLI do APKTool documenta as opções de build.
Passo 1: Rode apktool b
apktool b app-decode
O comando lê o apktool.yml para as regras de empacotamento e monta o Smali de volta em DEX. A referência completa de flags está no guia do APKTool, incluindo caminhos de saída e opções de sobrescrita.
Passo 2: Encontre a Saída
Um build limpo grava app-decode/dist/app.apk. Se dist/ estiver vazio ou ausente, o build falhou mesmo que as últimas linhas pareçam inofensivas, então trate um arquivo ausente como o sinal de erro e role a tela para cima até a causa nomeada.
Passo 3: Leia os Erros de Build
O APKTool relata a primeira falha e para, nomeando o arquivo e muitas vezes a linha. Corrija esse único problema e reconstrua: erros posteriores podem ser consequências do primeiro, e corrigi-los fora de ordem multiplica o trabalho.
Passo 4: Confirme um Build Limpo
Reconstrua até que o arquivo de saída apareça com um horário novo e nenhuma linha de erro acima dele. Só então passe para a assinatura. Um build com avisos mas sem erros é aceitável; um build com erros nunca é instalável.
Como Recompilar Com o Android Studio
O Android Studio constrói a partir de projetos-fonte, não de pastas de APK decodificadas, então use esse caminho quando você tiver o projeto Gradle original ou uma reconstrução compilável; configure a assinatura de release antes de produzir um artefato instalável para testes ou distribuição no aparelho de destino.
Monte o Build de Release
./gradlew assembleRelease
A saída fica em app/build/outputs/apk/release/. Configure signingConfigs com o seu keystore primeiro, ou a tarefa produz um artefato sem assinatura que ainda precisa do apksigner depois.
Quando Esse Caminho Serve
Você mantém o app, você reconstruiu um projeto compilável, ou a saída decodificada foi importada como ponto de partida. Para modding puro de APK a partir de um pacote da loja, o APKTool permanece o caminho direto e esse percurso raramente se aplica.
Como Corrigir Erros Comuns de Recompilação
Recursos ausentes, erros de sintaxe Smali, problemas de manifesto e IDs de recurso em conflito são causas comuns de builds com falha; combine a mensagem do compilador com o arquivo nomeado, corrija esse problema e rode o build novamente a partir da pasta do projeto decodificado no seu computador.
Recursos Ausentes
O erro do aapt nomeia o drawable, a string ou o layout ausente. Restaure-o da sua pasta de decode original, ou apague a referência que aponta para ele caso a remoção tenha sido intencional. Mantenha uma cópia original justamente para que essa restauração leve segundos.
Erros de Sintaxe Smali
Uma instrução escrita erradamente, um nome de registrador inválido ou diretivas desequilibradas interrompem o montador na linha nomeada. Abra o arquivo, compare com a versão original e corrija a linha exata. Nunca reescreva o código ao redor enquanto corrige sintaxe.
Erros de Manifesto
Tags sem fechamento, atributos duplicados ou uma activity renomeada que não existe mais fazem o build falhar ou o app travar na inicialização. Valide a estrutura XML primeiro e depois confira se cada componente referenciado ainda existe no pacote.
Recursos em Conflito
Duas entradas disputando um mesmo ID, geralmente depois de mesclar arquivos de builds diferentes ou duplicar um bloco de valores. Remova a duplicata e mantenha a original, depois reconstrua a partir de um decode novo se o conflito veio de uma edição que você não consegue rastrear.
O Hábito do Decode Original
Mantenha uma pasta de decode intocada ao lado de cada uma de trabalho. Quando um erro nomear um arquivo que você mal lembra de ter editado, faça o diff das duas pastas e a resposta aparece em segundos. Esse hábito se paga na primeira vez que um build falha na sexta-feira à noite.
Checklist de Recompilação Antes de Assinar
Depois de um build limpo, confira o caminho de saída, o horário, o tamanho do arquivo, os arquivos alterados e a chave de assinatura antes de instalar; essas verificações pegam saídas incompletas ou não intencionais enquanto a pasta de decode original continua disponível para comparação com o APK reconstruído salvo em disco.
Cinco Confirmações Rápidas
- O arquivo de saída existe em
dist/com horário novo. - Nenhuma linha de erro aparece acima da mensagem de sucesso.
- O tamanho do arquivo fica perto do pacote original, não perto de zero.
- Somente os arquivos que você pretendia mudar diferem do decode original.
- Seu keystore é o mesmo da última vez, pronto para assinar.
Como Assinar o APK Recompilado
A saída do APKTool precisa de um passo de assinatura separado antes de o Android poder instalá-la; use apksigner com um keystore sob o seu controle, verifique o certificado e mantenha a mesma chave quando quiser que builds de teste futuros se atualizem entre si no aparelho.
A configuração completa do keystore, a escolha do scheme e o catálogo de erros estão na guia de assinatura. Assine e verifique de uma vez só, para que uma assinatura silenciosamente pulada apareça imediatamente.
Como Instalar o APK Recompilado
Se o seu pacote reconstruído carrega uma assinatura diferente do app instalado, o Android o rejeita como atualização; faça backup dos dados locais antes de desinstalar, instale a saída assinada e teste a mudança pretendida antes de depender do app no dia a dia.
Nosso guia de instalação cobre os avisos de fontes desconhecidas e os erros mais prováveis nesse passo. Confirme a sincronização com a nuvem antes de desinstalar qualquer coisa que guarde progresso do qual você cuida.
Por Que Alguns APKs Não Podem Ser Recompilados
Alguns APKs resistem a um rebuild útil por causa de verificações anti-tampering, recursos criptografados ou dependências de código nativo; identifique essas restrições durante a inspeção, já que um decode bem-sucedido por si só não significa que um pacote editado vai rodar como esperado no aparelho original.
Proteção Anti-Tampering
Verificações de assinatura na inicialização e verificação de integridade detectam o seu novo certificado e recusam a rodar. Derrotar essas verificações é um projeto separado e mais profundo, e para a maioria dos aprendizes a resposta correta é estudar o app e deixá-lo sem modificações.
Recursos Criptografados
Assets que decodificam como texto cifrado precisam de chaves que vivem em código ou em bibliotecas nativas. Sem elas o rebuild carrega conteúdo quebrado, e com elas você começou uma missão lateral de criptoanálise. Trate regiões criptografadas como fronteiras, não como alvos.
Dependências de Código Nativo
Recursos implementados em arquivos lib/*.so reconstruem byte-idênticos, já que você não pode editá-los, o que é bom até que a sua mudança de Smali discorde do que o lado nativo espera. Interfaces incompatíveis travam na fronteira com erros que não nomeiam nenhum dos lados com clareza.
Comece com um decode limpo usando o guia de descompilação, mude um arquivo e reconstrua antes de tocar em qualquer outra coisa. Quando o build voltar limpo, o guia de assinatura termina o trabalho.
Pontos principais
- Recompilar transforma uma pasta de decode editada de volta em um APK instalável com apktool b.
- Corrija exatamente o arquivo que cada erro de build aponta, uma edição por ciclo, e nunca assine um build com falha.
- Assine todo rebuild, desinstale o original e teste offline em um aparelho secundário.
Perguntas frequentes
Como eu recompilo um APK?
Rode apktool b contra a pasta que o APKTool decodificou e depois encontre o pacote reconstruído em dist/ dentro dessa pasta. Corrija qualquer erro de build que ele relatar antes de assinar, porque um build sem assinatura ou quebrado nunca instala. Assine a saída limpa e teste em um aparelho secundário.
O que o apktool b faz?
Ele reconstrói uma pasta decodificada de volta para um APK instalável, lendo as instruções de empacotamento do apktool.yml. O comando recebe o nome da pasta como argumento e grava o resultado em dist/. Uma execução bem-sucedida imprime o caminho da saída; uma com falha nomeia o arquivo que quebrou.
Por que a recompilação falha?
A maioria das falhas são deslices de sintaxe Smali, recursos ausentes que sua edição apagou, manifesto XML que não analisa mais ou dois valores disputando um mesmo ID de recurso. O erro nomeia o arquivo e a linha ofensores, então corrija exatamente isso, reconstrua de novo e mude uma coisa por ciclo.
Como corrijo recursos ausentes depois de editar?
Compare sua pasta editada com o decode original e restaure a entrada apagada, ou remova a referência que aponta para ela. Drawables, strings e arquivos de layout ausentes produzem cada um um erro de aapt distinto nomeando o arquivo ausente. Nunca crie um substituto à mão enquanto o original ainda existe.
Preciso assinar depois de recompilar?
Sim. O APKTool deixa a saída reconstruída sem assinatura, então assine-a com apksigner e um keystore antes da instalação. Verifique o certificado e depois confira se o app instalado usa uma chave diferente; se usar, o Android rejeita a atualização e você pode precisar desinstalar primeiro.
Posso recompilar qualquer APK?
Quase qualquer pacote decodifica e reconstrói, mas verificações anti-tampering, recursos criptografados e dependências de código nativo podem fazer o resultado travar ou recusar a rodar. Jogos online acrescentam validação do lado do servidor. Trate o sucesso do rebuild como o passo um e um teste aprovado no aparelho como o veredito real.
O que é Smali na recompilação?
Smali é a forma em nível de montagem do bytecode Dalvik que o APKTool produz quando decodifica classes.dex. Você edita como texto e o apktool b o monta de volta em um arquivo DEX durante o rebuild. Mantenha as contagens de registradores intactas ou o método reconstruído trava.
Como testo um APK recompilado?
Assine-o, desinstale o original, instale seu build em um aparelho secundário e abra-o primeiro offline. Verifique exatamente o comportamento que você mudou, reinicie o app e confirme que a edição persiste. Se travar na inicialização, sua mudança está no código de inicialização e precisa ser revertida.