LeakCanary pour Kotlin : guide complet avec exemples
Dans le développement Android, la gestion de la mémoire est l'une des tâches les plus critiques. Les fuites mémoire (memory leaks) se produisent lorsqu'un objet dont l'application n'a plus besoin reste en mémoire à cause de références implicites. Cela entraîne une augmentation de la consommation mémoire, des pauses fréquentes du Garbage Collector (GC), des ralentissements et, finalement, une OutOfMemoryError et un plantage de l'application. LeakCanary est une bibliothèque open source créée par Square qui détecte automatiquement les fuites mémoire dans les applications Android Java et Kotlin.
Pourquoi en avez-vous besoin ? Déboguer les fuites manuellement est un processus complexe et chronophage qui nécessite une compréhension approfondie de la JVM, l'analyse de heap dumps et l'utilisation de profileurs (Android Studio Profiler, MAT). LeakCanary automatise tout ce travail : il surveille automatiquement le cycle de vie des Activity, Fragment, ViewModel et autres composants. Si l'un d'eux n'est pas collecté par le garbage collector après sa destruction, la bibliothèque crée un heap dump, l'analyse et vous fournit un rapport prêt à l'emploi avec la chaîne exacte de références à l'origine de la fuite. Cela permet aux développeurs de trouver et corriger rapidement les problèmes sans passer des heures à analyser manuellement.
LeakCanary s'intègre à l'application sous forme de bibliothèque et fonctionne en arrière-plan. Il n'affecte pas l'expérience utilisateur, mais fournit au développeur (dans une version debug) des notifications et des logs détaillés. Depuis la version 2.x, la bibliothèque a été entièrement réécrite en Kotlin, devenant plus performante et plus simple à utiliser. Elle prend en charge les derniers composants d'architecture Android (Jetpack) et permet de personnaliser le processus de détection des fuites.
Installation
LeakCanary est distribué via Maven Central. Pour l'installer, ajoutez la dépendance dans votre fichier build.gradle.kts (ou build.gradle) de votre module (app).
Important : LeakCanary est destiné uniquement aux versions debug. Ne l'incluez jamais dans une version release de votre application, car cela pourrait nuire aux performances et à la sécurité.
// build.gradle.kts (Module :app)
dependencies {
// debugImplementation — la bibliothèque sera disponible uniquement en debug
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.14")
// Pour le support de Jetpack Navigation (optionnel)
debugImplementation("com.squareup.leakcanary:leakcanary-android-navigation:2.14")
// Pour le support du Process Lifecycle (optionnel)
debugImplementation("com.squareup.leakcanary:leakcanary-android-process:2.14")
}
Après la synchronisation Gradle, LeakCanary enregistre automatiquement son ContentProvider au démarrage de l'application. Aucune initialisation supplémentaire dans le code n'est nécessaire.
Démarrage rapide
L'exemple minimal consiste simplement à installer la bibliothèque. Ensuite, LeakCanary surveillera automatiquement les fuites.
1. Installez la bibliothèque comme décrit ci-dessus.
2. Lancez l'application en mode debug.
3. Effectuez une action susceptible de provoquer une fuite (par exemple, faites pivoter l'écran s'il y a une fuite d'Activity).
4. Si une fuite est détectée, vous verrez une notification système :

5. Appuyez sur la notification pour ouvrir l'écran avec le rapport détaillé (Heap Dump Info).
Exemple de code qui crée une fuite pour les tests :
// Exemple de fuite : référence statique à une Activity
class LeakyActivity : AppCompatActivity() {
companion object {
// La référence statique empêchera l'Activity d'être collectée par le GC
var leakedActivity: Activity? = null
}
override fun onCreate(savedInsta