Плагин Gradle com.android.kotlin.multiplatform.library – это официально поддерживаемый инструмент для добавления целевой платформы Android в модуль библиотеки Kotlin Multiplatform (KMP). Он упрощает настройку проекта, повышает производительность сборки и обеспечивает лучшую интеграцию с Android Studio.
Использование плагина com.android.library для разработки KMP зависит от API плагина Android Gradle, которые устарели и требуют согласия в плагине Android Gradle версии 9.0 и выше (четвертый квартал 2025 года). Планируется, что эти API будут удалены из плагина Android Gradle версии 10.0 (вторая половина 2026 г.).
Чтобы применить этот плагин, ознакомьтесь с разделом Применение плагина Android-KMP. Если вам нужно перейти с устаревших API, ознакомьтесь с руководством по переносу.
Чтобы перейти на AGP 9.0+, вы можете использовать навык агента, созданный JetBrains для приложений KMP. Подробнее о том, как использовать навыки в Android Studio… Помните, что результаты ИИ не полностью предсказуемы.
Основные функции и различия
Плагин Android-KMP разработан специально для проектов KMP и отличается от стандартного плагина com.android.library по нескольким ключевым аспектам:
Архитектура с одним вариантом. Плагин использует один вариант, удаляя поддержку версий продукта и типов сборки, что упрощает настройку и повышает производительность сборки.
Оптимизация для KMP. Плагин разработан для библиотек KMP и ориентирован на общий код Kotlin и совместимость. Он не поддерживает нативные сборки для Android, AIDL и RenderScript.
Тесты отключены по умолчанию. Чтобы ускорить сборку, модульные и инструментальные тесты отключены по умолчанию. При необходимости вы можете включить их.
Нет расширения Android верхнего уровня. Конфигурация обрабатывается с помощью блока
androidв Gradle KMP DSL, что позволяет поддерживать согласованную структуру проекта KMP. Отсутствует блок расширенияandroidверхнего уровня.Включить компиляцию Java. По умолчанию компиляция Java отключена. Чтобы включить его, используйте
withJava()в блокеandroid. Это позволяет сократить время сборки, когда компиляция Java не требуется.
Преимущества плагина библиотеки Android-KMP
Плагин Android-KMP предоставляет следующие преимущества для проектов KMP:
Повышенная производительность и стабильность сборки. Плагин разработан для оптимизации скорости сборки и повышения стабильности проектов KMP. Ориентация на рабочие процессы KMP способствует более эффективному и надежному процессу сборки.
Улучшенная интеграция с IDE. Она обеспечивает более эффективное автозаполнение кода, навигацию, отладку и в целом упрощает работу с библиотеками KMP Android.
Упрощенная настройка проекта. Плагин упрощает настройку проектов KMP, устраняя сложности, связанные с Android, такие как варианты сборки. Это позволяет создавать более понятные и удобные в обслуживании файлы сборки. Ранее при использовании плагина
com.android.libraryв проекте KMP могли создаваться наборы исходных файлов с непонятными названиями, напримерandroidAndroidTest. Это соглашение об именах было менее интуитивным для разработчиков, знакомых со стандартными структурами проектов KMP.
Обходные решения для неподдерживаемых функций
По сравнению с интеграцией KMP с плагином com.android.library в плагине com.android.kotlin.multiplatform.library отсутствуют некоторые функции. Вот что можно сделать в этом случае:
Варианты сборки
Типы сборки и версии продукта не поддерживаются. Это связано с тем, что в новом плагине используется архитектура с одним вариантом, которая упрощает настройку и повышает производительность сборки.
Если вам нужны варианты сборки, рекомендуем создать отдельный модуль библиотеки Android с помощью плагина
com.android.library, настроить типы сборки и версии продукта в этом модуле, а затем использовать его как стандартную зависимость проекта из набора исходных файловandroidMainмультиплатформенной библиотеки Kotlin. Подробную информацию вы найдете в статьях Как создать библиотеку Android и Как настроить варианты сборки.Привязка данных и привязка представлений
Это функции фреймворка пользовательского интерфейса, предназначенные для Android и тесно связанные с системой View и макетами XML. С новым плагином библиотеки Android-KMP мы рекомендуем обрабатывать пользовательский интерфейс с помощью мультиплатформенного фреймворка, такого как Compose Multiplatform. Привязка данных и привязка представлений считаются деталями реализации конечного приложения Android, а не общей библиотеки.
Поддержка нативных сборок
Новый плагин предназначен для создания стандартного AAR для целевой платформы Android. Интеграция нативного кода в Kotlin Multiplatform обрабатывается непосредственно собственными нативными целями KMP (такими как
androidNativeArm64иandroidNativeX86) и его возможностями взаимодействия с C. Если вам нужно включить нативный код C/C++, определите его как часть общего или нативного набора исходных файлов и настройте взаимодействие с C в блокеkotlin, а не используйте механизмexternalNativeBuild, предназначенный для Android.Если вам нужна поддержка нативной сборки через
externalNativeBuild, рекомендуем создать отдельный модульcom.android.library, в который можно интегрировать нативный код, и использовать эту библиотеку из набора исходных файловandroidMainпроекта библиотеки Kotlin Multiplatform. Подробнее о том, как создать библиотеку Android и как добавить в проект код C и C++…Класс
BuildConfigФункция
BuildConfigнаиболее полезна в средах с несколькими вариантами. Поскольку новый плагин библиотеки Kotlin Multiplatform не зависит от вариантов и не поддерживает типы сборки и версии продукта, эта функция не реализована. В качестве альтернативы мы рекомендуем использовать плагинBuildKonfigили аналогичные решения сообщества, чтобы генерировать метаданные для всех целей.
Требования
Чтобы использовать плагин com.android.kotlin.multiplatform.library, в вашем проекте должны быть настроены следующие минимальные версии:
- Плагин Android Gradle (AGP): 8.10.0.
- Плагин Kotlin Gradle (KGP): 2.0.0.
Как применить плагин Android-KMP к существующему модулю
Чтобы применить плагин Android-KMP к существующему модулю библиотеки KMP, выполните следующие действия:
Объявите плагины в каталоге версий. Откройте TOML-файл каталога версий (обычно
gradle/libs.versions.toml) и добавьте раздел определений плагинов:# To check the version number of the latest Kotlin release, go to # https://kotlinlang.org/docs/releases.html [versions] androidGradlePlugin = "9.4.0" kotlin = "KOTLIN_VERSION" [plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "androidGradlePlugin" }Примените объявление плагина в корневом файле сборки. Откройте файл
build.gradle.kts, расположенный в корневом каталоге проекта. Добавьте псевдонимы плагинов в блокpluginsс помощьюapply false. Это делает псевдонимы плагинов доступными для всех подпроектов без применения логики плагина к самому корневому проекту.Kotlin
// Root build.gradle.kts file plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Яркий
// Root build.gradle file plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Примените плагин в файле сборки модуля библиотеки KMP. Откройте файл
build.gradle.ktsв модуле библиотеки KMP и примените плагин в верхней части файла в блокеplugins:Kotlin
// Module-specific build.gradle.kts file plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
Яркий
// Module-specific build.gradle file plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
Настройте целевую платформу Android KMP. Настройте блок Kotlin Multiplatform (
kotlin), чтобы определить целевую платформу Android. В блокеkotlinукажите целевую платформу Android с помощьюandroid:Kotlin
kotlin { android { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } compilerOptions.configure { jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } sourceSets { androidMain { dependencies { // Add Android-specific dependencies here } } getByName("androidHostTest") { dependencies { } } getByName("androidDeviceTest") { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
Яркий
kotlin { android { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { it.sourceSetTreeName = "test" } compilerOptions.options.jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } sourceSets { androidMain { dependencies { } } androidHostTest { dependencies { } } androidDeviceTest { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
Примените изменения. После применения плагина и настройки блока
kotlinсинхронизируйте проект Gradle, чтобы применить изменения.
Как перейти с устаревшего плагина
В этом руководстве рассказывается, как перейти с устаревшего плагина com.android.library на плагин com.android.kotlin.multiplatform.library.
1. Переместить источники
Устаревший плагин позволял использовать наборы исходных кодов src/main, src/test и src/androidTest в дополнение к src/androidMain, src/androidHostTest и src/androidDeviceTest. Новый плагин использует только последние каталоги, поэтому вам нужно будет переместить исходные файлы из src/main в src/androidMain, из src/test в src/androidHostTest и из src/androidTest в src/androidDeviceTest.
2. Как настроить пользовательские каталоги источников и ресурсов
Если у вас есть источники или ресурсы в нестандартных каталогах, вы ранее настраивали их с помощью блока sourceSets. В новом плагине используйте расширение androidComponents, чтобы добавить в вариант статические каталоги с исходными файлами.
Обратите внимание, что в новом плагине метод addStaticSourceDirectory добавляет каталог в существующий список каталогов с исходными файлами. В устаревшем плагине метод setSrcDirs заменяет список, а метод srcDir добавляет в него элементы.
Android-KMP
В новом плагине для взаимодействия с источниками вариантов используется блок onVariants.
// build.gradle.kts
androidComponents {
onVariants { variant ->
// Add a directory for Kotlin sources
variant.sources.kotlin?.addStaticSourceDirectory("other/kotlin")
// Add a directory for Android assets
variant.sources.assets?.addStaticSourceDirectory("other/assets")
}
}
Устаревший плагин
В плагине com.android.library блок sourceSets использовался для настройки или добавления каталогов с исходными файлами.
// build.gradle.kts
android {
sourceSets {
getByName("main") {
// Replaces the directory for Kotlin sources.
kotlin.setSrcDirs(listOf("other/kotlin"))
// Appends a directory for assets.
assets.srcDir("other/assets")
}
}
}
3. Объявление зависимостей
Обычно это зависимости для наборов исходных файлов Android. В новом плагине их нужно явно размещать в блоке sourceSets, а не в общем блоке dependencies, как раньше.
Android-KMP
Новый плагин обеспечивает более чистую структуру, группируя зависимости Android в наборе исходных файлов androidMain. Помимо основного набора исходных файлов, есть два набора исходных файлов для тестирования, которые создаются по запросу: androidDeviceTest и androidHostTest. Подробнее о настройке тестов хоста и устройства…
// build.gradle.kts
kotlin {
android {}
//... other targets
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
}
// Dependencies are now scoped to the specific Android source set
androidMain.dependencies {
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.11.0")
}
}
}
Наборы исходных файлов имеют соответствующие компиляции Kotlin с названиями main, deviceTest и hostTest. Наборы исходных файлов и компиляции можно настроить в скрипте сборки следующим образом:
// build.gradle.kts
kotlin {
android {
compilations.getByName("deviceTest") {
kotlinOptions.languageVersion = "2.0"
}
}
}
Устаревший плагин
В устаревшем плагине можно было объявлять зависимости для Android в блоке зависимостей верхнего уровня, что иногда приводило к путанице в мультиплатформенном модуле.
// build.gradle.kts
kotlin {
androidTarget()
//... other targets
}
// Dependencies for all source sets were often mixed in one block
dependencies {
// Common dependencies
commonMainImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
// Android-specific dependencies
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.11.0")
}
4. Включить ресурсы Android
В новом плагине поддержка ресурсов Android (папки res) по умолчанию отключена, чтобы оптимизировать производительность сборки. Чтобы начать работу с ними, их необходимо включить. Это изменение помогает гарантировать, что проекты, не требующие ресурсов для Android, не будут обременены связанными с этим накладными расходами на сборку.
Android-KMP
Вам необходимо явно включить обработку ресурсов Android. Ресурсы должны быть размещены в src/androidMain/res.
// build.gradle.kts
kotlin {
android {
// ...
// Enable Android resource processing
androidResources {
enable = true
}
}
}
// Project Structure
// └── src
// └── androidMain
// └── res
// ├── values
// │ └── strings.xml
// └── drawable
// └── icon.xml
Устаревший плагин
Обработка ресурсов включена по умолчанию. Вы можете сразу добавить каталог res в src/main и начать добавлять XML-объекты Drawable, значения и т. д.
// build.gradle.kts
android {
namespace = "com.example.library"
compileSdk = 34
// No extra configuration was needed to enable resources.
}
// Project Structure
// └── src
// └── main
// └── res
// ├── values
// │ └── strings.xml
// └── drawable
// └── icon.xml
5. Настройка тестов хоста и устройства
По умолчанию новый плагин отключает тесты Android на стороне хоста (модульные) и на стороне устройства (инструментальные). Вам нужно явно согласиться на создание наборов исходных файлов и конфигураций для тестирования, тогда как устаревший плагин создавал их автоматически.
Такая модель согласия позволяет убедиться, что в проекте нет ничего лишнего и он содержит только логику сборки и наборы исходных файлов, которые вы активно используете.
Android-KMP
В новом плагине тесты включаются и настраиваются в блоке kotlin.android. Это делает настройку более явной и позволяет избежать создания неиспользуемых тестовых компонентов. Набор исходных файлов androidUnitTest становится androidHostTest (каталог test меняется с src/androidUnitTest на src/androidHostTest), а androidInstrumentedTest становится androidDeviceTest (каталог test меняется с src/androidInstrumentedTest на src/androidDeviceTest).
// build.gradle.kts
kotlin {
android {
// ...
// Opt-in to enable and configure host-side (unit) tests
withHostTest {
isIncludeAndroidResources = true
}
// Opt-in to enable and configure device-side (instrumented) tests
withDeviceTest {
instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
execution = "HOST"
}
}
}
// Project Structure (After Opt-in)
// └── src
// ├── androidHostTest
// └── androidDeviceTest
Устаревший плагин
При использовании плагина com.android.library наборы исходных файлов androidUnitTest и androidInstrumentedTest создаются по умолчанию. Их поведение настраивается в блоке android, обычно с помощью DSL testOptions.
// build.gradle.kts
android {
defaultConfig {
// Runner was configured in defaultConfig
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
// Configure unit tests (for the 'test' source set)
unitTests.isIncludeAndroidResources = true
// Configure device tests (for the 'androidTest' source set)
execution = "HOST"
}
}
// Project Structure (Defaults)
// └── src
// ├── test
// └── androidTest
6. Включить компиляцию исходного кода Java
Если вашей библиотеке KMP необходимо скомпилировать исходные коды Java для целевого устройства Android, вы должны явно включить эту функцию с помощью нового плагина. Обратите внимание, что это позволяет компилировать файлы Java, расположенные непосредственно в вашем проекте, а не его зависимости. Также изменился способ настройки целевой версии JVM для компиляторов Java и Kotlin.
Android-KMP
Чтобы включить компиляцию Java, вызовите withJava(). Цель JVM теперь настраивается непосредственно в блоке kotlin { android {} }, что делает настройку более унифицированной. Значение jvmTarget здесь применяется к компиляции Kotlin и Java для целевой платформы Android.
// build.gradle.kts
kotlin {
android {
// Opt-in to enable Java source compilation
withJava()
// Configure the JVM target for both Kotlin and Java sources
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
}
}
// ...
}
// Project Structure:
// └── src
// └── androidMain
// ├── kotlin
// │ └── com/example/MyKotlinClass.kt
// └── java
// └── com.example/MyJavaClass.java
Устаревший плагин
Компиляция Java включена по умолчанию. Целевая JVM для источников Java и Kotlin была задана в блоке android с помощью compileOptions.
// build.gradle.kts
android {
// ...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
kotlin {
androidTarget {
compilations.all {
kotlinOptions.jvmTarget = "1.8"
}
}
}
7. Как взаимодействовать с вариантами сборки с помощью androidComponents
Расширение androidComponents по-прежнему доступно для программного взаимодействия с артефактами сборки. Хотя API Variant в основном не изменился, новый интерфейс AndroidKotlinMultiplatformVariant более ограничен, поскольку плагин создает только один вариант.
В результате свойства, связанные с типами сборки и версиями продукта, больше не доступны в объекте варианта.
Android-KMP
Блок onVariants теперь выполняет итерацию по одному варианту. Вы по-прежнему можете обращаться к общим свойствам, таким как name и artifacts, но не к свойствам, зависящим от типа сборки.
// build.gradle.kts
androidComponents {
onVariants { variant ->
val artifacts = variant.artifacts
}
}
Устаревший плагин
При наличии нескольких вариантов вы можете получить доступ к свойствам, зависящим от типа сборки, чтобы настроить задачи.
// build.gradle.kts
androidComponents {
onVariants(selector().withBuildType("release")) { variant ->
// ...
}
}
8. Выберите варианты зависимостей библиотеки Android
Библиотека KMP создает один вариант для Android. Однако вы можете зависеть от стандартной библиотеки Android (com.android.library), у которой есть несколько вариантов (например, free/paid версии продукта). Обычно требуется контролировать, как проект выбирает вариант из этой зависимости.
Android-KMP
Новый плагин централизует и уточняет эту логику в блоке kotlin.android.localDependencySelection. Это позволяет гораздо лучше понять, какие варианты внешних зависимостей будут выбраны для вашей библиотеки KMP с одним вариантом.
// build.gradle.kts
kotlin {
android {
localDependencySelection {
// For dependencies with multiple build types, select 'debug' first, and 'release' in case 'debug' is missing
selectBuildTypeFrom.set(listOf("debug", "release"))
// For dependencies with a 'type' flavor dimension...
productFlavorDimension("type") {
// ...select the 'typeone' flavor.
selectFrom.set(listOf("typeone"))
}
}
}
}
Устаревший плагин
Вы настроили стратегии выбора зависимостей в блоках buildTypes and
productFlavors. Часто для этого использовался блок missingDimensionStrategy,
чтобы задать вариант по умолчанию для параметра, которого не было в библиотеке,
или блок matchingFallbacks в определенном варианте, чтобы задать порядок поиска.
Подробную информацию об использовании API можно найти в статье Как устранить ошибки сопоставления.
9. Добавьте зависимости предварительного просмотра Compose
Обычно мы хотим, чтобы определенные библиотеки были ограничены нашей локальной средой разработки, чтобы внутренние инструменты не попали в окончательный опубликованный артефакт. Это становится проблемой с новым плагином KMP Android, поскольку он удаляет архитектуру типа сборки, используемую для отделения зависимостей разработки от кода выпуска.
Android-KMP
Чтобы добавить зависимость только для локальной разработки и тестирования, добавьте ее непосредственно в конфигурацию пути к классам среды выполнения (в блоке dependencies верхнего уровня) основной компиляции Android. Это гарантирует, что зависимость будет доступна во время выполнения (например, для таких инструментов, как Compose Preview), но не будет частью пути к классам компиляции или опубликованного API вашей библиотеки.
// build.gradle.kts
dependencies {
"androidRuntimeClasspath"(libs.androidx.compose.ui.tooling)
}
Устаревший плагин
В мультиплатформенных проектах Kotlin, в которых для Android используется плагин com.android.library, следует применять конфигурацию debugImplementation. Она ограничивает зависимость отладочной сборкой и не позволяет включить ее в версию библиотеки, используемую потребителями.
// build.gradle.kts
dependencies {
debugImplementation(libs.androidx.compose.ui.tooling)
}
10. Настройте целевую JVM для целевой платформы KMP Android.
Плагин KMP Android задает целевую версию JVM с помощью android.compilerOptions.jvmTarget, которая применяется и к Java, и к Kotlin. Это упрощает настройку по сравнению с отдельными блоками compileOptions и kotlinOptions в проектах для Android.
Android-KMP
При работе с проектом Kotlin Multiplatform (KMP), включающим цель Android, у вас есть несколько способов настроить целевую версию JVM как для компилятора Kotlin, так и для компилятора Java. Чтобы управлять совместимостью байт-кода проекта, важно понимать область действия и иерархию этих конфигураций.
Ниже приведены три основных способа задать целевую версию JVM, упорядоченные от самого низкого до самого высокого приоритета. Целевые значения JVM с более высоким приоритетом применяются к меньшему подмножеству настроенных целей и переопределяют значения с более низким приоритетом. Это означает, что вы можете задать разные версии JVM для разных целей и компиляций в рамках целей в проекте.
Использование тулчейна Kotlin (самый низкий приоритет)
Самый общий способ задать целевую JVM – указать тулчейн в блоке kotlin файла build.gradle.kts. Этот подход задает целевую версию для задач компиляции Kotlin и Java во всех целевых объектах на основе JVM в вашем проекте, включая Android.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
В этой конфигурации и kotlinc, и javac нацелены на JVM 21. Это отличный способ установить согласованную базовую линию для всего вашего проекта.
Использование параметров компилятора целевого уровня Android (средний приоритет)
Вы можете указать целевую JVM специально для целевой платформы Android KMP в блоке android. Эта настройка переопределяет конфигурацию jvmToolchain на уровне проекта и применяется ко всем компиляциям Android.
// build.gradle.kts
kotlin {
android {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}
}
В этом случае, даже если для jvmToolchain задана другая версия, код Kotlin и Java для Android будет скомпилирован для JVM 11.
Использование параметров компилятора на уровне компиляции (наивысший приоритет)
Для более точного контроля можно настроить параметры компилятора для каждой компиляции (например, только для androidMain или androidHostTest). Это полезно, если для определенной компиляции требуется другая версия JVM. Эта настройка переопределяет как набор инструментов Kotlin, так и параметры целевого уровня Android.
// build.gradle.kts
kotlin {
android {
compilations.all {
compileTaskProvider.configure {
compilerOptions.jvmTarget.set(JvmTarget.JVM_11)
}
}
}
}
Эта конфигурация помогает гарантировать, что все компиляции в целевом объекте Android используют JVM 11, обеспечивая детальный контроль.
Устаревший плагин
В проекте KMP, использующем стандартный плагин библиотеки Android (com.android.library), конфигурация немного отличается от конфигурации при использовании плагина KMP Android (но концептуально похожа).
Использование набора инструментов Kotlin
Метод kotlin.jvmToolchain() работает аналогично, задавая sourceCompatibility и targetCompatibility для Java и jvmTarget для Kotlin. Мы рекомендуем использовать именно этот подход.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
compileOptions и kotlinOptions
Если вы не используете тулчейн Kotlin, вам нужно настроить целевые платформы JVM, используя отдельные блоки для Java и Kotlin.
// build.gradle.kts
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
11. Опубликовать правила хранения для потребителей
Если вашей библиотеке KMP необходимо поставлять потребителям правила хранения (например, правила ProGuard для R8), вам необходимо явно включить публикацию с помощью нового плагина. Ранее правила хранения для потребителей публиковались по умолчанию, если они были указаны.
Android-KMP
В новом плагине необходимо задать optimization.consumerKeepRules.publish = true и указать файлы правил в блоке consumerKeepRules, чтобы опубликовать правила сохранения для потребителей.
// build.gradle.kts
kotlin {
android {
optimization {
consumerKeepRules.apply {
publish = true
file("consumer-proguard-rules.pro")
}
}
}
}
Устаревший плагин
При использовании com.android.library любые файлы правил, указанные с помощью consumerProguardFiles в android.defaultConfig, по умолчанию публикуются в артефактах библиотеки.
// build.gradle.kts
android {
defaultConfig {
consumerProguardFiles("consumer-proguard-rules.pro")
}
}
12. Опубликуйте библиотеку в Maven
Если вы планируете опубликовать библиотеку KMP в Maven для использования в других проектах, процесс будет отличаться в зависимости от того, используете ли вы новый плагин Android-KMP или устаревший плагин.
Android-KMP
Плагин com.android.kotlin.multiplatform.library интегрируется со стандартными механизмами публикации Kotlin Multiplatform. Помимо стандартного процесса публикации библиотеки KMP, никаких дополнительных действий для Android не требуется.
Чтобы опубликовать библиотеку, следуйте официальной документации JetBrains: Настройка публикации для мультиплатформенной библиотеки.
Устаревший плагин
При использовании com.android.library для целевой платформы Android в проекте KMP вам необходимо следовать стандартному руководству по публикации библиотек Android, чтобы подготовить и опубликовать артефакт для Android (.aar).
Подробные инструкции приведены в разделе Подготовка библиотеки к выпуску.
Документация по API плагина
У нового плагина другой API, не такой, как у com.android.library. Подробную информацию о новом DSL и интерфейсах можно найти в документации по API:
KotlinMultiplatformAndroidLibraryExtensionKotlinMultiplatformAndroidLibraryTargetKotlinMultiplatformAndroidDeviceTestKotlinMultiplatformAndroidHostTestKotlinMultiplatformAndroidVariant
Известные проблемы с плагином библиотеки Android-KMP
Ниже перечислены известные проблемы, которые могут возникнуть при применении нового плагина com.android.kotlin.multiplatform.library.
Предварительный просмотр Compose не работает при использовании нового плагина android-KMP
- Исправлено в
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3иAndroid Gradle Plugin 9.0.0-alpha13
- Исправлено в
-
- Исправлено в
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3иAndroid Gradle Plugin 9.0.0-alpha13
- Исправлено в
-
- Исправлено в
Kotlin Gradle Plugin 2.3.0-Beta2
- Исправлено в
Поддержка instrumented sourceSetTree для цели androidLibrary
- Исправлено в
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3иAndroid Gradle Plugin 9.0.0-alpha13
- Исправлено в
Рекомендуем
- Примечание. Текст ссылки показывается, когда JavaScript отключен.
- Как настроить среду
- Как добавить модуль KMP в проект