Existe uma maneira de obter o código fonte de um arquivo APK?

O disco rígido do meu portátil avariou-se e perdi o código fonte de uma aplicação em que tenho trabalhado nos últimos dois meses. Tudo o que eu tenho é o arquivo APK que é armazenado no meu e-mail de quando eu enviei para um amigo.

Há alguma forma de extrair o meu código-fonte deste ficheiro APK?

Author: Jeroen Vannevel, 2010-08-29

16 answers

Modo Simples: usar a ferramenta 'online' http://www.javadecompilers.com/apk faz o upload do apk e obtém o código-fonte.


Procedimento de descodificação .ficheiros apk, método passo a Passo:

Passo 1:

  1. Faça uma nova pasta e copie sobre o .ficheiro apk que quer descodificar.

  2. Agora muda o nome da extensão disto .ficheiro apk para .zip (por exemplo, mudar o nome do ficheiro.apk para o nome do ficheiro.e poupa-me. Agora podes aceder às aulas.ficheiros dex, etc. Neste estágio você é capaz de ver drawables, mas não arquivos xml e java, por isso continue.

Passo 2:

  1. Agora extrai isto .ficheiro zip na mesma pasta (ou pasta nova).

  2. Transferir o dex2jar e extraí - lo para a mesma pasta (ou nova pasta).

  3. Muda as aulas.ficheiro dex na pasta dex2jar.

  4. Agora abra a linha de comandos e mude a pasta para essa pasta (ou nova pasta). Em seguida, escreva {[[0]} (Para mac terminal ou ubuntu write ./d2j-dex2jar.sh classes.dex) e carregue em enter. Agora tens as aulas.dex.ficheiro dex2jar na mesma pasta.

  5. Baixe java descompiler, faça duplo-click sobre JD-gui, clique em open file e em open classes.dex.ficheiro do dex2jar dessa pasta: agora você obtém os ficheiros da classe.

  6. Gravar todos estes ficheiros de classe (em Jd-gui, carregue em Ficheiro - > Gravar todas as fontes) pelo nome src. Nesta fase você tem a fonte java, mas a .os ficheiros xml continuam inacessíveis, por isso continuar.

Passo 3:

Agora abra outra nova pasta

  1. Põe lá .ficheiro apk que deseja descodificar

  2. Obtenha a versão mais recente de apktool e apktool install window (ambos podem ser transferidos da mesma ligação) e coloque-os na mesma pasta

  3. Abrir uma janela de comandos

  4. Agora execute um comando como apktool if framework-res.apk e o seguinte

  5. apktool d myApp.apk (onde está o myApp?apk denota o nome do ficheiro que deseja descodificar)

Agora você tem uma pasta de arquivo nessa pasta e pode facilmente ler os arquivos xml do apk.

Passo 4:

Não é qualquer passo apenas copiar o conteúdo de ambas as pastas (neste caso, ambas novas pastas)para a única

E desfrutem do código fonte...
 1408
Author: Prankul Garg, 2017-06-14 12:11:15
Esta é uma descrição alternativa, para o caso de alguém ficar com a descrição acima. Siga os passos:
  1. download apktool.bat (ou apktool para Linux) e apktool_<version>.jar a partir de http://ibotpeaches.github.io/Apktool/install/
  2. mudar o nome do ficheiro jar de cima para apktool.jar e colocar ambos os ficheiros na mesma pasta

  3. abra uma caixa dos (cmd.exe) e mude para essa pasta; verifique se um ambiente Java é instalado (para o Linux, verifique também as notas relativas às bibliotecas necessárias)
  4. começar: apktool decode [apk file]

    resultado intermédio : ficheiros de recursos, AndroidManifest.xml

  5. abrir um ficheiro APK com um unpacker à sua escolha

    resultado intermédio: classes.dex

  6. descarregar e extrair dex2jar-0.0.9.15.zip de http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. arrastar e largar classes.dex em dex2jar.bat (ou inserir <path_to>\dex2jar.bat classes.dex numa caixa DOS DOS; para utilização no Linux dex2jar.sh)

    resultado intermédio: classes_dex2jar.jar

  8. desempacote classes_dex2jar.jar (pode ser opcional dependendo do descompilador usado) {[[28]}
  9. descompile os ficheiros da sua classe (por exemplo, com JD-GUI ou DJ Decompiler)

    resultado : código-fonte

Nota: não é permitido descompilar pacotes de terceiros; este guia destina-se a recuperar o código fonte pessoal apenas de um ficheiro APK; finalmente, o código resultante será provavelmente ofuscado

 108
Author: Trinimon, 2016-10-12 00:47:17
Embora possa ser capaz de descompilar o seu ficheiro {[[0]}, provavelmente irá ter um grande problema: Não vai devolver o código que escreveste. Em vez disso, ele vai retornar qualquer que seja o compilador inlined, com variáveis dadas nomes aleatórios, bem como funções dadas nomes aleatórios. Poderia levar muito mais tempo para tentar descompilar e restaurá-lo no código que você tinha, do que será para começar de novo. Infelizmente, estas coisas mataram muitos projectos.
Pela futuro, eu recomendo muito aprender um sistema de controle de Versão, como CVS, SVN e git etc.

E como fazer marcha-atrás.

 99
Author: Ryan Gooler, 2016-06-14 11:59:05

Existe também uma nova aplicação na Play Store com a qual é possível descompilar um apk (aplicações do sistema também) e ver o código fonte bem no seu smartphone. Ele guarda os arquivos para o seu cartão SD para que você possa vê-lo no seu computador também. Não requer raiz ou outra coisa.

Apenas instale e divirta-se. Acho que esta é a maneira mais fácil de descompilar uma aplicação.
 47
Author: Cilenco, 2014-01-11 12:49:24

Apktool é a melhor coisa que se pode tentar. Eu guardei algum xml com ele, mas honestamente eu não sei como ele vai funcionar com o.código java.

Eu recomendaria que você tivesse um repositório de código mesmo que você seja o único codificador. Tenho usadoo cacifo do projecto para os meus próprios projectos. Dá-te respostas GRÁTIS da svn e do git.

 24
Author: Macarse, 2016-08-05 07:04:47

Estes dois artigos descrevem como combinar o uso de apktool e dex2jar para pegar num ficheiro APK e criar um projecto Eclipse que o possa construir e executar.

Http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html

Http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

Basicamente tu:

  1. Use apktool para obter os ficheiros de recursos do apk
  2. utilizar dex2jar para obter um ficheiro jar que contém as classes num formato que o Eclipse irá gostar.
  3. crie um projecto Eclipse aponte-o para os ficheiros de recursos e para o novo ficheiro jar
  4. abra o ficheiro jar com um utilitário zip e remova os recursos existentes
  5. abra o ficheiro jar com JDGui para ver o código-fonte
  6. Pegue no código-fonte que precisar de JDGui, Coloque-o numa classe dentro do Eclipse e modifique-o
  7. apague essa classe do ficheiro jar (para que não tenha a mesma classe definida várias vezes)
  8. Investiga.
 20
Author: Tom Hennen, 2016-06-14 13:00:25
O Apktool vai funcionar. Você nem precisa saber o teclado para extrair o código fonte (o que é um pouco assustador). A principal desvantagem é que a fonte é apresentada no formato Smali em vez de Java. Outros arquivos, como o ícone e principal.xml vêm através perfeitamente bem embora e pode valer a pena o seu tempo para, pelo menos, recuperá-los. Em última análise, você provavelmente precisará reescrever seu código Java do zero.

Pode encontrar o apktool aqui . Basta transferir o apktool e o auxiliar apropriado (para Windows, Linux ou Mac OS). Eu recomendo usar uma ferramenta como 7-zip para desempacotar.

 16
Author: Ryan Berger, 2010-08-29 04:02:46

Há algumas maneiras de fazer isto:

  1. Use o recurso" Profile or Debug APK " no Android Studio 3.0.

    Permite-lhe abrir e explorar APKs no Android Studio. As aulas são decompostas em smali. Os recursos não são extraídos e coisas como "Go to Definition", "Find All References" e depuração não funcionam sem o código fonte (android studio 3.0 canary 9). Alguns recursos smali adicionais podem funcionar com smalidea .

    android-studio

    select-file

    code

  2. Utilizar jadx .

    O Jadx descompila o código num dado APK para ficheiros de código java.

    jdax-img

  3. Utilizar apktool .

    Apktool é uma ferramenta de linha de comando que extrai recursos e decompila o código em smali para uma dada apk. Você pode recompilar usando apktool também. Aqui está um exemplo disso em ação:

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...
    
 6
Author: 0xcaff, 2017-08-11 03:27:00

Pode ser fácil ver a fonte:

No Android studio 2.3, Build -> Analyze APK -> Select the apk that you want to decompile.
Você verá que é o código fonte.

Linf para reference:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2

 6
Author: SKK, 2017-08-24 12:40:29
Eu mostro-te outra maneira de descompilar o {[[2]}.ficheiros apk.

Você pode seguir os dois primeiros passos de prankul garg ". Então você tem outras oportunidades:

Passo 3':

Baixe o "JD-GUI" , é fácil encontrar este. Abra o seu .jar file in " jd-gui.exe". (Ficheiro > Abrir ficheiro > 'encontrou o seu .jar file'). Após este procedimento, você pode salvar todos os recursos em um .ficheiro zip .

Então,

1 - Tens de mudar o nome do .apk ficheiro para .zip

2. º - tens de descodificar .ficheiro dex (Se quiser, descodifice o .apk file to dex2jar , that's possible)

3º - tens de descodificar .jar ficheiro com Jd-GUI
 5
Author: Franklin Hirata, 2013-02-25 12:22:01

Abaixo ONLINE Ferramenta:

Http://www.javadecompilers.com/apk

Faz tudo por um clique: decompiled .java files + resources + xml (in one .ficheiro zip) com um descompilador muito bom (jadx devolve código java em locais / funções onde outros compiladores devolvem comentários dentro da função como "incapaz de descompilar" ou algum código android montador/máquina)

 4
Author: Kamil Kiełczewski, 2017-08-24 12:40:49

Apktool para aplicações Android de engenharia reversa, fechadas e Binárias.

Pode descodificar recursos para uma forma quase original e reconstruí-los depois de fazer algumas modificações.

Torna possível depurar o código smali passo a passo. Também torna o trabalho com um aplicativo mais fácil por causa da estrutura de arquivos como projeto e automação de algumas tarefas repetitivas como construção apk, etc.

Http://ibotpeaches.github.io/Apktool/

 3
Author: Biswajit Karmakar, 2016-05-15 08:21:25

Este site https://www.apkdecompilers.com fiz isso automaticamente.

Eu tentei o site mencionado na resposta aceita primeiro, mas isso não funcionou para mim.
 3
Author: M. Usman Khan, 2017-09-11 06:20:23

Eu pessoalmente recomendo Mostrar Java Android App para obter o código fonte. Você pode baixá-lo da play store ou de aqui

 3
Author: Codelover, 2017-12-30 11:39:36

Apktool é o caminho a seguir. O serviço de apktool Online também existe: http://www.javadecompilers.com/apktool

Existem algumas limitações, obviamente, devido ao Serviço "natureza online": você pode extrair e pesquisar recursos e o arquivo manifesto, mas é impossível recompilar a aplicação no momento. Ainda assim, esta é uma maneira fácil de 'abrir' a aplicação android.
 2
Author: Andrew Rukin, 2017-07-11 05:51:03

Pode tentar DexPatcher . Até se integra com o Android Studio. Ele usa Apktool e Dex2Jar internamente.
Você pode usar essas ferramentas de forma independente também. Apktool decompila apk, e extratos .ficheiros dex, que podem ser convertidos para jar usando o Dex2Jar. Jar pode ser decompilado usando JD-GUI . Você pode ver o código Java com a ajuda dessa ferramenta. Embora a semelhança do Código decompilado com o código real não possa ser garantida. Existem algumas ferramentas avançadas de código ofuscação disponíveis no mercado, que estragam o código para tornar difícil a descompilação / compreensão. exemplo. Proguard

 2
Author: Lakshmikant Deshpande, 2017-11-16 10:53:37