Есть три инструмента отладки 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *