diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..3aae2af --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,22 @@ +plugins { + id("com.android.application") + `android-default-config` +} + +android { + defaultConfig { + applicationId = Android.id + versionCode = Android.versionCode + versionName = Android.versionName + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + dataBinding = true + } +} + +dependencies { + implementation("androidx.constraintlayout:constraintlayout:2.1.1") +} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..8beae5d --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,29 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + google() + mavenCentral() + maven("https://plugins.gradle.org/m2/") + } + dependencies { + classpath("com.android.tools.build:gradle:4.2.2") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31") + classpath("org.jlleitschuh.gradle:ktlint-gradle:10.2.0") + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle.kts files + } +} + +allprojects { + plugins.apply("org.jlleitschuh.gradle.ktlint") + + repositories { + google() + mavenCentral() + } +} + +task("clean", Delete::class) { + delete = setOf(rootProject.buildDir) +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..5df3424 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,32 @@ +plugins{ + `kotlin-dsl` + `kotlin-dsl-precompiled-script-plugins` +} +val androidGradleVersion = "4.2.2" +val kotlinVersion = "1.5.31" + +val compileKotlin: org.jetbrains.kotlin.gradle.tasks.KotlinCompile by tasks +compileKotlin.kotlinOptions { + languageVersion = kotlinVersion +} + +gradlePlugin { + plugins { + register("android-default-config") { + id = "android-default-config" + implementationClass = "place.pic.android.plus.scripts.CommonConfig" + } + } +} + +repositories { + google() + mavenCentral() +} + +dependencies { + implementation("com.android.tools.build:gradle:$androidGradleVersion") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + implementation(gradleApi()) + implementation(localGroovy()) +} diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt new file mode 100644 index 0000000..8b5bbbd --- /dev/null +++ b/buildSrc/src/main/java/Dependencies.kt @@ -0,0 +1,43 @@ +object Android { + // android + const val id = "place.pic.android.plus" + const val minSdk = 26 + const val targetSdk = 31 + const val versionCode = 1 + const val versionName = "1.0" +} + +object Libs { + const val gradle = "com.android.tools.build:gradle:${Versions.gradle}" + + const val coreKtx = "androidx.core:core-ktx:${Versions.coreKtx}" + const val appcompat = "androidx.appcompat:appcompat:${Versions.appcompat}" + const val material = "com.google.android.material:material:${Versions.material}" + + object Hilt { + const val hiltPlugin = "com.google.dagger:hilt-android-gradle-plugin:${Versions.hilt}" + const val hiltAndroid = "com.google.dagger:hilt-android:${Versions.hilt}" + const val hiltCompiler = "com.google.dagger:hilt-compiler:${Versions.hilt}" + } + + object Lifecycle { + const val viewModel = + "androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.lifecycle_version}" + const val liveData = + "androidx.lifecycle:lifecycle-livedata-ktx:${Versions.lifecycle_version}" + const val lifecycleCompiler = + "androidx.lifecycle:lifecycle-common-java8:${Versions.lifecycle_version}" + } + + object Kotlin { + const val gradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}" + const val coroutine = + "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.coroutine}" + } +} + +object TestLib { + const val junit = "junit:junit:${Versions.junit}" + const val extJunit = "androidx.test.ext:junit:${Versions.extJunit}" + const val espresso = "androidx.test.espresso:espresso-core:${Versions.espresso}" +} diff --git a/buildSrc/src/main/java/Versions.kt b/buildSrc/src/main/java/Versions.kt new file mode 100644 index 0000000..7e6c2f1 --- /dev/null +++ b/buildSrc/src/main/java/Versions.kt @@ -0,0 +1,26 @@ +object Versions { + // gradle + const val gradle = "7.0.2" + + // androidx + const val coreKtx = "1.6.0" + const val appcompat = "1.3.1" + + // material + const val material = "1.4.0" + + // hilt + const val hilt = "2.39.1" + + // lifecycle + const val lifecycle_version = "2.4.0-rc01" + + // kotlin + const val kotlin = "1.5.31" + const val coroutine = "1.3.9" + + // test + const val junit = "4.13.2" + const val extJunit = "1.1.3" + const val espresso = "3.4.0" +} diff --git a/buildSrc/src/main/java/place/pic/android/plus/scripts/CommonConfig.kt b/buildSrc/src/main/java/place/pic/android/plus/scripts/CommonConfig.kt new file mode 100644 index 0000000..dc32af7 --- /dev/null +++ b/buildSrc/src/main/java/place/pic/android/plus/scripts/CommonConfig.kt @@ -0,0 +1,65 @@ +package place.pic.android.plus.scripts + +import com.android.build.gradle.BaseExtension +import org.gradle.api.JavaVersion +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.getByType + +class CommonConfig : Plugin { + override fun apply(target: Project) { + with(target) { + plugins.apply("kotlin-android") + + configAndroidBlock() + configDependencies() + configTestDependencies() + } + } + + private fun Project.configAndroidBlock() = this.extensions.getByType() + .run { + compileSdkVersion(Android.targetSdk) + + defaultConfig { + minSdkVersion(Android.minSdk) + targetSdkVersion(Android.targetSdk) + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFile("consumer-rules.pro") + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + buildTypes { + getByName("release") { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + } + + private fun Project.configDependencies() = this.extensions.getByType() + .run { + dependencies { + add("implementation", Libs.coreKtx) + add("implementation", Libs.appcompat) + add("implementation", Libs.material) + } + } + + private fun Project.configTestDependencies() = this.extensions.getByType() + .run { + dependencies { + add("testImplementation", TestLib.junit) + add("androidTestImplementation", TestLib.extJunit) + add("androidTestImplementation", TestLib.espresso) + } + } +} diff --git a/settings.gradle b/settings.gradle.kts similarity index 66% rename from settings.gradle rename to settings.gradle.kts index 48ab84b..7bf43bc 100644 --- a/settings.gradle +++ b/settings.gradle.kts @@ -1,2 +1,2 @@ rootProject.name = "AssignmentMVVM" -include ':app' +include(":app")