Sumário
O APKTool decodifica recursos e Smali de um APK em uma pasta de projeto e consegue reconstruir esse projeto; o pacote reconstruído precisa de assinatura antes da instalação. A documentação oficial do APKTool descreve os comandos atuais e a configuração para as plataformas desktop suportadas.
Parte do hub de modding: Como modificar um APK · Alternativa para o telefone: guia do MT Manager · Arquivo-fonte: Extrair um APK.
Tudo abaixo é um único fluxo: instalar, decodificar, entender a estrutura da pasta, editar, reconstruir, assinar e corrigir os quatro erros que causam a maioria das builds que falham. Onde as ferramentas de telefone são mais rápidas, este guia diz isso e aponta para elas.
O que é o APKTool?
O APKTool decodifica um APK em uma pasta de arquivos Smali, tabelas de recursos, um manifest decodificado e apktool.yml, e depois reconstrói essa pasta em um pacote pronto para assinatura; é uma rota de linha de comando para inspecionar ou editar recursos e código de Android em um computador.
APKTool versus MT Manager
O MT Manager vence para uma edição pontual no telefone, sem configuração, sem cabo. O APKTool vence quando você precisa buscar em muitos arquivos, manter uma cópia original sob controle de versão, lidar com frameworks de sistema ou criar scripts da mesma mudança em várias builds. Use os dois: MT Manager para explorar, APKTool para trabalhar.
Como instalar o APKTool
Instalar o APKTool geralmente significa obter o seu jar e configurar o Java, com a configuração variando entre Windows, macOS e Linux; siga os passos do seu sistema operacional e verifique que o comando funciona antes de abrir um APK de uma fonte confiável no seu computador.
Windows
Instale um runtime Java 11 ou mais recente, baixe o apktool.jar na página oficial de releases no GitHub e coloque um wrapper .bat ao lado dele contendo java -jar apktool.jar %*. Renomeie o wrapper para apktool.bat e coloque os dois no seu PATH.
Mac e Linux
Instale o Java pelo seu gerenciador de pacotes, baixe o jar e crie um script wrapper chamado apktool com java -jar /path/to/apktool.jar "$@", e depois dê chmod +x nele. Coloque-o em algum lugar do seu PATH e confirme com apktool --version.
Requisito do Java
Java 11 ou mais recente. Confira com java -version antes de qualquer outra coisa: um runtime ausente ou antigo é a falha de instalação mais comum de todas, e ela aparece como um confuso erro de versão de classe em vez de uma mensagem clara.
Comandos básicos do APKTool
Quatro comandos cobrem as tarefas comuns do APKTool: decodificar um pacote, construir um projeto, instalar recursos de framework e limpar arquivos de framework; entender o que cada comando altera ajuda você a escolher o passo certo quando uma build ou um decode falha durante um projeto no seu computador.
apktool d (Decode)
apktool d app.apk -o app-folder decodifica em uma pasta com nome. Adicione -s para manter o classes.dex original sem decodificação quando você só precisa dos recursos, o que é muito mais rápido em aplicativos grandes.
apktool b (Build)
apktool b app-folder reconstrói e grava app-folder/dist/app.apk. A build lê o apktool.yml pelas configurações de empacotamento, então o resultado se comporta como o arquivo compactado original em vez de um rezip genérico.
apktool if (Install Framework)
apktool if framework.apk instala um arquivo de framework, necessário antes de decodificar aplicativos de sistema que referenciam frameworks de fornecedor. Sem ele, decodificar um pacote de sistema falha imediatamente com um erro de framework ausente.
apktool empty-framework-dir
Limpa os arquivos de framework em cache quando um decode começa a falhar depois de uma atualização do APKTool. Rode uma vez quando os erros mencionarem IDs de framework que você nunca instalou.
Referência rápida de comandos
O conjunto completo que você realmente vai digitar, agrupado por fase:
# decode
apktool d app.apk -o work # decode into ./work
apktool d app.apk -s -o res-only # resources only, faster
apktool if framework.apk # install a framework first
# build
apktool b work # build to work/dist/
apktool b work -o out/app.apk # build to a chosen path
# maintenance
apktool empty-framework-dir # clear stale frameworks
apktool --version # confirm what is installed
Mantenha este bloco no histórico do seu shell ou em um arquivo de anotações. Quase toda sessão com a ferramenta usa três destas sete linhas.
Como descompilar com o APKTool
Rode apktool d app.apk para criar uma pasta de projeto com Smali, recursos, um manifest decodificado e apktool.yml; inspecione essa saída primeiro para entender o layout do pacote e localizar os arquivos relevantes para a mudança planejada antes de editar qualquer coisa.
Flags úteis de decode
-o name dá o nome à pasta de saída, -s mantém o classes.dex como está quando você só precisa dos recursos e -f sobrescreve uma pasta existente sem perguntar. Decodes só de recursos com -s terminam várias vezes mais rápido em pacotes grandes, o que importa quando você está iterando.
Estrutura de pastas
smali/ guarda o código descompilado, uma pasta por DEX quando o pacote é multidex. res/ guarda os recursos decodificados, AndroidManifest.xml fica no nível superior e apktool.yml registra os metadados de empacotamento. original/ mantém as peças intocadas do arquivo.
Leia o manifest
Permissões, activities, services e versões de SDK estão todos em XML puro aqui. É o caminho mais rápido para entender o que um aplicativo faz antes de decidir se vale a pena tocá-lo.
Leia o Smali
Smali é a forma legível de assembly do bytecode Dalvik. Os corpos dos métodos aparecem como listas de instruções, as constantes de string aparecem como linhas const-string e as condições aparecem como saltos condicionais. Busque primeiro por strings visíveis: elas o ancoram no método certo rapidamente.
Uma sessão de decode de referência
apktool d app.apk -o app-decode
cd app-decode
grep -rn "Remove Ads" res/values/strings.xml
grep -rn "isPremium" smali*/ | head -20
Dois greps respondem às duas perguntas que abrem um decode: onde o texto visível mora e onde a flag por trás dele é verificada. Em um jogo de 60 MB, essa inspeção inteira leva menos de um minuto assim que o decode termina.
Como editar com o APKTool
Faça uma mudança por ciclo de build para que uma falha possa ser rastreada até uma edição específica; os arquivos Smali são texto e os recursos são XML ou imagens decodificados, mas cada formato tem restrições que o processo de rebuild verifica antes de gerar um APK.
Edite o AndroidManifest.xml
Mude permissões, a activity de inicialização ou o rótulo do aplicativo direto no XML. Mantenha o arquivo bem formado: uma tag perdida falha em tempo de build com um erro que nomeia a linha, o que é mais barato de capturar do que um travamento em execução.
Edite código Smali
Mude uma comparação, inverta um valor de retorno ou pule um branch. Mantenha as contagens de registradores intactas: adicionar um registrador a um método significa corrigir todas as instruções dele, que é exatamente o tipo de mudança que parece certa e trava na prática.
Duas edições quase sempre são seguras: mudar um valor imediato const/4 e trocar um salto condicional pelo oposto. Ambas mantêm a forma de registradores do método intocada.
Edite recursos
res/values/strings.xml guarda as strings decodificadas e res/values/ guarda números e cores. Esta é a categoria de edição mais segura: valores errados parecem errados e raramente travam o aplicativo.
Mantenha o decode original
Copie a pasta de decode antes da sua primeira edição. Quando uma rebuild trava, diff -r pristine edited imprime exatamente o que mudou, e esse diff é mais rápido de revisar do que a sua memória do que você tocou vinte minutos atrás.
Como recompilar com o APKTool
apktool b app-folder reconstrói o projeto decodificado em um APK, e a saída do console identifica se a operação teve sucesso ou parou em um erro de recurso ou de Smali; leia a primeira falha relatada antes de mudar arquivos ou rodar o passo de assinatura.
Flags úteis de build
-o path grava a saída em um local específico e -f sobrescreve sem perguntar. Falhas de build imprimem apenas o primeiro arquivo ofensor, então corrija, reconstrua e repita em vez de tentar raciocinar sobre uma lista que para no erro um.
Erros comuns de build
Um erro de sintaxe do Smali nomeia o arquivo e a linha. Um conflito de recurso nomeia a entrada duplicada. Um arquivo ausente significa que a sua edição apagou algo que o manifest ainda referencia. Corrija o arquivo nomeado, reconstrua e nunca assine uma build que falhou.
O guia de recompilação detalha cada erro com as mensagens exatas para casar.
Como assinar a saída do APKTool
O APKTool reconstrói o arquivo compactado, mas não aplica uma chave de assinatura; use o apksigner das build tools do Android em seguida e depois verifique a assinatura resultante antes de tentar instalar em um dispositivo que você controle para testar o pacote e as mudanças dele com segurança, offline.
Um hábito que vale a pena criar: assinar e verificar na mesma hora. O apksigner verify logo após assinar pega um keystore que silenciosamente não se aplicou, o que de outra forma aparece como uma falha de instalação dois passos depois, com uma mensagem menos útil.
Usando o APKTool com frameworks
Alguns APKs de sistema referenciam recursos de framework compartilhados que não estão contidos no pacote; instale o framework correspondente com apktool if framework-res.apk antes de decodificar ou reconstruir e use arquivos da mesma build do Android sempre que possível para evitar divergências de recurso.
Os arquivos de framework se acumulam entre projetos e ocasionalmente ficam obsoletos após uma atualização do APKTool. apktool empty-framework-dir os limpa, e é a primeira coisa a tentar quando os erros de decode começam a mencionar IDs de framework que você nunca instalou de propósito.
Um round trip completo
Esta sequência de comandos cobre extração, decode, edição, rebuild, assinatura, verificação e instalação, nessa ordem; comece a partir de um APK copiado e mantenha o projeto original intocado para que você possa comparar ou restaurá-lo se uma edição falhar em qualquer etapa do fluxo.
adb shell pm path com.example.app
adb pull /data/app/.../base.apk original.apk
apktool d original.apk -o work
# ...edit one file inside work/...
apktool b work
apksigner sign --ks my.keystore work/dist/original.apk
apksigner verify --print-certs work/dist/original.apk
adb uninstall com.example.app
adb install work/dist/original.apk
Tempos em um aplicativo de porte médio: o decode leva de 20 a 60 segundos, a edição leva o tempo que a busca levar, e a rebuild roda em cerca de 10. O passo de instalação é onde o aplicativo original desaparece, e é por isso que todos os passos anteriores rodam contra cópias.
Erros comuns do APKTool
Falhas de decode, referências de framework ausentes, conflitos de recurso e erros de sintaxe do Smali são problemas comuns do APKTool; o arquivo ou caminho relatado costuma identificar a etapa que falhou, então inspecione esse detalhe antes de mudar o seu comando ou os arquivos do projeto no disco para uma nova tentativa.
Java não encontrado ou versão errada
O wrapper não alcança um runtime Java 11+. Instale um, confirme com java -version e mantenha a chamada java do wrapper apontando para a instalação certa se você tiver várias.
Framework ausente
Decodificar um pacote de sistema sem o framework instalado. Rode apktool if framework.apk, ou deixe o APKTool buscar o framework de um dispositivo conectado, e depois decodifique de novo.
Build falha no Smali
Erro de sintaxe em um arquivo editado. O erro nomeia o arquivo e a linha: abra-o, compare com o seu decode original e corrija a instrução que você mudou. Binários não decodificados que passaram pelo seu editor intactos são a outra causa comum.
Conflitos de ID de recurso
Dois valores reivindicam o mesmo ID, geralmente depois de mesclar arquivos de recursos de builds diferentes. Remova o duplicado, ou reconstrua a partir de um decode novo e reaplique as suas edições uma de cada vez.
APKTool versus outras ferramentas
APKTool, JADX, MT Manager e APK Editor diferem em plataforma, legibilidade do código, suporte a rebuild e automação; compare as capacidades abaixo com o trabalho que você precisa fazer, já que cada ferramenta tem um papel diferente em um fluxo de APK, da inspeção à rebuild.
| Tarefa | APKTool | MT Manager | APK Editor | JADX |
|---|---|---|---|---|
| Plataforma | Computador | Telefone | Telefone | Computador |
| Decode para código legível | Smali | Smali | Não | Java |
| Capacidade de rebuild | Sim | Sim | Sim | Não |
| Assinar a saída | Não | Sim | Sim | Não |
| Scripts e controle de versão | Sim | Não | Não | Não |
| Melhor para | Projetos profundos | Edições rápidas no telefone | Formulários de recurso | Ler código |
O APKTool se combina naturalmente com o JADX, coberto no guia de decompilação, para leitura, e com o MT Manager para verificações rápidas no dispositivo.
Escolhendo entre eles na prática
Comece de onde você está: no telefone, com um único valor para mudar, o MT Manager termina primeiro. No computador, com uma mudança de manifest ou de string, os formulários do APK Editor são mais rápidos que o Smali. Quando a mudança atravessa arquivos, precisa de um diff ou tem de se repetir em várias builds, o APKTool é o único dos três que escala.
Como o APKTool se encaixa no fluxo amplo
O APKTool cuida das etapas de decode e rebuild entre obter um APK e instalá-lo; a extração fornece o arquivo, a assinatura prepara o pacote reconstruído e a instalação o coloca em um dispositivo, então siga os guias ligados nessa sequência quando precisar.
Puxe o arquivo-fonte com o guia de extração, decodifique-o com os comandos acima e depois entregue a saída reconstruída ao passo de assinatura quando a build voltar limpa.
Decodifique o seu primeiro pacote com apktool d, abra o manifest e leia-o antes de mudar qualquer coisa. Quando estiver pronto para reconstruir, os guias de recompilação e assinatura continuam exatamente de onde este para.
Pontos principais
- apktool d decodifica, apktool b reconstrói, apksigner assina. O APKTool nunca assina.
- Mantenha a pasta de decode original; o diff contra ela é como você depura travamentos.
- Aplicativos de sistema precisam que os arquivos de framework sejam instalados antes com apktool if.
Perguntas frequentes
O que é o APKTool?
O APKTool é uma ferramenta de linha de comando que decodifica um APK em arquivos Smali e recursos, permite editá-los e reconstrói um pacote funcional. É o padrão para edições profundas, frameworks de aplicativos de sistema e builds repetíveis no Windows, Mac e Linux.
Como instalo o APKTool?
Baixe o jar na página oficial de releases no GitHub, coloque-o no seu PATH como apktool.jar e instale um runtime Java 11 ou mais recente. No Windows, envolva-o em um pequeno arquivo .bat; no Mac e no Linux, torne o wrapper executável.
Como descompilo com o APKTool?
Rode apktool d app.apk para decodificar em uma pasta com Smali, resources, AndroidManifest.xml e apktool.yml. Edite os arquivos nessa pasta e depois reconstrua com apktool b apontando para o mesmo nome de pasta. Mantenha o decode original intacto de lado para comparação.
Como recompilo com o APKTool?
Rode apktool b app-folder e o pacote reconstruído cai em app-folder/dist/. Os erros nomeiam o arquivo que falhou: corrija o Smali ou o recurso indicado, reconstrua de novo e não siga para a assinatura até que a build esteja limpa.
Como assino com o APKTool?
O APKTool não assina a própria saída. Use o apksigner com o seu keystore, por exemplo apksigner sign --ks my.keystore app.apk, e depois rode apksigner verify antes da instalação. Mantenha a chave com backup e não distribua builds de teste sem confirmar a assinatura delas.
O que é o apktool.yml?
O apktool.yml guarda os metadados do decode: a versão do APK, as configurações de compactação, o SDK mínimo e as referências de framework. É o que permite ao apktool b reconstruir o comportamento de empacotamento original, então não o apague nem o edite manualmente sem cuidado. Trate-o como somente leitura.
Por que o APKTool falha?
A maioria das falhas é framework ausente para aplicativos de sistema, erros de sintaxe em Smali editado ou conflitos de recurso. O erro nomeia o arquivo: frameworks precisam de apktool if, Smali precisa de correção, recursos precisam que o conflito seja removido. Corrija uma coisa por ciclo.
O APKTool precisa de root?
Não. Ele opera em arquivos no seu computador, e o APK que você alimenta pode ser puxado de um telefone via ADB sem root. Root é irrelevante para o próprio ciclo decode-edit-rebuild. Uma conta de usuário normal basta do começo ao fim.
O APKTool é legal?
As regras para decodificar um pacote variam por jurisdição, propósito e licença, incluindo algumas exceções de pesquisa ou interoperabilidade. Quebrar aplicativos pagos, distribuir pacotes reconstruídos ou alterar clientes de serviço ativo podem levantar questões de direito autoral, contrato ou conta. Confira a lei local e os termos do aplicativo.
Qual é a diferença entre APKTool e MT Manager?
O APKTool roda no computador, decodifica projetos completos e suporta scripts e controle de versão. O MT Manager roda no telefone e serve para edições pontuais. Escolha o APKTool para trabalho repetível no desktop e o MT Manager para tarefas no dispositivo; ambos podem ser úteis em um mesmo fluxo.
O APKTool modifica jogos?
Ele pode mudar qualquer coisa no arquivo, incluindo código de jogabilidade em Smali, mas jogos online validam no servidor e banem clientes modificados. Para títulos offline funciona bem, desde que a mudança sobreviva a uma rebuild e a um teste em dispositivo real. Teste primeiro no offline.
Como atualizo o APKTool?
Baixe o jar na página oficial de releases no GitHub, substitua a versão antiga e limpe os arquivos de framework obsoletos com apktool empty-framework-dir se o decode falhar depois de uma atualização. Confirme a versão instalada com apktool --version antes de abrir o seu projeto.