Есть три инструмента отладки Compose:
- Layout inspector – показывает количество рекомпозиций Composable функций
- Compose Compiler Metrics – показывает какие функции являются стабильными, а какие нет
- Decomposer – сохраняет промежуточные java class файлы, которые создаются при компиляции Compose
Подробно описывать каждый инструмент не буду, это есть в статьях, например на хабре. Опишу только включение этих инструментов, т.к. есть особенности.
Layout inspector
Работает только с android. Для его правильной работы с Compose Multiplatform необходимо для андроида включить внешний компилятор Compose и в сборку должны быть включены файлы META-INF/androidx.compose.*.version. Для это пишем в build.gradle.kts модуля следующее:
android {
// .....
// здесь стандартный код настройки android сборки
// .....
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.3"
}
packaging {
resources {
excludes += "/META-INF/versions/*/**"
}
}
}
Так же в зависимости androidMain должны быть uitooling
val androidMain by getting {
dependencies {
implementation(libs.androidx.appcompat)
implementation(libs.androidx.activityCompose)
implementation(libs.compose.uitooling) //<- эта зависимость
}
}
Compose Compiler Metrics
Включается указанием аргументов компиляции в build.gradle.kts модуля. Например для сборки андроида:
kotlin {
androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = "17"
val dir = project.buildDir.absolutePath + "/compose_metrics"
// Compose Compiler Metrics
freeCompilerArgs += listOf(
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=$dir"
)
// Compose Compiler Report
freeCompilerArgs += listOf(
"-P",
"plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=$dir"
)
}
}
}
}
Теперь в папке /build/compose_metrics будут создаваться файлы с данными Compose
Decomposer
Это gradle плагин . Не обновлялся давно, возможно перестанет работать вскоре.
В settings.gradle.kts добавляем репозиторий jitpack.io и модуль decomposer (см.выделенный строки)
pluginManagement {
repositories {
google()
gradlePluginPortal()
mavenCentral()
maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
maven("https://jitpack.io")
}
resolutionStrategy {
eachPlugin {
if(requested.id.toString() == "com.github.takahirom.decomposer"){
useModule("com.github.takahirom:decomposer:main-SNAPSHOT")
}
}
}
}
В build.gradle.kts проекта прописываем плагин:
plugins {
alias(libs.plugins.multiplatform).apply(false)
alias(libs.plugins.compose).apply(false)
alias(libs.plugins.android.application).apply(false)
id("com.github.takahirom.decomposer") apply false //<- этот
}
В build.gradle.kts модуля включаем плагин:
plugins {
alias(libs.plugins.multiplatform)
alias(libs.plugins.compose)
alias(libs.plugins.android.application)
id("com.github.takahirom.decomposer")
}
Теперь при каждой сборке в папке /build/decompiled будут формироваться файлы *.class