Контекст: этот вопрос относится к проекту приложения для Android, в котором используется Jetpack Compose для пользовательского интерфейса, и в основном фокусируется на создании метрик компилятора Compose через командную строку.
В моем корневом проекте градация настроена следующим образом:
subprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
// Trigger this with:
// ./gradlew assembleRelease -PenableComposeReports=true
if (project.findProperty("enableComposeReports") == "true") {
freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination = " + rootProject.buildDir.absolutePath + "/compose_metrics/"]
freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination = " + rootProject.buildDir.absolutePath + "/compose_metrics/"]
}
}
}
}
Когда я выполняю задачу assembleRelease
gradle с помощью следующей команды:
./gradlew assembleRelease -PenableComposeReports=true
, freeCompilerArgs
настроены соответствующим образом для создания метрик компилятора Compose.
freeCompilerArgs
через CLI при выполнении самой задачи Gradle, не имея какой-либо конкретной конфигурации Gradle для создания метрик Compose Compiler.Я пытаюсь создать инструмент CLI, который генерирует показатели компилятора Compose как часть своей функциональности, и я хотел бы иметь возможность запускать его в любом произвольном проекте Jetpack Compose, независимо от того, настроен ли gradle для создания показателей компилятора Compose (например, выше ) или нет.
Можно ли передать эти freeCompilerArgs через CLI? Что-то вроде:
./gradlew assembleRelease -Pkotlin.compiler.arguments = "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=<path>”
Если нет, существуют ли какие-либо альтернативные способы создания метрик Compose Compiler через CLI для произвольного проекта (который может иметь или не иметь Gradle, настроенный для создания того же самого)?
Эту проблему можно решить с помощью Gradle Init scripts.
Сценарии инициализации (они же сценарии инициализации) аналогичны другим скрипты в Gradle. Однако эти скрипты запускаются перед сборкой. начинается.
Итак, мы можем выполнить gradle
task
вместе с gradle
init script
, что может настроить gradle
для включения генерации метрик компилятора Compose.
// init.gradle
initscript {
repositories {
mavenCentral()
google()
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.0")
classpath("com.android.tools.build:gradle:7.4.2")
}
}
allprojects {
afterEvaluate {
tasks.configureEach {
if (it.class.name.contains("org.jetbrains.kotlin.gradle.tasks.KotlinCompile")) {
kotlinOptions {
freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination = " + rootProject.buildDir.absolutePath + "/reports/"]
freeCompilerArgs += ["-P", "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination = " + rootProject.buildDir.absolutePath + "/metrics/"]
}
}
}
}
}
И выполните gradle task
как ./gradlew assembleRelease -I init.gradle
, чтобы сгенерировать метрики компилятора Compose.
После того, как я задал этот вопрос в нескольких разных темах, это единственное решение, которое у меня есть для этой конкретной проблемы.
Огромное спасибо Никите Скворцову за ответ на этот вопрос в другой ветке , вся заслуга в том, что они придумали это решение. Также спасибо Бьорну Каутлеру за помощь мне в правильной настройке init.gradle
сценария.