Blog top image

Gradle file


সিঙ্গেল মডিউল এনড্রয়েড অ্যাপে দুটা build.gradle.kts ফাইল থাকে ।

- একেবারে টপ লেভেলে যে  build.gradle.kts ফাইল থাকে তাঁকে প্রজেক্ট গ্রাডেল ফাইল বলে

- app/build.gradle.kts ফাইলকে অ্যাপ মডিউল এর গ্রাডেল ফাইল বলে 

- এছাড়া টপ  লেভেলে settings.gradle.kts ফাইল থাকে 


settings.gradle.kts ফাইল

এই ফাইলে মূলত

- প্লাগিন ম্যানেজমেন্ট মানে প্লাগিন এর রিপোজিটরি বলে দেয়া হয় 

- ডিপেন্ডেন্সি ম্যানেজমেন্ট মানে  ডিপেন্ডেন্সি এর রিপোজিটরি বলে দেয়া হয়   এবং

- প্রজেক্ট এর নাম এবং সব মডিউলকে এখানে ইনক্লুড করা হয় 

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "Memory App"
include(":app")


টপ লেভেল  build.gradle.kts ফাইল

এই ফাইলে কিছু প্লাগিন ডিক্লার করা হয় তবে মূলত তাদেরকে অকার্যকর অবস্থায় রাখা হয় এবং মডিউল build.gradle.kts গিয়ে তাদেরকে একটিভ করা হয়

plugins {
id("com.android.application") version "8.2.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.22" apply false
id("com.google.dagger.hilt.android") version "2.50" apply false
}


মডিউল  build.gradle.kts ফাইলক

এটা হলো মোস্ট ইমপোর্টেন্ট build.gradle.kts ফাইল। এই ফাইলের টপ লেভেলে মূলত তিনটা জিনিষ থাকে আরো বেশি জিনিষ থাকতে পারে 

plugins {  }

android {  }

dependencies {   }


plugins

plugin এর ভিতর মূলত প্লাগিন এর ডিকারেশন থাকে 

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
    id("dagger.hilt.android.plugin")
    kotlin("kapt")
}


android

এর ভিতর মূলত এনড্রয়েড স্পেসিফিক সেটিং থাকে। যেমন অ্যাপ এর এপ্লিকেশন আইডি, মিনিমাম SDK, টার্গেট SDK, Kotlin ভার্সন,  কম্পাইল অপশন ইত্যাদি। 

android {
    namespace = "com.marufh.memory"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.marufh.memory"
        minSdk = 26
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {       
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
    buildFeatures {
        compose = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.10"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}


dependencies

এর ভিতর মূলত অ্যাপ এর ডিপেন্ডেন্সি এর তালিকা থাকে 

dependencies {

    implementation(platform("androidx.compose:compose-bom:2024.03.00"))
    implementation("androidx.core:core-ktx:1.12.0")

    // Livecycle
    implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
    implementation("androidx.activity:activity-compose:1.8.2")

    // Compose UI
    implementation("androidx.compose.ui:ui")
    implementation("androidx.compose.ui:ui-graphics")
    implementation("androidx.compose.ui:ui-tooling-preview")
    implementation("androidx.compose.material3:material3")
    implementation("androidx.navigation:navigation-compose:2.7.7")

    // Coil async image loading
    implementation("io.coil-kt:coil-compose:2.6.0")

    // Retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
    implementation("com.squareup.okhttp3:okhttp:4.12.0")
    implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
    implementation("com.google.code.gson:gson:2.10")

    // DataStore
    implementation("androidx.datastore:datastore-preferences:1.0.0")

    // Hilt
    kapt("com.google.dagger:hilt-compiler:2.50")
    implementation("com.google.dagger:hilt-android:2.50")
    implementation("androidx.hilt:hilt-navigation-compose:1.2.0")


    // Chip text field
    implementation("io.github.dokar3:chiptextfield-m3:0.6.5")
}


এর বাইরে যেহেতু kapt প্লাগিন ব্যবহার করেছি, তাই এর একটা একটা সেটিং বলে দিতে হবে 

kapt {
    correctErrorTypes = true
}