Spec-Zone.ru › Kotlin 2

Настройка и конфигурация ресурсов для мультиплатформенных проектов

Чтобы правильно настроить проект для работы с мультиплатформенными ресурсами:

  1. Добавьте зависимость библиотеки.

  2. Создайте необходимые каталоги для каждого типа ресурсов.

  3. Создайте дополнительные каталоги для ресурсов с квалификаторами (например, для разных изображений тёмной темы интерфейса или локализованных строк).

Настройка скрипта сборки и каталогов

Чтобы получать доступ к ресурсам в мультиплатформенных проектах, добавьте зависимость библиотеки и упорядочите файлы в каталоге проекта:

  1. Добавьте зависимость в набор исходных кодов commonMain в файле build.gradle.kts в каталоге sharedUI:

    kotlin {
        //...
        sourceSets {
            commonMain.dependencies {
                implementation(compose.components.resources)
            }
        }
    }
    

    Чтобы указать библиотеку напрямую, используйте полное имя из страницы артефакта в Maven Central.

  2. Создайте новый каталог composeResources в каталоге набора исходных кодов, в который хотите добавить ресурсы (в этом примере — commonMain):

    Compose resources project structure
  3. Организуйте структуру каталога composeResources согласно следующим правилам:

    • Изображения должны находиться в каталоге drawable. Compose Multiplatform поддерживает растровые изображения (JPEG, PNG, bitmap и WebP), а также векторные изображения Android XML (без ссылок на ресурсы Android).

    • Шрифты должны находиться в каталоге font.

    • Строки должны находиться в каталоге values.

    • Остальные файлы должны находиться в каталоге files с любой подходящей вам иерархией папок.

Пользовательские каталоги ресурсов

В блоке compose.resources {} файла build.gradle.kts можно указать пользовательские каталоги ресурсов для каждого набора исходных кодов. В каждом из таких каталогов файлы должны быть организованы так же, как в каталоге composeResources по умолчанию: с подкаталогом drawable для изображений, подкаталогом font для шрифтов и так далее.

Простой пример — указать конкретную папку:

compose.resources {
    customDirectory(
        sourceSetName = "jvmMain",
        directoryProvider = provider { layout.projectDirectory.dir("desktopResources") }
    )
}

Также можно настроить папку, содержимое которой формируется задачей Gradle, например, загруженными файлами:

abstract class DownloadRemoteFiles : DefaultTask() { @get:OutputDirectory val outputDir = layout.buildDirectory.dir("downloadedRemoteFiles") @TaskAction fun run() { /* your code for downloading files */ } } compose.resources { customDirectory( sourceSetName = "iosMain", directoryProvider = tasks.register<DownloadRemoteFiles>("downloadedRemoteFiles").map { it.outputDir.get() } ) }

Подробнее о настройке доступа к ресурсам см. в разделе Доступ и использование.

Пользовательские пути к веб-ресурсам

Указать пути и URL-адреса веб-ресурсов можно с помощью функции configureWebResources():

  • Используйте относительный путь (начинающийся с /), чтобы указать ресурс относительно корня домена.

  • Используйте абсолютный URL-адрес (начинающийся с http:// или https://), чтобы указать ресурс, размещённый на внешнем домене или в CDN.

// Maps resources to an application-specific path
configureWebResources {
    resourcePathMapping { path -> "/myApp/resources/$path" }
}

// Maps resources to an external CDN
configureWebResources {
    resourcePathMapping { path -> "https://mycdn.com/myApp/res/$path" }
}

Ресурсы в целевом объекте androidLibrary

Начиная с версии 8.8.0 плагина Android Gradle, в целевом объекте androidLibrary можно использовать сгенерированный класс Res и средства доступа к ресурсам. Чтобы включить поддержку мультиплатформенных ресурсов в androidLibrary, обновите конфигурацию следующим образом:

kotlin {
  androidLibrary {
    androidResources.enable = true
  }
}

Квалификаторы

Иногда один и тот же ресурс должен отображаться по-разному в зависимости от среды, например от локали, плотности экрана или темы интерфейса. Например, может потребоваться локализовать текст для разных языков или изменить изображения для тёмной темы. Для этого библиотека предоставляет специальные квалификаторы.

Узнайте, как работать с настройками среды, связанными с ресурсами, в руководстве Управление локальной средой ресурсов.

Все типы ресурсов, кроме необработанных файлов в каталоге files, поддерживают квалификаторы. Добавляйте квалификаторы к именам каталогов через дефис:

Qualifiers in multiplatform resources

Библиотека поддерживает следующие квалификаторы (в порядке приоритета): язык, тема и плотность.

  • Можно применять вместе квалификаторы разных типов. Например, «drawable-en-rUS-mdpi-dark» — это изображение для английского языка в регионе США, подходящее для экранов с плотностью 160 DPI и тёмной темой.

  • Если ресурс с запрошенным квалификатором недоступен, вместо него используется ресурс по умолчанию (без квалификатора).

Квалификаторы языка и региона

Можно сочетать квалификаторы языка и региона:

  • Язык задаётся двухбуквенным (ISO 639-1) или трёхбуквенным (ISO 639-2) кодом языка.

  • К коду языка можно добавить двухбуквенный региональный код ISO 3166-1-alpha-2. Перед региональным кодом должен стоять префикс r в нижнем регистре, например: drawable-spa-rMX.

В кодах языка и региона учитывается регистр.

Чтобы указать письменность или любой другой субтег BCP 47, используйте префикс b+ и замените все последующие дефисы между субтегами (-) знаком +, например: values-b+zh+Hans и values-b+zh+Hant.

Подробнее о работе с форматами, зависящими от региона, см. в разделе Локализация.

Резервный вариант для языков с несколькими письменностями

На Android и компьютерах система может запросить локаль без указания письменности, например zh без письменности вместо конкретной zh-Hans или zh-Hant. Если предоставить только ресурсы для конкретных письменностей, все они будут соответствовать такому запросу без указанной письменности, и ресурс не удастся разрешить, поэтому приложение выбросит исключение. Чтобы избежать неоднозначности, добавьте каталог без указания письменности для каждого языка, у которого есть ресурсы для отдельных письменностей:

commonMain/composeResources/
├── values/                 # Default resources
├── values-zh/              # Resources for `zh` without a script
├── values-b+zh+Hans/
└── values-b+zh+Hant/

Это также относится ко всем языкам с более чем одной письменностью, например к сербскому (sr-Cyrl, sr-Latn) или узбекскому (uz-Cyrl, uz-Latn).

Квалификатор темы

Можно добавить квалификаторы «light» или «dark». Тогда Compose Multiplatform выберет нужный ресурс в зависимости от текущей системной темы.

Квалификатор плотности

Можно использовать следующие квалификаторы плотности:

  • «ldpi» — 120 DPI, плотность 0,75x

  • «mdpi» — 160 DPI, плотность 1x

  • «hdpi» — 240 DPI, плотность 1,5x

  • «xhdpi» — 320 DPI, плотность 2x

  • «xxhdpi» — 480 DPI, плотность 3x

  • «xxxhdpi» — 640 DPI, плотность 4x

Ресурс выбирается в зависимости от плотности экрана, заданной в системе.

Публикация

Начиная с Compose Multiplatform 1.6.10, все необходимые ресурсы включаются в публикуемые артефакты Maven.

Для использования этой возможности в проекте необходимы Kotlin 2.0.0 или новее и Gradle 7.6 или новее.

Что дальше?

  • Узнайте, как получать доступ к настроенным ресурсам и настраивать средства доступа, создаваемые по умолчанию, на странице Использование мультиплатформенных ресурсов в приложении.

  • Посмотрите официальный демонстрационный проект, в котором показано, как работать с ресурсами в проекте Compose Multiplatform для iOS, Android и компьютеров.

2 сентября 2026 г.
Обзор ресурсовИспользование мультиплатформенных ресурсов в приложении

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/compose-multiplatform-resources-setup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API