apkanalyzer

La version en ligne de commande de l'analyseur d'APK fournit un aperçu immédiat de la composition de votre APK une fois le processus de compilation terminé et vous permet de comparer les différences entre deux APK. L'analyseur d'APK peut vous aider à réduire le temps passé à déboguer les problèmes liés aux fichiers et aux ressources DEX dans votre application, et à diminuer la taille de votre APK.

apkanalyzer est inclus dans le package d'outils de ligne de commande du SDK Android sur android_sdk/cmdline-tools/version/bin/apkanalyzer. Vous pouvez également accéder à l'analyseur d'APK dans Android Studio, comme décrit dans Analyser votre build avec l'analyseur d'APK.

Syntaxe

La syntaxe de apkanalyzer est la suivante :

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]

subject est l'élément que vous souhaitez interroger. Il peut s'agir de l'APK complet ou d'une partie de celui-ci. Un objet peut correspondre à l'un des éléments suivants :

  • apk : analysez les attributs du fichier APK tels que l'ID application, le code de version et le nom de version.
  • files : analysez les fichiers dans le fichier APK.
  • manifest : analysez le contenu du fichier manifeste dans le fichier APK.
  • dex : analysez les fichiers DEX dans le fichier APK.
  • resources : affichez les ressources de texte, d'image et de chaîne.

verb est l'élément que vous souhaitez savoir sur l'objet. Les objets, les verbes et leurs options sont décrits dans la section suivante sur les commandes.

Chaque commande nécessite la spécification d'un fichier APK. Seule la commande apk compare nécessite un deuxième fichier APK.

Vous pouvez raccourcir chaque option à condition qu'elle soit non équivoque. Par exemple, l'option globale --human-readable peut être raccourcie en -h.

L'exemple suivant analyse apk (objet) pour obtenir son file-size (verbe), puis affiche la taille du fichier dans un format lisible (option -h) :

apkanalyzer -h apk file-size myapk.apk

Commandes

Les descriptions de commandes suivantes sont organisées par objet et listent les combinaisons de verbes et d'options disponibles pour chaque objet :

Afficher les attributs du fichier APK Description
apk summary apk-file Affiche l'ID application, le code de version et le nom de version.

Exemple de sortie :

com.myapp 5 1.1-beta
apk file-size apk-file Affiche la taille totale du fichier APK.
apk download-size apk-file Affiche une estimation de la taille de téléchargement de l'APK.
apk features [--not-required] apk-file Affiche les fonctionnalités utilisées par l'APK qui déclenchent le filtrage du Play Store. Ajoutez l'option --not-required pour inclure les fonctionnalités marquées comme non obligatoires dans la sortie.

Exemple de sortie :

android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission
apk compare [options] apk-file apk-file2 Compare les tailles de apk-file et apk-file2. Vous pouvez inclure les options suivantes :
  • --different-only : affiche les répertoires et les fichiers avec des différences.
  • --files-only : n'affiche pas les entrées de répertoire.
  • --patch-size : affiche une estimation du correctif fichier par fichier au lieu d'une différence brute.

Exemple de sortie (ancienne taille/nouvelle taille/différence de taille/chemin d'accès) :

39086736 48855615 9768879 /
10678448 11039232 360784 /classes.dex
18968956 18968956 0 /lib/
110576 110100 -476 /AndroidManifest.xml
...
Afficher le système de fichiers APK Description
files list apk-file Liste tous les fichiers de l'APK.

Exemple de sortie :

/
/classes2.dex
/classes.dex
/assets/
/assets/asset.data
/AndroidManifest.xml
/resources.arsc
/res/
...
files cat --file path apk-file Affiche le contenu du fichier. Vous devez spécifier un chemin d'accès dans l'APK à l'aide de l'option --file path, par exemple --file /AndroidManifest.xml
Afficher les informations dans le fichier manifeste Description
manifest print apk-file Affiche le fichier manifeste APK au format XML.
manifest application-id apk-file Affiche la valeur de l'ID application.
manifest version-name apk-file Affiche la valeur du nom de version.
manifest version-code apk-file Affiche la valeur du code de version.
manifest min-sdk apk-file Affiche la version minimale du SDK.
manifest target-sdk apk-file Affiche la version du SDK cible.
manifest permissions apk-file Affiche la liste des autorisations.
manifest debuggable apk-file Indique si l'application est débogable.
Accéder aux informations sur le fichier DEX Description
dex list apk-file Affiche la liste des fichiers DEX de l'APK.
dex references [--files path] [--files path2] apk-file Affiche le nombre de références de méthodes dans les fichiers DEX spécifiés. La valeur par défaut est tous les fichiers DEX. Ajoutez l'option --files pour indiquer les fichiers spécifiques que vous souhaitez inclure.

Exemple de sortie :

classes.dex 59598
classes2.dex 8042
dex packages [option1 option2 ...] apk-file Affiche l'arborescence des classes à partir de DEX. Dans la sortie, P, C, M et F indiquent respectivement des packages, des classes, des méthodes et des champs. x, k, r et d indiquent respectivement les nœuds supprimés, conservés, référencés et définis.

Ajoutez les options suivantes pour affiner la sortie :

  • --defined-only : n'inclut que les classes définies dans l'APK dans la sortie.
  • --files : spécifie les noms de fichier DEX à inclure. Par défaut : tous les fichiers DEX.
  • --proguard-folder file : spécifie le dossier de sortie ProGuard pour rechercher les mappages.
  • --proguard-mappings file : spécifie le fichier de mappage ProGuard.
  • --proguard-seeds file : spécifie le fichier source de ProGuard.
  • --proguard-usages file : spécifie le fichier d'utilisation de ProGuard.
  • --show-removed : affiche les classes et les membres qui ont été supprimés par ProGuard.

Exemple de sortie (type/état/méthodes définies/méthodes référencées/taille en octets/nom) :

P d 1 1 85 g
P d 1 1 85 g.a
C d 1 1 85 g.a.a
M d 1 1 45 g.a.a java.lang.Object get()
C r 0 1 40 byte[]
M r 0 1 40 byte[] java.lang.Object clone()
dex code --class class [--method method] Affiche le bytecode d'une classe ou d'une méthode au format smali. Le nom de classe est obligatoire et affiche le nom complet de la classe à décompiler. Ajoutez l'option --method pour spécifier la méthode à décompiler.

Le format de la méthode à décompiler est name(params)returnType. Par exemple : someMethod(Ljava/lang/String;I)V.

Afficher les ressources stockées dans res/ et resources.arsc Description
resources packages Affiche la liste des packages définis dans le tableau des ressources.
resources configs --type type [--package package] apk-file Affiche la liste des configurations pour l'élément type spécifié. type est un type de ressource tel que string. Incluez l'option --package si vous souhaitez spécifier le nom du package de la table des ressources. Sinon, le premier package défini sera utilisé.
resources value --config config --name name --type type [--package package] apk-file Affiche la valeur de la ressource spécifiée par config, name et type. L'option type correspond au type de la ressource, par exemple string.

Incluez l'option --package si vous souhaitez spécifier le nom du package de la table des ressources. Sinon, le premier package défini sera utilisé.

resources names --config config --type type [--package package] apk-file Affiche la liste des noms de ressources pour une configuration et un type. L'option type correspond au type de la ressource, par exemple string. Incluez l'option --package si vous souhaitez spécifier le nom du package de la table des ressources. Sinon, le premier package défini sera utilisé.
resources xml --file path apk-file Affiche la forme lisible d'un fichier XML binaire. Incluez l'option file pour spécifier le chemin d'accès au fichier.