¿Hay alguna forma de obtener el código fuente de un archivo APK?


El disco duro de mi computadora portátil simplemente se estrelló y perdí todo el código fuente de una aplicación en la que he estado trabajando durante los últimos dos meses. Todo lo que tengo es el archivo APK que se almacena en mi correo electrónico desde cuando se lo envié a un amigo.

¿Hay alguna manera de extraer mi código fuente de este archivo APK?

Author: Jeroen Vannevel, 2010-08-29

16 answers

Forma sencilla: utilizar la herramienta en línea http://www.javadecompilers.com/apk , subir apk y obtener el código fuente.


Procedimiento para la decodificación .archivos apk, método paso a paso:

Paso 1:

  1. Hacer una nueva carpeta y copiar sobre el .archivo apk que desea decodificar.

  2. Ahora cambie el nombre de la extensión de esto .archivo apk a .zip (por ejemplo, renombrar desde nombre de archivo.apk a nombre de archivo.zip) y guardarlo. Ahora puedes acceder a las clases.archivos dex, etc. En esta etapa puede ver elementos de diseño, pero no archivos xml y java, así que continúe.

Paso 2:

  1. Ahora extrae esto .archivo zip en la misma carpeta (o NUEVA carpeta).

  2. Descargar dex2jar y extraerlo a la misma carpeta (o NUEVA CARPETA).

  3. Mueve las clases.archivo dex en la carpeta dex2jar.

  4. Ahora abra el símbolo del sistema y cambie el directorio a esa carpeta (o NUEVA CARPETA). A continuación, escriba d2j-dex2jar classes.dex (para mac terminal o ubuntu write ./d2j-dex2jar.sh classes.dex) y pulse intro. Ahora tienes las clases.dex.archivo dex2jar en la misma carpeta.

  5. Descargue java decompiler, haga doble clic en jd-gui, haga clic en abrir archivo y abra clases.dex.archivo dex2jar de esa carpeta: ahora obtienes archivos de clase.

  6. Guarde todos estos archivos de clase (en jd-gui, haga clic en Archivo -> Guardar todas las fuentes) por nombre src. En esta etapa se obtiene la fuente de Java, pero el .los archivos xml siguen siendo ilegibles, por lo que continuar.

Paso 3:

Ahora abre otra nueva carpeta

  1. Pon el .archivo apk que desea decodificar

  2. Descargue la última versión de apktool Y apktool install window (ambos se pueden descargar desde el mismo enlace) y colóquelos en la misma carpeta

  3. Abre una ventana de comandos

  4. Ahora ejecutar comando como apktool if framework-res.apk y siguiente

  5. apktool d myApp.apk (donde myApp.apk denota el nombre de archivo que desea decodificar)

Ahora obtienes una carpeta de archivos en esa carpeta y puedes leer fácilmente los archivos xml del apk.

Paso 4:

No es cualquier paso, simplemente copie el contenido de ambas carpetas(en este caso, ambas nuevas carpetas)a la única

Y disfrutar del código fuente...

 1408
Author: Prankul Garg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-14 12:11:15

Esta es una descripción alternativa - solo en caso de que alguien se quede atascado con la descripción anterior. Siga los pasos:

  1. descargar apktool.bat (o apktool para Linux) y apktool_<version>.jar a partir de http://ibotpeaches.github.io/Apktool/install/
  2. cambie el nombre del archivo jar de arriba a apktool.jar y coloque ambos archivos en la misma carpeta

  3. abra un cuadro dos (cmd.exe) y cambie a esa carpeta; verifique que un entorno Java sea instalado (para Linux revise las notas con respecto a las bibliotecas requeridas también)
  4. Comienzo: apktool decode [apk file]

    Resultado intermedio : archivos fuente, AndroidManifest.xml

  5. descomprimir el archivo APK con un desempaquetador de su elección

    resultado Intermedio: classes.dex

  6. descargar y extraer 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. arrastre y suelte classes.dex en dex2jar.bat (o ingrese <path_to>\dex2jar.bat classes.dex en un cuadro DOS; para el uso de Linux dex2jar.sh)

    resultado Intermedio: classes_dex2jar.jar

  8. descomprimir classes_dex2jar.jar (puede ser opcional dependiendo del decompilador utilizado)
  9. descompilar sus archivos de clase (por ejemplo, con JD-GUI o DJ Decompiler)

    Resultado : código fuente

Nota: no está permitido descompilar paquetes de terceros; esta guía está destinada a recuperar código fuente personal solo de un archivo APK; finalmente, el código resultante probablemente será ofuscados

 108
Author: Trinimon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-12 00:47:17

Si bien es posible que pueda descompilar su archivo APK, es probable que tenga un gran problema:

No va a devolver el código que escribió. En su lugar, va a devolver lo que sea que el compilador esté en línea, con variables con nombres aleatorios, así como funciones con nombres aleatorios. Podría tomar mucho más tiempo intentar descompilarlo y restaurarlo en el código que tenía, que empezar de nuevo.

Tristemente, cosas como esta han matado a muchos proyectos.
Para el futuro, Recomiendo encarecidamente aprender un Sistema de Control de Versiones, como CVS, SVN y git etc.

Y cómo respaldarlo.

 99
Author: Ryan Gooler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 11:59:05

También hay una nueva aplicación en el Play Store con la que es posible descompilar un apk (aplicaciones del sistema también) y ver el código fuente directamente en su teléfono inteligente. Guarda los archivos en su tarjeta SD para que pueda verlo en su computadora también. No requiere raíz o algo más.

Simplemente instale y diviértase. Creo que esta es la forma más fácil de descompilar una aplicación.

 47
Author: Cilenco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-11 12:49:24

Apktool es lo mejor que puedes probar. He guardado algo de xml con él, pero honestamente no se como funcionará con el .código java.

Te recomendaría tener un repositorio de código incluso si eres el único codificador. He estado usando Project Locker para mis propios proyectos. Te da repositorios svn y git gratuitos.

 24
Author: Macarse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-05 07:04:47

Estos dos artículos describen cómo combinar el uso de apktool y dex2jar para tomar un archivo APK y crear un proyecto Eclipse que pueda compilarlo y ejecutarlo.

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

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

Básicamente tú:

  1. Use apktool para obtener los archivos fuente del apk
  2. Use dex2jar para obtener un archivo jar que contenga las clases en un formato que le guste a Eclipse.
  3. Crear un proyecto Eclipse apunte a los archivos fuente y al nuevo archivo jar
  4. Abra el archivo jar con una utilidad zip y elimine los recursos existentes
  5. Abra el archivo jar con JDGui para ver el código fuente
  6. Toma el código fuente que necesites de JDGui, mételo en una clase dentro de Eclipse y modifícalo
  7. Elimine esa clase del archivo jar (para que no tenga misma clase definida varias veces)
  8. ejecutarlo.
 20
Author: Tom Hennen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-14 13:00:25

Apktool funcionará. Ni siquiera necesita conocer el almacén de claves para extraer el código fuente (lo que da un poco de miedo). El principal inconveniente es que la fuente se presenta en formato Smali en lugar de Java. Otros archivos como el icono y principal.xml vienen a través perfectamente bien sin embargo y puede valer la pena su tiempo para recuperar al menos los. En última instancia, lo más probable es que necesite volver a escribir su código Java desde cero.

Puedes encontrar apktool aquí. Simplemente descargue apktool y el ayudante apropiado (para Windows, Linux o Mac OS). Recomiendo usar una herramienta como 7-zip para desempaquetarlos.

 16
Author: Ryan Berger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-29 04:02:46

Hay algunas maneras de hacer esto:

  1. Utilice el "Perfil o Depuración APK" característica en Android Studio 3.0.

    Te permite abrir y explorar APK en Android Studio. Las clases se descompilan en smali. Los recursos no se extraen y cosas como "Ir a Definición", "Buscar todas las referencias" y la depuración no funcionan sin el código fuente (android studio 3.0 canary 9). Algunas características adicionales de smali podrían funcionar con smalidea .

    android-studio

    seleccionar archivo

    codificar

  2. Use jadx.

    Jadx descompila el código en un APK dado a archivos fuente java.

    jdax-img

  3. Use apktool.

    Apktool es una herramienta de línea de comandos que extrae recursos y descompila código en smali para un apk dado. También puedes recompilar usando apktool. He aquí un ejemplo de ello en acción:

    $ 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,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-11 03:27:00

Puede ser el más fácil de ver la fuente:

En Android studio 2.3, Build -> Analyze APK -> Select the apk that you want to decompile.
Verás que es el código fuente.

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

 6
Author: SKK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 12:40:29

Te mostraré otra forma de descompilar el .archivos apk .

Puedes seguir los primeros 2 pasos de " prankul garg". Así que tienes otras oportunidades:

Paso 3':

Descarga el "JD-GUI", eso es fácil de encontrar este. Abra su .archivo jar en "jd-gui.exe". (Archivo > Abrir archivo > 'encontró su .jar file'). Después de este procedimiento, puede guardar todos los recursos en un .archivo zip.

Entonces,

1st - You tiene que cambiar el nombre de la .apk archivo a .zip

2do - Tienes que decodificar .archivo dex (si lo desea, decodifique el .apk archivo a dex2jar , eso es posible)

3rd - Tienes que decodificar .jar archivo con JD-GUI

 5
Author: Franklin Hirata,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-25 12:22:01

Debajo de EN LÍNEA herramienta:

Http://www.javadecompilers.com/apk

Lo hace todo con un solo clic: descompilado .archivos java + recursos + xml (en uno .archivo zip) con muy buen decompiler (jadx devuelve código java en lugares/funciones donde otros compiladores devuelven comentarios dentro de la función como "no se puede descompilar" o algún ensamblador de android/código máquina)

 4
Author: Kamil Kiełczewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 12:40:49

Apktool para la ingeniería inversa 3rd partido, cerrado, aplicaciones binarias de Android.

Puede decodificar recursos a la forma casi original y reconstruirlos después de hacer algunas modificaciones.

Permite depurar el código smali paso a paso. También hace que trabajar con una aplicación sea más fácil debido a la estructura de archivos tipo proyecto y la automatización de algunas tareas repetitivas como la construcción de apk, etc.

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

 3
Author: Biswajit Karmakar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-15 08:21:25

Este sitio https://www.apkdecompilers.com / lo hizo automáticamente.

Probé el sitio mencionado en la respuesta aceptada primero, pero eso no funcionó para mí.

 3
Author: M. Usman Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-11 06:20:23

Yo personalmente recomiendo Mostrar Java Android App para obtener el código fuente. Puedes descargarlo desde play store o desde aquí

 3
Author: Codelover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-30 11:39:36

Apktool es EL camino a seguir. El servicio apktool en línea también existe: http://www.javadecompilers.com/apktool

Algunas limitaciones, obviamente, existen debido a la naturaleza del servicio en línea: puede extraer e investigar activos y el archivo de manifiesto, pero es imposible recompilar la aplicación en este momento.

Aún así, esta es una forma sin problemas de 'abrir' la aplicación Android.

 2
Author: Andrew Rukin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-11 05:51:03

Puedes probar DexPatcher. Incluso se integra con Android Studio. Usa Apktool y Dex2Jar internamente.
También puede usar esas herramientas de forma independiente. Apktool descompila apk y extrae .archivos dex, que además se pueden convertir a jar usando Dex2Jar. Jar se puede descompilar usando JD-GUI. Puedes ver el código Java con la ayuda de esa herramienta. Aunque no se puede garantizar la similitud del código descompilado con el código real. Alli son algunas herramientas avanzadas de ofuscación de código disponibles en el mercado, que estropean el código para dificultar la descompilación / comprensión. eg. Proguard

 2
Author: Lakshmikant Deshpande,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-16 10:53:37