¿Hay una manera de obtener el código fuente de un archivo APK?

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

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

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


Procedimiento para decodificar archivos .apk, método paso a paso:

Paso 1:

  1. Haga una nueva carpeta y copie sobre el archivo .apk que desee decodificar.

  2. Ahora cambie el nombre de la extensión de este archivo .apk a .zip (por ejemplo, cambie el nombre de filename.apk a filename.zip) y guárdelo. Ahora puedes acceder a los archivos classes.dex, etc. En esta etapa puedes ver dibujables pero no archivos xml y java, así que continúa.

Paso 2:

  1. Ahora extraiga este archivo .zip en la misma carpeta (o en NEW FOLDER).

  2. Descargar dex2jar y extraerlo a la misma carpeta (o NEW FOLDER).

  3. Mueva el archivo classes.dex a la carpeta dex2jar.

  4. Ahora abra el símbolo del sistema y cambie el directorio a esa carpeta (o NUEVA FOLDER). Luego escribe d2j-dex2jar classes.dex (para mac terminal o ubuntu escribe ./d2j-dex2jar.sh classes.dex ) y presiona enter. Ahora tiene el archivo classes.dex.dex2jar en la misma carpeta.

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

  6. Guarde todos estos archivos de clase (En jd-gui, haga clic en Archivo -> Guardar todas las fuentes) por nombre de fuente. En esta etapa obtendrá el origen java, pero los archivos .xml siguen siendo ilegibles, así que continúe.

Paso 3:

Ahora abre otra carpeta nueva

  1. Ponga en el archivo .apk que desea decodificar

  2. Descargue la última versión de apktool y la ventana de instalación de apktool (ambas se pueden descargar desde el mismo enlace) y colóquelas en la misma carpeta

  3. Abrir una ventana de comandos

  4. Ahora ejecute comando como apktool if framework-res.apk y next

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

Ahora usted consigue una carpeta de archivos en esa carpeta y puede leer fácilmente los archivos xml del apk.

Etapa 4:

No es un paso sólo copiar el contenido de ambas carpetas (en este caso ambas carpetas nuevas) a la única

Y disfrutar del código fuente …

Esta es una descripción alternativa – por si alguien se quedó con la descripción anterior. Sigue los pasos:

  1. Descargue apktool.bat (o apktool para Linux) y apktool_<version>.jar desde 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 una caja dos ( cmd.exe ) y cambie a esa carpeta; Compruebe que está instalado un entorno Java (para Linux, consulte también las notas sobre las bibliotecas necesarias)
  4. Inicio: apktool decode [apk file]

    Resultado intermedio : archivos de recursos, AndroidManifest.xml

  5. Descomprima el archivo APK con un desembalador de su elección

    Resultado intermedio : classes.dex

  6. Descargar y extraer dex2jar-0.0.9.15.zip desde 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 escriba <path_to>\dex2jar.bat classes.dex en un cuadro de DOS, para Linux use dex2jar.sh )

    Resultado intermedio : classes_dex2jar.jar

  8. classes_dex2jar.jar (puede ser opcional dependiendo del descompilador usado)
  9. Descompila tus archivos de clase (por ejemplo, con JD-GUI o DJ Decompiler )

    Resultado : código fuente

Nota: no se permite descompilar paquetes de terceros; Esta guía está destinada a recuperar el código fuente personal de un archivo APK solamente; Finalmente, el código resultante probablemente será ofuscado

Mientras que usted puede ser capaz de descompilar su archivo APK , es probable que llegue a un gran problema:

No va a devolver el código que escribió. En cambio, va a devolver lo que sea el compilador inline, con variables dadas nombres aleatorios, así como las funciones dadas nombres aleatorios. Podría tomar mucho más tiempo para tratar de descompilar y restaurar en el código que tenía, que será para empezar de nuevo.

Tristemente, cosas como esta han matado muchos proyectos.
Para el futuro, recomiendo aprender un sistema de control de versiones, como CVS , SVN y git, etc.

Y cómo respaldarlo.

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

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

Apktool es lo mejor que puedes probar. He ahorrado algunos xml con él, pero honesto no sé cómo trabajará con el código de .java.

Yo recomendaría que tenga un repositorio de código incluso si su codificador es el único. He estado usando Project Locker para mis propios proyectos. Te da svn libre y git repos.

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 puede construir 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 usted:

  1. Utilice apktool para obtener los archivos de recursos del apk
  2. Utilice dex2jar para obtener un archivo jar que contenga las clases en un formato que le guste a Eclipse.
  3. Cree un proyecto de Eclipse que lo apunte en los archivos de recursos y el 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. Tome cualquier código fuente que necesite de JDGui , JDGui en una clase dentro de Eclipse y JDGui
  7. Elimine esa clase del archivo jar (para que no tenga la misma clase definida varias veces)
  8. Ejecutarlo.

Apktool funcionará. Usted ni siquiera necesita saber el keystore para extraer el código fuente (que es 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 main.xml vienen a través de perfectamente bien y puede que valga la pena su tiempo al menos para recuperar esos. En última instancia, es muy probable que necesite volver a escribir su código Java desde cero.

Aquí puede encontrar apktool. Basta con descargar apktool y el auxiliar adecuado (para Windows, Linux o Mac OS). Recomiendo el uso de una herramienta como 7-zip para desempaquetarlos.

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

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

Paso 3':

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

Asi que,

Primero – Tienes que cambiar el nombre del archivo .apk a .zip

Segundo – Tienes que decodificar el archivo .dex (si quieres, descodificar el archivo .apk a dex2jar , eso es posible)

Tercero – Tienes que decodificar el archivo .jar con JD-GUI

Apktool para la ingeniería inversa de terceros, cerrado, aplicaciones binarias de Android.

Puede descifrar los recursos de forma casi original y reconstruirlos después de hacer algunas modificaciones.

Hace posible depurar 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 como proyecto y la automatización de algunas tareas repetitivas como construir apk, etc.

http://ibotpeaches.github.io/Apktool/

Puede ser fácil ver la fuente:

 Android studio 2.3 -> Build -> Analyze APK -> Select the apk that you want to decompile -> see the source code 

Ref

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

Apktool es el camino a seguir. Servicio de apktool en línea también existe: http://www.javadecompilers.com/apktool

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

Sin embargo, esta es una manera sin complicaciones de "abrir" la aplicación Android.

Debajo de la herramienta ONLINE :

http://www.javadecompilers.com/apk

Hace todo en un solo clic: decompiled archivos .java + recursos + xml (en un archivo .zip) con decompiler muy bueno (jadx devuelve código java en lugares / funciones donde otras compilaciones devuelven comentarios dentro de la función como "incapaz de descompilar" o algunos Android ensamblador / código de máquina)

Disfruta

Hay algunas maneras de hacer esto:

  1. Utilice la función "Perfil o Depurar APK" en Android Studio 3.0.

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

    Android-estudio

    seleccione Archivo

    código

  2. Utilice jadx .

    Jadx descompila el código en un APK determinado a los archivos de origen de java.

    Jdax-img

  3. Utilice apktool .

    Apktool es una herramienta de línea de comandos que extrae recursos y descompila código en smali para un determinado apk. 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... 
  • Resumen de la tabla de referencia local de JNI (512 entradas)
  • ¿Por qué setImageResource no muestra nada?
  • Proguard rompe el archivo de audio en activos o en bruto
  • ¿Cómo evitar que los recursos y el código no utilizados de un proyecto de una biblioteca de Android entren en mi APK?
  • Ningún recurso encontrado que coincida con el nombre dado Xamarin Android
  • Android.content.res.Resources $ NotFoundException: ID de recurso de cadena
  • No se encuentran recursos de Android en algunos dispositivos
  • Android getResource en la clase non activity de una clase Non Activity?
  • Cómo realizar 3D Curve Wall con jQuery o js
  • ¿No puede anular el recurso xml de la biblioteca con el recurso png en la aplicación?
  • WebView, agrega el archivo .CSS local a una página HTML?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.