Добавление зависимостей

Последнее обновление: 21.04.2024

Как было сказано в прошлой теме, все зависимости, которые использует проект, должны быть указаны в секции dependencies файла сборки Gradle уровня модуля. Например, в проекте по умолчанию есть модуль app, для которого автоматически создается файл build.gradle.kts (Module :app). Соответственно все зависимости этого модуля добавляются в этот файл. Рассмотрим небольшой пример. Например, в приложении Jetpack Compose можно применять класс ViewModel, который является посредником между данными и пользовательским интерфейсом. И через ViewModel идет взаимодействие между данными и графическим интерфейсом. Но для полноценной работы с ViewModel необходимо добавить соответствующую зависимость. Чтобы было понятно, о чем речь, привиду минимальный код:

package com.example.testapp

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewmodel.compose.viewModel

class AppViewModel : ViewModel()

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val vm: AppViewModel = viewModel()
        }
    }
}

Здесь мы определяем класс AppViewModel. Затем создаем его переменную. Для создания переменной используется функция viewModel(). Она эта функция недоступна:

Добавление зависимостей в проект Jetpack Compose в Android Studio

В проект по умолчанию уже подключается некоторый набор базовых зависимостей, но эти зависимости не содержат функцию viewModel(). И всплывающая подксказка говорит нам, что нам нужно добавить зависимость "androidx.lifecycle:lifecycle-viewmodel-compose". Есть два способа добавления зависимостей. Рассмотрим оба из них.

Добавление зависимости напрямую в build.gradle.kts

Раньше зависимости добавлялись напрямую в файл build.gradle.kts уровня модуля в секцию dependecies. Так, откроем файл build.gradle.kts (Module :app)

Добавление ViewModel в проект Jetpack Compose на Kotlin на Android

В этом файле ближе к низу найдем секцию dependencies, которая хранит добавленные в проект зависимости и которая выглядит примерно следующим образом:

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.lifecycle.runtime.ktx)
    implementation(libs.androidx.activity.compose)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.ui)
    implementation(libs.androidx.ui.graphics)
    implementation(libs.androidx.ui.tooling.preview)
    implementation(libs.androidx.material3)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    androidTestImplementation(platform(libs.androidx.compose.bom))
    androidTestImplementation(libs.androidx.ui.test.junit4)
    debugImplementation(libs.androidx.ui.tooling)
    debugImplementation(libs.androidx.ui.test.manifest)
}

Внутрь этой секции, например, самое начало добавим строку

implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")

То есть в итоге получится

dependencies {

    implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0")

    implementation(libs.androidx.core.ktx)
    // остальные зависимости
    ........................................

}

Для добавления библиотек может применяться вызов implementation, в который передается добавляемая зависимость в формате:

implementation("имя_библиотеки:версия_библиотеки")

То есть мы добавляем в качестве зависимости библиотеку "androidx.lifecycle:lifecycle-viewmodel-compose" версии 2.7.0. И чтобы изменения в файле Gradle были применены, нажмем на кнопку Sync Now

Добавление зависимости viewModel в проект Jetpack Compose на Kotlin на Android

После этого мы сможем спокойно использовать функцию viewModel и другую функциональность подключенной библиотеки.

Использование каталога версий

Хотя мы можем использовать способ, описанный выше, но в настоящее время также используется другой подход с управлением библиотеками и их версиями в каталог версий. Так, откроем файл каталога версий libs.versions.toml

Добавление зависимости в libs.versions.toml в проект Jetpack Compose на Kotlin на Android

Перейдем к секции [libraries] в этом файле. По умочланию он выглядит примерно следующим образом:

[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3" }

В эту секции (в конец или в начало) добавим строку

androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleRuntimeKtx" }

Например, при добавлении в начало получится примерно так:

[libraries]
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleRuntimeKtx" }

androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
junit = { group = "junit", name = "junit", version.ref = "junit" }

Далее в файл build.gradle.kts (Module :app) в секцию dependencies добавим саму зависимость

dependencies {
    implementation(libs.androidx.lifecycle.viewmodel.compose)
    ...................................

И для синхронизации проекта также нажмем на кнопку "Sync Now":

Добавление зависимости в Gradle в проекте Jetpack Compose на Kotlin на Android

Добавление зависимости с установкой версии

В предыдущем примере библиотека "androidx-lifecycle-viewmodel-compose" использовала ту же версию, что и библиотека "androidx-lifecycle-runtime-ktx" - они обе ссылались на одно и то же имя - "lifecycleRuntimeKtx", поскольку они используются вместе

[libraries]
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleRuntimeKtx" }
................................
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }

И для этого имени в секции [versions] устанавливалась версия 2.7.0:

[versions]
.............................
lifecycleRuntimeKtx = "2.7.0" # версия библиотек

Для других библиотек можно указать свою версию. Например, возьмем библиотеку Room, которая используется для взаимодействия с базой данных. Для ее добавления в файле libs.versions.toml в секции [libraries] сначала укажем саму библиотеку:

[libraries]
............................
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" }

Далее в секции [versions] укажем версию этой библиотеки:

[versions]
..................
roomRuntime = "2.6.1"

Наконец, в файле подключим эту зависимость:

dependencies {
    implementation(libs.androidx.room.runtime)

}

И для синхронизации конфигурации с проектом нажмем на кнопку "Sync Now"

Обновление зависимостей

Если вдруг появится новая версия какой-то библиотеки, то мы увидим соответствующее уведомление в файле libs.versions.toml

Обновление зависимостей Gradle в проекте Jetpack Compose на Kotlin на Android
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850