Scalpel est une bibliothèque légère conçue pour visualiser en temps réel la hiérarchie des vues Android sous forme de modèles 3D interactifs. Bien que l’Inspecteur de disposition intégré à Android Studio (à partir de la version 4.0) offre une représentation volumétrique dynamique, Scalpel conserve un intérêt stratégique dans les environnements de développement exigeants en réactivité, compatibilité ou portabilité.
Fonctionnalités clés et mode d’emploi
Plutôt que d’analyser les vues depuis un IDE distant, Scalpel opère directement au sein de l’application cible. En remplaçant le conteneur racine par ScalpelFrameLayout, il active un mode de visualisation superposée où chaque couche de l’interface peut être manipulée manuellement via des gestes tactiles.
- Activation du mode 3D :
enable3DView(true) - Affichage filaire :
showWireframe(true) - Étiquetage des identifiants :
displayViewIds(true) - Personnalisation visuelle :
setOutlineColor(0xFF4A90E2),setShadowColor(0x66000000)
Les interactions sont intuitives :
- Touche unique → rotation libre autour des axes X/Y
- Pincement vertical à deux doigts → zoom avant/arrière
- Pincement horizontal à deux doigts → ajustemant de l’écart entre couches
Comparaison fonctionnelle avec l’Inspecteur de disposition
| Fonctionnalité | Scalpel | Inspecteur de disposition (AS) |
|---|---|---|
| Environnement d’exécution | Directement sur l’appareil, sans connexion USB ni IDE | Nécessite une session de débogage active via Android Studio |
| Compatibilité SDK | Supporte API 14+ (avec limitations mineures avant API 19) | Requiert Android Studio ≥ 4.0 et un appareil compatible avec ViewBinding/Compose |
| Contrôle programmatique | Oui — activation/désactivation dynamique via code Java/Kotlin | Non — uniquement via interface graphique IDE |
| Surcharge mémoire | < 80 Ko en RAM, aucune dépendance native | Consommation variable (jusqu’à 150 Mo), dépendante du processus AS |
Cas d’usage privilégiés
Scalpel excelle là où la rapidité, l’autonomie ou la compatibilité descendante sont prioritaires :
- Débogage itératif rapide : vérification immédiate d’un chevauchement ou d’un clipping sans relancer l’inspecteur IDE.
- Démonstrations hors ligne : présentation en réunion avec affichage direct sur tablette ou smartphone, sans infrastructure de développement.
- Maintenance de projets anciens : support des applications utilisant encore
android.supportou ciblant API < 21.
Intégration minimale
Dans app/build.gradle :
debugImplementation 'com.jakewharton.scalpel:scalpel:1.1.2'
Dans le layout principal (ex. activity_main.xml) :
<com.jakewharton.scalpel.ScalpelFrameLayout
android:id="@+id/debug_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Contenu réel de l'interface -->
<TextView
android:text="Bienvenue"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</com.jakewharton.scalpel.ScalpelFrameLayout>
Dans l’Activity ou le Fragment :
val debugLayout = findViewById<ScalpelFrameLayout>(R.id.debug_layout)
if (BuildConfig.DEBUG) {
debugLayout.enable3DView(true)
debugLayout.showWireframe(true)
debugLayout.displayViewIds(true)
}
Limites connues et bonnes pratiques
Scalpel ne remplace pas l’inspecteur complet d’Android Studio, mais complète son écosystème. Ses contraintes principales sont :
- Aucun support des attributs personnalisés ou des propriétés Compose
- Impossible d’éditer les valeurs en temps réel (contrairement à l’IDE)
- Ne fonctionne pas avec les vues rendues via
TextureViewouSurfaceView
Pour éviter toute fuite en production, l’intégration doit être conditionnée à la variante debug : utiliser debugImplementation, désactiver le mode 3D en release, et exclure les classes Scalpel via proguard-rules.pro.