Skip to content

Commit e431ecf

Browse files
committed
[feat/#8] implement build-logic module, custom convention plugin
- android application - compose - android library - build config - hilt - java library - data, feature
1 parent edf2de1 commit e431ecf

25 files changed

+579
-113
lines changed

app/build.gradle.kts

+4-84
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,8 @@
1+
12
plugins {
3+
alias(libs.plugins.kotlin.android)
24
alias(libs.plugins.android.application)
3-
alias(libs.plugins.jetbrains.kotlin.android)
4-
alias(libs.plugins.ktlint)
5-
alias(libs.plugins.detekt)
6-
alias(libs.plugins.spotless)
7-
}
8-
9-
val ktlintVersion = "0.50.0"
10-
11-
android {
12-
namespace = "com.nexters.misik"
13-
compileSdk = 35
14-
15-
defaultConfig {
16-
applicationId = "com.nexters.misik"
17-
minSdk = 24
18-
targetSdk = 35
19-
versionCode = 1
20-
versionName = "1.0"
21-
22-
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
23-
vectorDrawables {
24-
useSupportLibrary = true
25-
}
26-
}
27-
28-
buildTypes {
29-
release {
30-
isMinifyEnabled = false
31-
proguardFiles(
32-
getDefaultProguardFile("proguard-android-optimize.txt"),
33-
"proguard-rules.pro",
34-
)
35-
}
36-
}
37-
compileOptions {
38-
sourceCompatibility = JavaVersion.VERSION_17
39-
targetCompatibility = JavaVersion.VERSION_17
40-
}
41-
kotlinOptions {
42-
jvmTarget = "17"
43-
}
44-
buildFeatures {
45-
compose = true
46-
}
47-
composeOptions {
48-
kotlinCompilerExtensionVersion = "1.5.1"
49-
}
50-
packaging {
51-
resources {
52-
excludes += "/META-INF/{AL2.0,LGPL2.1}"
53-
}
54-
}
55-
}
56-
57-
dependencies {
58-
59-
implementation(libs.androidx.core.ktx)
60-
implementation(libs.androidx.lifecycle.runtime.ktx)
61-
implementation(libs.androidx.activity.compose)
62-
implementation(platform(libs.androidx.compose.bom))
63-
implementation(libs.androidx.ui)
64-
implementation(libs.androidx.ui.graphics)
65-
implementation(libs.androidx.ui.tooling.preview)
66-
implementation(libs.androidx.material3)
67-
testImplementation(libs.junit)
68-
androidTestImplementation(libs.androidx.junit)
69-
androidTestImplementation(libs.androidx.espresso.core)
70-
androidTestImplementation(platform(libs.androidx.compose.bom))
71-
androidTestImplementation(libs.androidx.ui.test.junit4)
72-
debugImplementation(libs.androidx.ui.tooling)
73-
debugImplementation(libs.androidx.ui.test.manifest)
74-
}
75-
76-
detekt {
77-
config.from("${projectDir}/config/detekt/detekt-config.yml")
78-
buildUponDefaultConfig = true
79-
debug = true
80-
}
5+
alias(libs.plugins.misik.application)
6+
alias(libs.plugins.misik.android.hilt)
817

82-
spotless {
83-
kotlin {
84-
target("**/*.kt")
85-
targetExclude("**/build/**/*.kt")
86-
ktlint(ktlintVersion)
87-
}
888
}

build-logic/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build

build-logic/convention/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/build
+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
plugins {
2+
`kotlin-dsl`
3+
}
4+
5+
group = "com.nexters.misik.convention"
6+
7+
java {
8+
sourceCompatibility = JavaVersion.VERSION_17
9+
targetCompatibility = JavaVersion.VERSION_17
10+
}
11+
12+
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
13+
kotlinOptions {
14+
jvmTarget = "17"
15+
}
16+
}
17+
18+
19+
dependencies {
20+
compileOnly(libs.android.gradle.plugin)
21+
compileOnly(libs.kotlin.gradle.plugin)
22+
compileOnly(libs.ksp.gradle.plugin)
23+
compileOnly(libs.compose.compiler.extension)
24+
}
25+
26+
gradlePlugin {
27+
plugins {
28+
register("androidApplication") {
29+
id = "misik.android.application"
30+
implementationClass = "AndroidApplicationPlugin"
31+
}
32+
33+
register("misikFeature") {
34+
id = "misik.feature"
35+
implementationClass = "misikFeaturePlugin"
36+
}
37+
38+
register("misikData") {
39+
id = "misik.data"
40+
implementationClass = "misikDataPlugin"
41+
}
42+
43+
register("androidLibrary") {
44+
id = "misik.android.library"
45+
implementationClass = "AndroidLibraryPlugin"
46+
}
47+
48+
register("androidComposeLibrary") {
49+
id = "misik.android.compose.library"
50+
implementationClass = "AndroidComposeLibraryPlugin"
51+
}
52+
53+
register("androidHilt") {
54+
id = "misik.android.hilt"
55+
implementationClass = "HiltPlugin"
56+
}
57+
58+
register("javaLibrary") {
59+
id = "misik.java.library"
60+
implementationClass = "JavaLibraryPlugin"
61+
}
62+
63+
register("buildConfig") {
64+
id = "misik.plugin.build.config"
65+
implementationClass = "BuildConfigPlugin"
66+
}
67+
68+
register("androidTest") {
69+
id = "misik.plugin.android.test"
70+
implementationClass = "AndroidTestPlugin"
71+
}
72+
}
73+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import com.nexters.misik.convention.configureAndroidCompose
3+
import com.nexters.misik.convention.configureKotlinAndroid
4+
import com.nexters.misik.convention.extension.getLibrary
5+
import com.nexters.misik.convention.extension.getVersion
6+
import com.nexters.misik.convention.extension.implementation
7+
import com.nexters.misik.convention.extension.libs
8+
import org.gradle.api.Plugin
9+
import org.gradle.api.Project
10+
import org.gradle.kotlin.dsl.configure
11+
import org.gradle.kotlin.dsl.dependencies
12+
13+
internal class AndroidApplicationPlugin : Plugin<Project> {
14+
override fun apply(target: Project) {
15+
with(target) {
16+
with(pluginManager) {
17+
apply("com.android.application")
18+
}
19+
20+
extensions.configure<ApplicationExtension> {
21+
configureKotlinAndroid(this)
22+
configureAndroidCompose(this)
23+
with(defaultConfig) {
24+
targetSdk = libs.getVersion("targetSdk").requiredVersion.toInt()
25+
versionCode = libs.getVersion("versionCode").requiredVersion.toInt()
26+
versionName = libs.getVersion("versionName").requiredVersion
27+
}
28+
}
29+
30+
dependencies {
31+
implementation(libs.getLibrary("timber"))
32+
}
33+
}
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import com.android.build.gradle.LibraryExtension
2+
import com.nexters.misik.convention.configureAndroidCompose
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.configure
6+
7+
class AndroidComposeLibraryPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
with(pluginManager) {
11+
apply("misik.android.compose.library")
12+
}
13+
14+
extensions.configure<LibraryExtension> {
15+
configureAndroidCompose(this)
16+
}
17+
}
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import com.android.build.gradle.LibraryExtension
2+
import com.nexters.misik.convention.configureKotlinAndroid
3+
import com.nexters.misik.convention.configureKotlinCoroutine
4+
import com.nexters.misik.convention.extension.getLibrary
5+
import com.nexters.misik.convention.extension.implementation
6+
import com.nexters.misik.convention.extension.libs
7+
import org.gradle.api.Plugin
8+
import org.gradle.api.Project
9+
import org.gradle.kotlin.dsl.configure
10+
import org.gradle.kotlin.dsl.dependencies
11+
12+
class AndroidLibraryPlugin : Plugin<Project> {
13+
override fun apply(target: Project) {
14+
with(target) {
15+
with(pluginManager) {
16+
apply("com.android.library")
17+
}
18+
19+
extensions.configure<LibraryExtension> {
20+
configureKotlinAndroid(this)
21+
configureKotlinCoroutine(this)
22+
}
23+
24+
dependencies {
25+
implementation(libs.getLibrary("timber"))
26+
}
27+
}
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import com.android.build.gradle.LibraryExtension
2+
import com.nexters.misik.convention.configureBuildConfig
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.configure
6+
7+
class BuildConfigPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
extensions.configure<LibraryExtension> {
11+
configureBuildConfig(this)
12+
}
13+
}
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import com.nexters.misik.convention.Const
2+
import com.nexters.misik.convention.extension.getLibrary
3+
import com.nexters.misik.convention.extension.getVersion
4+
import com.nexters.misik.convention.extension.implementation
5+
import com.nexters.misik.convention.extension.libs
6+
import org.gradle.api.Plugin
7+
import org.gradle.api.Project
8+
import org.gradle.api.plugins.JavaPluginExtension
9+
import org.gradle.kotlin.dsl.configure
10+
import org.gradle.kotlin.dsl.dependencies
11+
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
12+
13+
class JavaLibraryPlugin : Plugin<Project> {
14+
override fun apply(target: Project) {
15+
with(target) {
16+
with(pluginManager) {
17+
apply("java-library")
18+
apply("org.jetbrains.kotlin.jvm")
19+
}
20+
21+
extensions.configure<JavaPluginExtension> {
22+
sourceCompatibility = Const.JAVA_VERSION
23+
targetCompatibility = Const.JAVA_VERSION
24+
}
25+
26+
extensions.configure<KotlinProjectExtension> {
27+
jvmToolchain(libs.getVersion("jdkVersion").requiredVersion.toInt())
28+
}
29+
30+
dependencies {
31+
implementation(libs.getLibrary("javax.inject"))
32+
}
33+
}
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
4+
class MisikDataPlugin : Plugin<Project> {
5+
override fun apply(target: Project) {
6+
with(target) {
7+
with(pluginManager) {
8+
apply("misik.android.library")
9+
apply("misik.android.hilt")
10+
}
11+
}
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import com.nexters.misik.convention.extension.implementation
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.kotlin.dsl.dependencies
5+
6+
class MisikFeaturePlugin : Plugin<Project> {
7+
override fun apply(target: Project) {
8+
with(target) {
9+
with(pluginManager) {
10+
apply("misik.android.compose.library")
11+
apply("misik.android.hilt")
12+
}
13+
14+
dependencies {
15+
16+
}
17+
}
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import com.android.build.api.dsl.LibraryExtension
2+
import com.nexters.misik.convention.extension.getLibrary
3+
import com.nexters.misik.convention.extension.libs
4+
import com.nexters.misik.convention.extension.testImplementation
5+
import org.gradle.api.Plugin
6+
import org.gradle.api.Project
7+
import org.gradle.kotlin.dsl.configure
8+
import org.gradle.kotlin.dsl.dependencies
9+
10+
class UnitTestPlugin : Plugin<Project> {
11+
override fun apply(target: Project) {
12+
with(target) {
13+
dependencies {
14+
testImplementation(libs.getLibrary("kotlinx.coroutines.test"))
15+
testImplementation(libs.getLibrary("mockito"))
16+
testImplementation(libs.getLibrary("junit"))
17+
testImplementation(libs.getLibrary("robolectric"))
18+
}
19+
20+
extensions.configure<LibraryExtension> {
21+
testOptions {
22+
unitTests {
23+
isIncludeAndroidResources = true
24+
}
25+
}
26+
}
27+
}
28+
}
29+
}

0 commit comments

Comments
 (0)