Analyse les fichiers (AAB, APK, JAR, AAR) aux emplacements indiqués et renvoie tous les détails disponibles.
Utilisation
android analyze [-h] [--analysis=PARAM] [--format=PARAM] <path>
Options
--analysis=PARAM: catégorie d'analyse pour filtrer les résultats (basic, optimization). Accepte les valeurs séparées par une virgule (par défaut : toutes).-f,--format=PARAM: format de sortie (json, textproto). Si ce champ est omis, la sortie est formatée pour être lisible par l'humain.-h,--help: affiche le message d'aide de la commande spécifiée.
android options :
--sdk=PARAM: chemin d'accès au SDK Android.-v,--verbose: activez la sortie détaillée pour le dépannage.-V,--version: imprime les informations sur la version, puis quitte.
Arguments positionnels
<path>: chemin d'accès au ou aux fichiers cibles à analyser (AAB, APK, JAR, AAR).
Description
android analyze inspecte un ou plusieurs artefacts Android, tels que des packages d'application (.aab, .apk) ou des archives de bibliothèque (.aar, .jar), et fournit des métadonnées détaillées sur la compilation, la structure et les performances.
Types de fichiers compatibles
android analyze est compatible avec les packages d'application et les archives de bibliothèque :
- Android App Bundles (
.aab) et APK (.apk) : évalue les métadonnées au niveau de l'application, les configurations de compilation, les caractéristiques DEX et les résultats d'optimisation. - Archives Android (
.aar) et archives Java (.jar) : évalue les métadonnées au niveau de la bibliothèque, les métriques de compilation DEX, l'impact des règles de conservation et les composants natifs groupés.
Catégories d'analyse (--analysis)
Par défaut, toutes les catégories d'analyse disponibles sont effectuées. Utilisez --analysis=<category> pour filtrer les résultats par catégories spécifiques (séparées par une virgule).
basic: métadonnées de base telles que le nom du package et la version des applications. Indique les détails d'identification de l'application (par exemple, le nom du package, le nom de la version et le code de version des applications).optimization: optimisations du compilateur, tailles DEX et métadonnées de minification de code :- Pour les applications (
.aab,.apk) : indique la version du plug-in Android Gradle (AGP), la taille du fichier DEX non compressé, les paramètres et pourcentages de réduction et d'optimisation de R8, l'état d'optimisation des ressources R8 et les métadonnées du marqueur DEX. - Pour les bibliothèques (
.aar,.jar) : indique les tailles DEX D8 et R8, le ratio de conservation, les récapitulatifs de la collection d'éléments (classes, méthodes et champs conservés par rapport au total), les règles de conservation utilisées et inutilisées à l'échelle du package avec rayon d'impact, les règles de conservation des consommateurs bloquées, les bibliothèques natives empaquetées (fichiers.so) et les avertissements pour les anti-modèles d'optimisation détectés.
- Pour les applications (
Mise en forme du résultat (-f, --format)
- Par défaut, la sortie est affichée dans un format récapitulatif lisible par l'humain.
-f json, --format=json: émet du code JSON lisible par machine, adapté à l'analyse programmatique par des scripts et des pipelines d'intégration continue.-f textproto, --format=textproto: émet un format de texte Protobuf (textproto).
Exemples
Analysez un APK avec toutes les catégories par défaut :
android analyze app-release.apk
Analysez plusieurs artefacts ensemble :
android analyze app-release.apk library.aar
Analysez un fichier AAB et affichez les résultats au format JSON :
android analyze --format=json app-release.aab
Exemple de sortie JSON :
{
"results": [
{
"optimization": {
"bundleAnalysisResult": {
"agpVersion": "9.3.2",
"r8Json": {
"version": "9.3.16",
"options": {
"isRepackageClassesEnabled": true,
"isProguardCompatibilityModeEnabled": false
},
"stats": {
"shrinkingRatio": 0.9606,
"optimizationRatio": 0.9551,
"obfuscationRatio": 0.9622
},
"resourceOptimizationStatus": "R8_RESOURCE_OPTIMIZATION_STATUS_DISABLED",
"r8DexChecksumStatus": "EXACT_MATCH"
},
"r8DexMarkerMetadata": {
"r8Enabled": true,
"d8Enabled": false,
"fullModeEnabled": true
},
"mappingObfuscationRatio": 0.97108626,
"dexHeuristicObfuscationRatio": 0.97108626,
"uncompressedDexSizeBytes": "6198152"
}
},
"artifactPath": "app-release.aab",
"basic": {
"appInfo": {
"packageName": "com.google.samples.apps.nowinandroid",
"versionName": "1.0",
"versionCode": "1"
}
}
}
]
}
Analysez une bibliothèque d'archive Java (JAR) avec toutes les catégories par défaut :
android analyze library.jar
Analysez une bibliothèque d'archive Android (AAR) en filtrant pour la catégorie optimization et en générant une sortie au format JSON :
android analyze --analysis=optimization -f json library.aar
Exemple de sortie JSON :
{
"results": [
{
"optimization": {
"libraryAnalysisResult": {
"dex": {
"d8CompileResult": {
"dexSizeBytes": 2117400
},
"r8CompileResult": {
"dexSizeBytes": 1100,
"configuration": {
"keepRules": [
{
"source": "-keep class com.example.ExampleClass_* {\n static *** builder();\n}",
"keptItemCount": 2
},
{
"source": "-keep class com.example.SomeClass {\n public static *** SDK_ROOT_CLASS_NAME;\n}",
"keptItemCount": 2
}
]
},
"classes": {
"itemCount": 3437,
"keptItemCount": 2,
"noObfuscationCount": 2,
"noOptimizationCount": 2,
"noShrinkingCount": 2
},
"fields": {
"itemCount": 9835,
"keptItemCount": 1,
"noObfuscationCount": 1,
"noOptimizationCount": 1,
"noShrinkingCount": 1
},
"methods": {
"itemCount": 16333,
"keptItemCount": 1,
"noObfuscationCount": 1,
"noOptimizationCount": 1,
"noShrinkingCount": 1
}
},
"validateConsumerKeepRulesResult": {}
},
"r8Version": "9.5.17-dev",
"version": "kg=1_r8=9.5.17-dev"
}
},
"artifactPath": "library.aar"
}
]
}