1447 votes

Y a-t-il un moyen d'obtenir le code source d'un fichier APK ?

Le disque dur de mon ordinateur portable vient de tomber en panne 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 ma messagerie électronique depuis que je l'ai envoyé à un ami.

Y a-t-il un moyen d'extraire mon code source de ce fichier APK ?

36 votes

FYI Il y a un contrôle en ligne du décompacteur ici

17 votes

Cela signifie-t-il que nous pouvons obtenir le code source d'applications valant des millions de dollars comme Whatsapp ou Facebook ? Est-ce que tout cela est open source ?

1743voto

Prankul Garg Points 3386

Procédure de décodage des fichiers .apk, méthode étape par étape :

Étape 1 :

  1. Créez un nouveau dossier et copiez-y le fichier .apk que vous voulez décoder.

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

Étape 2 :

  1. Extrayez maintenant ce fichier .zip dans le même dossier (ou NOUVEAU DOSSIER).

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

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

  4. Ouvrez maintenant l'invite de commande et changez de répertoire pour ce dossier (ou NOUVEAU DOSSIER). Puis écrivez d2j-dex2jar classes.dex et appuyez sur la touche Entrée. Vous avez maintenant le fichier classes.dex.dex2jar dans le même dossier.

  5. Télécharger le décompilateur java double-cliquez sur jd-gui, cliquez sur open file, et ouvrez le fichier classes.dex.dex2jar de ce dossier : vous obtenez maintenant des fichiers de classe.

  6. Enregistrez tous ces fichiers de classe (dans jd-gui, cliquez sur Fichier -> Enregistrer toutes les sources) par le nom src. À 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 le fichier .apk que vous voulez décoder.

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

  3. Télécharger cadre-res.apk et le mettre dans le même dossier (tous les fichiers apk n'ont pas besoin de ce fichier, mais ça ne fait pas de mal)

  4. Ouvrir une fenêtre de commande

  5. Naviguez dans le répertoire racine de APKtool et tapez la commande suivante : apktool if framework-res.apk

  6. apktool d myApp.apk (où monApp.apk désigne le nom du fichier que vous voulez décoder)

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

Étape 4 :

Il n'y a aucune étape à suivre, il suffit de copier le contenu des deux dossiers (dans ce cas, les deux nouveaux dossiers) dans le seul dossier.

et profiter du code source...

2 votes

Merci beaucoup mais j'ai un problème après avoir fait la 3ème étape, tous les fichiers sont au format smali, comment puis-je les lire ?

26 votes

@prankulgarg ,Au point 5 de l'étape 3 j'obtiens l'erreur suivante : Impossible d'accéder à jarfile E:\apktojava\testt\\apktool.jar

2 votes

A eu le problème de "jd-gui.exe a rencontré un problème et doit être fermé. Nous sommes désolés pour la gêne occasionnée." au moment de sauvegarder tout le code source java .

140voto

Trinimon Points 6254

Il s'agit d'une description alternative - juste au cas où quelqu'un serait coincé avec la description ci-dessus (comme cela s'est produit une fois). http://stackoverflow.com/questions/15371249/how-to-get-source-code-form-apk/15372158#15372158 ). Suivez les étapes :

  1. télécharger apktool-install-windows-r05-ibot.tar.bz2 et apktool1.5.2.tar.bz2 de http://code.google.com/p/Android-apktool/

  2. mettre tous les fichiers dans un seul dossier, c'est-à-dire aapt.exe , apktool.bat et apktool.jar

  3. ouvrir une boîte de dialogue ( cmd.exe ) et entrez dans ce dossier ; vérifiez qu'un environnement Java est installé.

  4. Commencez : apktool decode [apk file]

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

  5. Décompressez le fichier APK avec le décompresseur de votre choix.

    Résultat intermédiaire : classes.dex

  6. télécharger 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

    Résultat intermédiaire : classes_dex2jar.jar

  8. déballer classes_dex2jar.jar

  9. décompiler vos fichiers de classe (par exemple avec DJ Decompiler ; vérifier http://www.neshkov.com/ )

    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 d'un fichier APK uniquement ; enfin, le code résultant sera très probablement obfusqué.

7 votes

Je pourrais aussi ajouter, qu'il y a une alternative moderne à cette route APKTool->dex2jar->JD-GUI ! Essayez simplement le décompilateur APK et DEX open-source appelé Jadx : sourceforge.net/projets/jadx/files Il existe également une version en ligne ici : javadecompilers.com/apk

2 votes

Il est permis (lire : légal) de décompiler tout Fichier APK. Voir la question suivante : stackoverflow.com/questions/9674557/

1 votes

Pourquoi ces apktool retourner smali fichiers ? Comment obtenir java fichier ?

127voto

Ryan Gooler Points 963

Bien que vous puissiez décompiler votre fichier APK, vous vous heurterez probablement à un problème majeur : il ne retournera pas le code que vous avez écrit. Il renverra plutôt ce que le compilateur a intégré, avec des noms aléatoires pour les variables et pour les fonctions. Cela pourrait prendre beaucoup plus de temps d'essayer de décompiler et de restaurer le code que vous aviez, que de recommencer.

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

19 votes

Un service comme Dropbox sera également utile.

3 votes

Et il y a toujours un moyen de graver des CD.

0 votes

Et il y a toujours un moyen d'écrire le code source sur un papirus.

73voto

codercat Points 5586

Je vais vous montrer une autre façon de décompiler les fichiers .apk.

Ne perdez pas votre temps précieux pour celui-là. vous pouvez visiter le lien ci-dessous très facile et moins de temps pour la réingénierie pour apk au code source.

Si vous avez des questions ou des commentaires, veuillez nous contacter...

http://www.decompileandroid.com/

30voto

Macarse Points 36519

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

Je vous recommande d'avoir un dépôt de code, même si vous êtes le seul codeur. J'ai utilisé Casier de projet pour mes propres projets. Il vous donne des dépôts svn et git gratuits.

0 votes

Vous trouverez apktool indispensable si vous souhaitez extraire des ressources (c'est-à-dire des images) d'une application Android. En fait, cet outil n'a aucun concurrent). Une version en ligne de l'apktool est disponible ici : www.javadecompilers.com/apktool.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X