Convertir apk en java

Convertir APK en JAVA

Extrayez le code source de type Java et les ressources des fichiers APK Android avec JADX et Apktool.

Convertir des fichiers APK en ligne

Nous n’avons pas encore de convertisseur en ligne dédié pour APK vers JAVA, mais vous pouvez convertir des fichiers APK en ligne vers ces formats :

Comment convertir apk en fichier java

Les utilisateurs extraient du code source de type Java depuis un APK afin d’inspecter une application Android publiée, d’auditer son comportement ou de récupérer sa logique lorsque le projet d’origine n’est pas disponible. Le résultat est du code décompilé destiné à l’analyse, et non l’arborescence source d’origine ni un projet Android Studio dont la compilation est garantie.

Fichiers APK et Java

Un APK est un package d’application Android. Il s’agit d’une archive au format ZIP utilisée par les appareils Android, les développeurs, les testeurs, les boutiques d’applications et les installateurs de packages ; elle contient normalement un manifeste Android, des ressources, des assets, des bibliothèques natives, du bytecode compilé tel que classes.dex et des données de signature.

Le code d’un APK est compilé en instructions Dalvik Executable (DEX) pour Android Runtime, et non stocké sous forme de fichiers .java. Google Play reçoit souvent des Android App Bundles (.aab) et produit des APK spécifiques à l’appareil pour l’installation, mais les développeurs et les testeurs peuvent toujours travailler directement avec des fichiers APK.

Un fichier Java est du code source en texte brut portant l’extension .java. Le résultat décompilé de type Java est plus facile à rechercher, à lire, à mettre en correspondance et à inspecter que les instructions DEX ; il peut révéler la structure des classes, les chaînes, les appels d’API, les permissions et la logique de l’application. Il ne conserve ni les commentaires, ni la mise en forme, ni les noms de variables d’origine, ni les paramètres du projet, ni toutes les informations liées au niveau du langage.

Extraire du code source de type Java depuis un APK

Utilisez JADX pour la décompilation DEX-vers-Java. Il lit directement les fichiers APK, affiche le code et les ressources décodés et est généralement plus utile que l’ancien flux de travail dex2jar associé à un décompilateur Java. Procurez-vous JADX depuis ses versions officielles sur GitHub plutôt que d’utiliser des outils obsolètes tels que Xenotix APK Reverser.

  1. Copiez l’APK dans un dossier de travail distinct.
  2. Ouvrez-le dans l’interface graphique avec jadx-gui app.apk, ou sélectionnez File → Open.
  3. Parcourez les packages et recherchez des noms de classes, des URL, des permissions, des méthodes, des chaînes ou des entrées du manifeste.
  4. Exportez le code source affiché et les ressources décodées avec File → Save All.
  5. Pour obtenir une sortie en ligne de commande, exécutez jadx -d decoded_app app.apk. Le code source décompilé est normalement écrit dans decoded_app/sources et les ressources dans decoded_app/resources.

Utilisez Apktool lorsqu’un décodage des ressources ou une inspection de bas niveau est nécessaire. Exécutez apktool d app.apk -o app_decoded ; les répertoires smali obtenus contiennent du Smali, une représentation lisible du bytecode DEX. Comparez la sortie de JADX avec Smali lorsque le flux de contrôle ou le corps des méthodes semblent incomplets.

Ne téléversez pas d’APK propriétaires, fournis par des clients ou contenant des informations sensibles de sécurité vers des décompilateurs en ligne publics. Un APK peut contenir du code, des certificats, des points de terminaison intégrés, des clés d’API, des assets et des données de configuration. Pour un traitement dans le navigateur, utilisez un service interne approuvé par l’organisation ou auto-hébergé ; JADX en local constitue l’option par défaut la plus sûre.

Limites de compatibilité et de qualité

La décompilation n’est pas une conversion sans perte. Le compilateur supprime les commentaires et la mise en forme et peut supprimer les informations de type générique ainsi que les noms locaux. L’obfuscation R8 ou ProGuard peut remplacer les noms significatifs par des identifiants courts tels que a et b.

Un APK peut contenir plusieurs fichiers DEX, du code Kotlin, du code généré ou des bibliothèques natives C/C++. JADX peut restituer le DEX sous forme de code de type Java, mais le code source Kotlin ne sera pas restauré sous sa forme originale en Kotlin, et les bibliothèques natives .so nécessitent une analyse distincte du code natif plutôt qu’une décompilation Java.

Les fichiers .java générés peuvent contenir une syntaxe invalide, des types manquants, un flux de contrôle inexact ou des méthodes de remplacement, notamment en présence d’obfuscation, de réflexion, de modèles de bytecode non pris en charge ou de packages corrompus. La sortie décompilée doit être considérée comme un élément à examiner, et non comme le code source faisant autorité.

La reconstruction d’une application nécessite un nouveau projet Gradle, des dépendances, des manifestes, des ressources et une configuration de signature. La clé privée de signature d’origine de l’APK ne peut pas être récupérée ; un APK reconstruit doit être signé avec une clé que vous contrôlez et ne mettra pas à jour une application installée signée avec une autre clé. N’inspectez les logiciels que lorsque le droit d’auteur, les conditions de licence, les contrats et l’autorisation vous y autorisent.

Comparaison du format APK vs JAVA

Comparaison entre les formats APK et JAVA sur les propriétés les plus importantes pour cette conversion.

Comparaison des formats de fichier APK et JAVA
Propriété .APK Android Package .JAVA Java source code file
Norme ouverte Non Partiellement ouvert
Compression Les deux Non compressé
Taille de fichier typique Moyen Petit
S’ouvre dans un navigateur web Non Non
Modification ultérieure Non modifiable directement Facile
Support des métadonnées Basique Basique
Lisible en texte brut Non Oui
Idéal pour Intégration dans des applications Production professionnelle
Date d’introduction 2008 1995
Développeur Google Oracle (Java platform; originally Sun Microsystems)
Type MIME application/vnd.android.package-archive text/x-java-source