Movies Database

Add Android SDK and JDK to version catalog

Each of the modules contains its own build.gradle.kts. There are several versions listed in these modules, and it's a good idea to keep them in sync. To do this, we'll add them to our version catalog and reference them in the build scripts.

First, we add the versions we want to use to the version catalog. Note that you should use the versions specified in Course Hardware and Software.

We can do something similar for the Java versions

show in full file gradle/libs.versions.toml
[versions]
// ...
ksp = "2.0.21-1.0.28"

compileSdk = "35"
targetSdk = "35"
minSdk = "24"

jvmTarget = "11"
javaVersion = "VERSION_11"

[libraries]
// ...
[plugins]
// ...

Now we replace the hardcoded versions in app/build.gradle.kts, data/build.gradle.kts, and repository/build.gradle.kts. The changes in all three files will look the same.

show in full file app/build.gradle.kts
// ...
android {
    namespace = "com.androidbyexample.compose.movies"
//  compileSdk = 35
    compileSdk = libs.versions.compileSdk.get().toInt()

    defaultConfig {
        applicationId = "com.androidbyexample.compose.movies"
//      minSdk = 24
//      targetSdk = 35
        minSdk = libs.versions.minSdk.get().toInt()
        targetSdk = libs.versions.targetSdk.get().toInt()
        versionCode = 1
        versionName = "1.0"
        // ...
    }
    // ...
    }
    compileOptions {
//      sourceCompatibility = JavaVersion.VERSION_11
//      targetCompatibility = JavaVersion.VERSION_11
        sourceCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get())
        targetCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get())
    }
    kotlinOptions {
//      jvmTarget = "11"
        jvmTarget = libs.versions.jvmTarget.get()
    }
    buildFeatures {
        // ...
}
// ...

This helps ensure consistency and reduce maintenance burden over time.

At this point, nothing will visibly change in the application, but it should still build and run.


All code changes

CHANGED: app/build.gradle.kts
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.kotlin.android)
    alias(libs.plugins.kotlin.compose)
}

android { namespace = "com.androidbyexample.compose.movies" // compileSdk = 35 compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { applicationId = "com.androidbyexample.compose.movies" // minSdk = 24 // targetSdk = 35 minSdk = libs.versions.minSdk.get().toInt() targetSdk = libs.versions.targetSdk.get().toInt()
versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } }
compileOptions { // sourceCompatibility = JavaVersion.VERSION_11 // targetCompatibility = JavaVersion.VERSION_11 sourceCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get()) targetCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get()) } kotlinOptions { // jvmTarget = "11" jvmTarget = libs.versions.jvmTarget.get() }
buildFeatures { compose = true } } 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) }
CHANGED: data/build.gradle.kts
plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.kotlin.android)
alias(libs.plugins.ksp)
} android { namespace = "com.androidbyexample.compose.movies.data" // compileSdk = 34 compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { // minSdk = 24 minSdk = libs.versions.minSdk.get().toInt() testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { // sourceCompatibility = JavaVersion.VERSION_11 // targetCompatibility = JavaVersion.VERSION_11 sourceCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get()) targetCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get()) } kotlinOptions { // jvmTarget = "11" jvmTarget = libs.versions.jvmTarget.get() } } dependencies { implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material)
implementation(libs.room.runtime) implementation(libs.room.ktx) ksp(libs.room.compiler)
testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) }
CHANGED: gradle/libs.versions.toml
[versions]
agp = "8.7.3"
kotlin = "2.0.21"
coreKtx = "1.15.0"
junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
lifecycleRuntimeKtx = "2.8.7"
activityCompose = "1.9.3"
composeBom = "2024.12.01"
appcompat = "1.7.0"
material = "1.12.0"
room = "2.6.1" ksp = "2.0.21-1.0.28"
compileSdk = "35" targetSdk = "35" minSdk = "24"
jvmTarget = "11" javaVersion = "VERSION_11"
[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-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } material = { group = "com.google.android.material", name = "material", version.ref = "material" }
room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" }
[plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } android-library = { id = "com.android.library", version.ref = "agp" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
CHANGED: repository/build.gradle.kts
plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.kotlin.android)
}

android {
    namespace = "com.androidbyexample.compose.movies.repository"
//  compileSdk = 34
    compileSdk = libs.versions.compileSdk.get().toInt()

    defaultConfig {
//      minSdk = 24
        minSdk = libs.versions.minSdk.get().toInt()

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles("consumer-rules.pro")
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
//      sourceCompatibility = JavaVersion.VERSION_11
//      targetCompatibility = JavaVersion.VERSION_11
        sourceCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get())
        targetCompatibility = JavaVersion.valueOf(libs.versions.javaVersion.get())
    }
    kotlinOptions {
//      jvmTarget = "11"
        jvmTarget = libs.versions.jvmTarget.get()
    }
}

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.appcompat)
    implementation(libs.material)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
}