APLN | Tutoriaux | Développement | Obtenir le code source des applications Android

engrenages android

Pour les developpeurs et pour notre culture Android il est utile de savoir comment obtenir le code source d’une application pour Android. Comment ? en la décompilant !

Les applications pour Android sont des fichiers ayant l’extension « APK ».
En réalité elles sont compactées. Nous pouvons changer cette extension par « ZIP » ou « RAR » et la décompacter.
Nous aurons ainsi l’arborescence du projet et surtout à sa racine un fichier « classes.dex » qui contient toute l’intelligence de l’application.

Mais ce fichier « .DEX » est illisible.

Nous allons voir comment le décompiler et ainsi obtenir le code source en java du projet de l’application !

Il va nous falloir deux applications, plutôt trois en comptant winRAR.

- Dex2Jar : qui transformera le fichier « classes.dex » en « classes.dex.dex2jar.jar »
- Un décompilateur Java comme JD.

 

JD est proposé en application indépendante et en plug-in pour Eclipse. Ici j’ai choisi la version indépendante.(JD-GUI)
decompiler apk

Je vous propose de créer un dossier « modif_apk » à la racine de votre C: et d’y télécharger les deux archivers :
« dex2jar-0.0.7.7-SNAPSHOT.zip » et « jd-gui-0.3.3.windows.zip »

Extraire les 2  fichiers avec Winrar par un click droit sur l’archive en choississant « extraire vers » afin de créer un dossier pour les fichiers extraits.

Par exemple : le fichier « signedLatinIME.apk » qui est le clavier de Gingerbread.

Télécharger « signedLatinIME.apk » et renommer le en « signedLatinIME.rar », l’extraire avec Winrar en choisissant aussi « extraire vers »

 

Vous devriez avoir ça :

decompiler apk
Dans le dossier où vous avez extrait l’application clavier de Gingerbread vous trouverez un fichier nommé : « classes.dex » qui contient le code source « compilé » .
Copiez ce fichier dans le dossier « dex2jar-0.0.7.7-SNAPSHOT ».

Le dossier « dex2jar-0.0.7.7-SNAPSHOT » devrait être comme ça :

dex2jar decompiler apk

Nous allons maintenant transformer « classe.dex »  en fichier .jar qui contient le code source du projet.

Pour cela ouvrez une console DOS par « démarrer », « exécuter » puis tapez cmd. Ou alors « démarrer », « tous les programmes », « accessoires », « invite de commande ».

Dans cette console DOS tapez :

cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT

dex2jar classes.dex

 

La console devrait vous afficher :

Microsoft Windows XP [version 5.1.2600]

(C) Copyright 1985-2001 Microsoft Corp.

C:Documents and Settings>c:

C:Documents and Settings>cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT

C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex

version:0.0.7.7-SNAPSHOT

0 [main] INFO pxb.android.dex2jar.v3.Main - dex2jar classes.dex -> classes.dex.dex2jar.jar

Done.

C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT>

COPIE ECRAN de la Console DOS :
consoleDos

Donc maintenant dans le dossier « C:modif_apkdex2jar-0.0.7.7-SNAPSHOT » vous devez  avoir un fichier : « classes.dex.dex2jar.jar » :

classe apk decompilee

Maintenant nous allons transformer ce fichier en code source java de l’application.

Allez dans le dossier « C:modif_apkjd-gui-0.3.3.windows » et lancez « jd-gui.exe ».
java-decompiler apk android

Aller dans « File », « Open File », allez chercher le fichier « classes.dex.dex2jar.jar »:

openjar decompiler apk android

Cliquer sur « Ouvrir »  et oh incroyable le projet de l’application s’affiche dans Java Decompiler :

apk decompilée dans Java
Cliquez sur l’image pour la voir en taille réelle.

Voila nous avons tout le code source du projet de l’application « signedLatinIME.apk ».

Amusez-vous bien :)

Daniel Bort

Chef de projet informatique pour un MVNO, programmateur C#, Java, .Net, papa de 3 enfants, co-fondateur. Rédacteur en chef.

 
  • Anonyme

    Question bête, mais est ce que l’on peut le faire avec toutes les appli ? Exemple Google map ou le market ?
    Car y priori ces application ne sont pas open sources et donc avec ces manip, toutes les applis le deviennent en fait?
    Qu’en est-il du droit d’auteur après?

  • admin

    C’est l’éternel débat sur le reverse engineering. Il ne s’agit pas de copier les applications dans leur intégralité mais plutôt d’avoir des templates d’organisation de projet, d’écriture de code, de récupérer des syntaxes comme par exemple la déclaration d’un écouteur…

  • Anonyme

    donc il est possible également de les recompiler en virant les banières de pubs. de même, on peut voir si telle ou telle appli envoie des informations personnelles, dans ce cas on pourrait la modifier pour retirer les mouchards et la recompiler ?

  • Anonyme

    Zut, tu as été plus rapide que moi pour publier ce genre de tuto pourtant je l’avais prévu… :(

    Je vais en faire un autre…

  • Anonyme

    bonjour,
    Il ne manquerai pas des / ou des dans ces lignes :
    cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT

    dex2jar classes.dex

    ???

  • admin

    si tout a fait bonne remarque le copier/coller les a mangé.

    Je corrige de suite

    merci

  • Anonyme

    Merci :)

    J’ai le droit à :
    C:modif_apkdex2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex
    ‘java’ n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

  • admin

    tu dois avoir la JRE de java installée alors :(

    http://www.java.com/fr/download/

  • Anonyme

    bah java réinstallé = pareil :

    C:modif_apkde x2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex
    ‘java’ n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

  • admin

    cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT

    entrée

    dex2jar classes.dex

    entrée

    il te manque un niveau de hiérarchie dans l’arborescence il me semble

Commentaires

  1. Question bête, mais est ce que l’on peut le faire avec toutes les appli ? Exemple Google map ou le market ?
    Car y priori ces application ne sont pas open sources et donc avec ces manip, toutes les applis le deviennent en fait?
    Qu’en est-il du droit d’auteur après?

  2. C’est l’éternel débat sur le reverse engineering. Il ne s’agit pas de copier les applications dans leur intégralité mais plutôt d’avoir des templates d’organisation de projet, d’écriture de code, de récupérer des syntaxes comme par exemple la déclaration d’un écouteur…

  3. donc il est possible également de les recompiler en virant les banières de pubs. de même, on peut voir si telle ou telle appli envoie des informations personnelles, dans ce cas on pourrait la modifier pour retirer les mouchards et la recompiler ?

  4. Zut, tu as été plus rapide que moi pour publier ce genre de tuto pourtant je l’avais prévu… :(

    Je vais en faire un autre…

  5. bonjour,
    Il ne manquerai pas des / ou des dans ces lignes :
    cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT

    dex2jar classes.dex

    ???

  6. si tout a fait bonne remarque le copier/coller les a mangé.

    Je corrige de suite

    merci

  7. Merci :)

    J’ai le droit à :
    C:modif_apkdex2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex
    ‘java’ n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

  8. tu dois avoir la JRE de java installée alors :(

    http://www.java.com/fr/download/

  9. bah java réinstallé = pareil :

    C:modif_apkde x2jar-0.0.7.7-SNAPSHOT>dex2jar classes.dex
    ‘java’ n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.

  10. cd C:modif_apkdex2jar-0.0.7.7-SNAPSHOTdex2jar-0.0.7.7-SNAPSHOT

    entrée

    dex2jar classes.dex

    entrée

    il te manque un niveau de hiérarchie dans l’arborescence il me semble

Suivez-nous !

Followers
3,047
Fans
2,011
Abonnés
960
Abonnés
109

Infolettre

Choisir son Mobile

  • Sosh
  • Orange
  • Virgin Mobile
  • SFR
  • NRJ Mobile
  • La Poste Mobile

Nos Partenaires

Connectez-vous

Infolettre

Extension Factory Builder