---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.3
alternate:
  - https://divkit.tech/docs/en/quickstart/android.md
  - https://divkit.tech/docs/ru/quickstart/android.md
---
> **Documentation Index:** Fetch the complete configuration index at https://divkit.tech/docs/ru/llms.txt

# Инструкция для Android

## Конфигурация библиотеки и отрисовка первой DivView

### Настройка зависимостей
Добавьте в проект зависимость от DivKit:
```Gradle translate=no
    implementation 'com.yandex.div:div:$version'
    implementation 'com.yandex.div:div-core:$version'
    implementation 'com.yandex.div:div-json:$version'
```
Последнюю версию библиотеки можно узнать на [странице релизов](https://github.com/divkit/divkit/releases).

### Создание DivConfiguration
Создайте и настройте в коде конфигурацию `DivConfiguration`:
```Kotlin translate=no
    val imageLoader = PicassoImageLoader(..)
    val configuration = DivConfiguration.Builder(imageLoader).build()
```
`DivConfiguration` имеет только один обязательный параметр — `imageLoader: DivImageLoader`. Вы можете реализовать свой загрузчик, либо использовать одну из наших иплементаций:
- `PicassoImageLoader`
- `GlideImageLoader`
- `CoilImageLoader`

Зависимости для их использования нужно добавить отдельно: 
```Gradle translate=no
    implementation 'com.yandex.div:picasso:$version' 
    implementation 'com.yandex.div:glide:$version'
    implementation 'com.yandex.div:coil:$version'
```

Все загрузчики изображений поддерживают формат SVG. Если основной загрузчик не поддерживает SVG, система автоматически использует SVG-загрузчик для соответствующих изображений.

### Создание DivData {#create-div-data}
Верстка в DivKit состоит из двух основных блоков — шаблоны и сама карточка. Они могут приходить как отдельно друг от друга, так и быть в одном JSON файле. Рассмотрим пример, когда пришедшая верстка имеет такую структуру:
```json translate=no
{
    "templates": { ... шаблоны ... },
    "card": { ... карточка ...}
}
```
Тогда метод для обработки `DivData` будет выглядеть так:
```Kotlin translate=no
fun JSONObject.asDiv2DataWithTemplates(): DivData {
    val templates = getJSONObject("templates")
    val card = getJSONObject("card")
    val environment = DivParsingEnvironment(ParsingErrorLogger.LOG)
    environment.parseTemplates(templates)
    return DivData(environment, card)
}
```

### Обработка карточки и вывод на экран
Выведем на экран небольшой текст:
```Kotlin translate=no
val card = """
{
    "card": {
        "log_id": "text",
        "states": [
            {
                "state_id": 0,
                "div": {
                    "type": "text",
                    "text": "Hello, DivKit!"
                }
            }
        ]
    }
}
""".trimIndent()
```
 
Теперь соберем все описанное выше воедино и добавим View в иерархию:
```Kotlin translate=no
    val divData = JSONObject(card).asDiv2DataWithTemplates()
    val div2View = Div2View(Div2Context(context, configuration, lifecyclerOwner))
    yourViewGroup.addView(div2View)
    div2View.setData(divData, DivDataTag("your_unique_tag_here"))
```

Если все сделано без ошибок, на экране появится надпись «Hello, DivKit!».

{% cut "Посмотреть интерактивный пример" %}

<iframe src="https://yastatic.net/s3/home/divkit/docs/1.0.8/index.html?url=https://yastatic.net/s3/home/divkit/doc_samples/common/quickstart_1.json" width="700" height="500" frameborder="1"></iframe>

{% endcut %}

## Обработка действий пользователя
Чтобы сделать интерфейс интерактивным, добавьте обработку [действия](https://divkit.tech/docs/ru/concepts/interaction.md). Для примера превратим текст в интерактивную кнопку, при нажатии которой появится всплывающая подсказка.

### Модификация JSON
В DivKit сознательно нет таких высокоуровневых сущностей, как, например, «карточка товара» или «кнопка». Кнопкой может быть любой элемент. Для этого изменим внешний вид надписи и добавим действие при нажатии:

{% cut "Посмотреть интерактивный пример" %}

<iframe src="https://yastatic.net/s3/home/divkit/docs/1.0.8/index.html?url=https://yastatic.net/s3/home/divkit/doc_samples/common/quickstart_2.json" width="700" height="500" frameborder="1"></iframe>

{% endcut %}

В примере изменили внешний вид: добавили скругление углов и отступы, поменяли цвет фона и текста, добавили анимацию при нажатии, поменяли расположение текста внутри View. И главное — добавили действие при нажатии:
```json translate=no
    "actions": [
        {
            "log_id": "button_pressed",
            "url": "notification://show-toast?text=Hello%2C%20DivKit%21"
        }
    ]
```

### Поддержка нового действия на уровне кода в Android
Чтобы обрабатывать новые типы действий, нужно реализовать свою имплементацию `DivActionHandler` и добавить его в `DivConfiguration`.
Начнем с имплементации `DivActionHandler`:
```Kotlin translate=no
class NotificationDivActionHandler(): DivActionHandler() {
    override fun handleAction(action: DivAction, view: DivViewFacade): Boolean {
        if (super.handleAction(action, view)) {
            return true
        }

        val uri = action.url?.evaluate(view.expressionResolver) ?: return false
        if (uri.authority != "show-toast" || uri.scheme != "notification") return false
        val text = uri.getQueryParameter("text") ?: return false
        
        Toast.makeText(view.view.context, text, Toast.LENGTH_LONG).show()
        return true
    }
}
```

Мы вызываем метод `super.handleAction(action, view)`, чтобы действия по умолчанию продолжали работать. Если действие еще не обработано, пытаемся его определить и показать уведомление.

Теперь нужно добавить  `NotificationDivActionHandler()` в конфигурацию:
```Kotlin translate=no
    val configuration = DivConfiguration.Builder(imageLoader)
        .actionHandler(NotificationDivActionHandler())
        .build()
```

Так можно повлиять из JSON-верстки не только на состояние самой карточки, но и на все приложение.

![](../_images/quickstart/hello-divkit-android.gif =250x)

## Пример проекта

Готовый к запуску пример доступен на [GitHub](https://github.com/divkit/divkit/tree/main/client/android/sample): минималистичное приложение с базовой интеграцией DivKit, кастомными шрифтами, обработчиком действий и расширениями (Rive, Markdown, pinch-to-zoom).

<!-- source: ru/_includes/index/troubleshooting.md -->
## Узнать больше {#troubleshooting}

Вы можете обсуждать интересующие вас темы в сообществе пользователей DivKit в Telegram: [https://t.me/divkit_community_ru](https://t.me/divkit_community_ru).



[Репозиторий DivKit](https://github.com/divkit/divkit)




<!-- endsource: ru/_includes/index/troubleshooting.md -->
