Question Existe-t-il un moyen d'obtenir le code source à partir d'un fichier APK?


Le disque dur de mon ordinateur portable s'est écrasé et j'ai perdu tout le code source d'une application sur laquelle je travaillais depuis deux mois. Tout ce que j'ai, c'est le fichier APK qui est stocké dans mon email à partir de quand je l'ai envoyé à un ami.

Est-il possible d'extraire mon code source de ce fichier APK?


1050
2017-08-29 03:40


origine


Réponses:


Manière simple: utiliser l'outil en ligne http://www.javadecompilers.com/apk, téléchargez apk et obtenez le code source.


Procédure de décodage des fichiers .apk, méthode pas à pas:

Étape 1:

  1. Créez un nouveau dossier et copiez sur le fichier .apk que vous souhaitez décoder.

  2. Renommez maintenant l'extension de ce fichier .apk en .zip (par exemple, renommez filename.apk en filename.zip) et enregistrez-le. Vous pouvez maintenant accéder aux fichiers classes.dex, etc. A ce stade, vous pouvez voir les drawables mais pas les fichiers xml et java, donc continuez.

Étape 2:

  1. Maintenant, extrayez ce fichier .zip dans le même dossier (ou NEW FOLDER).

  2. Télécharger dex2jar et l'extraire dans le même dossier (ou NEW FOLDER).

  3. Déplacez le fichier classes.dex dans le dossier dex2jar.

  4. Maintenant, ouvrez l'invite de commande et changez de répertoire pour ce dossier (ou NEW FOLDER). Puis écrire d2j-dex2jar classes.dex (pour le terminal mac ou ubuntu écrire ./d2j-dex2jar.sh classes.dex) et appuyez sur Entrée. Vous avez maintenant le fichier classes.dex.dex2jar dans le même dossier.

  5. Télécharger java decompiler, double-cliquez sur jd-gui, cliquez sur ouvrir le fichier, et ouvrez le fichier classes.dex.dex2jar à partir de ce dossier: maintenant vous obtenez des fichiers de classe.

  6. Enregistrez tous ces fichiers de classe (En jd-gui, cliquez sur Fichier -> Enregistrer toutes les sources) par nom src. A ce stade, vous obtenez la source java mais les fichiers .xml sont toujours illisibles, alors continuez.

Étape 3:

Maintenant, ouvrez un autre nouveau dossier

  1. Mettez dans le fichier .apk que vous voulez décoder

  2. Télécharger la dernière version de apktool ET fenêtre d'installation d'apktool (les deux peuvent être téléchargés à partir du même lien) et les placer dans le même dossier

  3. Ouvrez une fenêtre de commande

  4. Maintenant, lancez la commande comme apktool if framework-res.apk et ensuite

  5. apktool d myApp.apk  (où myApp.apk indique le nom de fichier que vous voulez décoder)

Maintenant, vous obtenez un dossier dans ce dossier et pouvez facilement lire les fichiers XML de l'apk.

Étape 4:

Ce n'est pas une étape, il suffit de copier le contenu du dossier (dans ce cas, les deux nouveaux dossiers) à l'unique

et profitez du code source ...


1389
2018-03-13 20:09



Ceci est une description alternative - juste au cas où quelqu'un serait coincé avec la description ci-dessus. Suis les étapes:

  1. Télécharger apktool.bat (ou apktool pour Linux) et apktool_<version>.jar de http://ibotpeaches.github.io/Apktool/install/ 
  2. renommer le fichier jar d'en haut à apktool.jar et placez les deux fichiers dans le même dossier

  3. ouvrir une boîte de DOS (cmd.exe) et changer dans ce dossier; vérifiez qu'un environnement Java est installé (pour Linux, vérifiez également les notes concernant les bibliothèques requises)
  4. Début: apktool decode [apk file] 

    Résultat intermédiaire: fichiers de ressources, AndroidManifest.xml

  5. décompressez le fichier APK avec un déballeur de votre choix

    Résultat intermédiaire: classes.dex

  6. télécharger et extraire 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. glisser déposer classes.dex sur dex2jar.bat (ou entrez <path_to>\dex2jar.bat classes.dex dans une boîte DOS; pour l'utilisation de Linux dex2jar.sh)

    Résultat intermédiaire: classes_dex2jar.jar

  8. déballer classes_dex2jar.jar (peut être facultatif en fonction du décompilateur utilisé)
  9. décompiler vos fichiers de classe (par exemple avec JD-GUI ou DJ Decompiler)

    Résultat: code source

Note: il n'est pas permis de décompiler des paquets tiers; ce guide est destiné à récupérer le code source personnel à partir d'un fichier APK uniquement; enfin, le code résultant sera très probablement obscurci


107
2017-08-29 03:58



Alors que vous pourriez être en mesure de décompiler votre APK fichier, vous allez probablement frapper un gros problème:

ça ne va pas retourner le code que vous avez écrit. Il va plutôt retourner tout ce que le compilateur a mis en ligne, avec des variables données au hasard, ainsi que des fonctions ayant des noms aléatoires. Cela pourrait prendre beaucoup plus de temps pour essayer de le décompiler et de le restaurer dans le code que vous aviez que de le recommencer.

Malheureusement, des choses comme ça ont tué de nombreux projets.
Pour l'avenir, je recommande fortement d'apprendre un système de contrôle de version, comme CVS, SVN et git etc.

et comment le sauvegarder.


96
2018-01-11 12:49



Il y a aussi une nouvelle application sur le Play Store avec lequel il est possible de décompiler une apk (applications système aussi) et voir le code source directement sur votre smartphone. Il enregistre les fichiers sur votre carte SD afin que vous puissiez également les voir sur votre ordinateur. Il ne nécessite pas de racine ou autre chose.

Installez et amusez-vous. Je pense que c'est la façon la plus simple de décompiler une application.


47
2017-08-29 12:17



apktool est la meilleure chose que vous pouvez essayer. J'ai sauvé du xml avec, mais honnêtement, je ne sais pas comment cela fonctionnera avec le code .java.

Je vous recommande d'avoir un référentiel de code même si vous êtes le seul codeur. J'ai utilisé Projet Locker pour mes propres projets. Il vous donne des repos svn et git libres.


24
2017-12-06 01:38



Ces deux articles décrivent comment combiner l'utilisation de apktool et dex2jar prendre un APK fichier et créer un projet Eclipse pouvant le générer et l'exécuter.

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

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

Fondamentalement, vous:

  1. Utilisation apktool obtenir les fichiers de ressources sur l'apk
  2. Utilisation dex2jar pour obtenir un fichier jar contenant les classes dans un format qui plaira à Eclipse.
  3. Créer un projet Eclipse pointez sur les fichiers de ressources et le nouveau fichier jar
  4. Ouvrez le fichier jar avec un utilitaire zip et supprimez les ressources existantes
  5. Ouvrez le fichier jar avec JDGui pour voir le code source
  6. Prenez le code source dont vous avez besoin JDGui, collez-le dans une classe à l'intérieur d'Eclipse et modifiez-le
  7. Supprimer cette classe du fichier jar (donc vous n'avez pas la même classe définie plusieurs fois)
  8. Exécuter.

20
2017-08-29 04:02



apktool fonctionnera. Vous n'avez même pas besoin de connaître le keystore pour extraire le code source (ce qui est un peu effrayant). Le principal inconvénient est que la source est présentée au format Smali au lieu de Java. D'autres fichiers tels que l'icône et le fichier main.xml sont tout à fait parfaits et il vaudra peut-être la peine de les récupérer. En fin de compte, vous aurez probablement besoin de réécrire votre code Java à partir de zéro.

Vous pouvez trouver apktool ici. Il suffit simplement de télécharger apktool et l'assistant approprié (pour Windows, Linux ou Mac OS). Je recommande d'utiliser un outil tel que 7-zip pour les déballer.


16
2017-08-11 03:27