Skip to content

Commit 8186d63

Browse files
authored
Merge pull request #210 from rainxchzed/multi-module
2 parents 58fd809 + a3e63a0 commit 8186d63

467 files changed

Lines changed: 9582 additions & 4892 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import org.gradle.kotlin.dsl.compileOnly
2+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
3+
4+
plugins {
5+
`kotlin-dsl`
6+
}
7+
8+
group = "zed.rainxch.convention.buildlogic"
9+
10+
dependencies {
11+
compileOnly(libs.android.gradlePlugin)
12+
compileOnly(libs.android.tools.common)
13+
compileOnly(libs.kotlin.gradlePlugin)
14+
compileOnly(libs.compose.gradlePlugin)
15+
compileOnly(libs.androidx.room.gradle.plugin)
16+
17+
implementation(libs.buildkonfig.gradlePlugin)
18+
implementation(libs.buildkonfig.compiler)
19+
}
20+
21+
java {
22+
sourceCompatibility = JavaVersion.VERSION_17
23+
targetCompatibility = JavaVersion.VERSION_17
24+
}
25+
26+
kotlin {
27+
compilerOptions {
28+
jvmTarget = JvmTarget.JVM_17
29+
}
30+
}
31+
32+
tasks {
33+
validatePlugins {
34+
enableStricterValidation = true
35+
failOnWarning = true
36+
}
37+
}
38+
39+
gradlePlugin {
40+
plugins {
41+
register("androidApplication") {
42+
id = "zed.rainxch.convention.android.application"
43+
implementationClass = "AndroidApplicationConventionPlugin"
44+
}
45+
register("androidComposeApplication") {
46+
id = "zed.rainxch.convention.android.application.compose"
47+
implementationClass = "AndroidApplicationComposeConventionPlugin"
48+
}
49+
register("cmpApplication") {
50+
id = "zed.rainxch.convention.cmp.application"
51+
implementationClass = "CmpApplicationConventionPlugin"
52+
}
53+
register("kmpLibrary") {
54+
id = "zed.rainxch.convention.kmp.library"
55+
implementationClass = "KmpLibraryConventionPlugin"
56+
}
57+
register("cmpLibrary") {
58+
id = "zed.rainxch.convention.cmp.library"
59+
implementationClass = "CmpLibraryConventionPlugin"
60+
}
61+
register("cmpFeature") {
62+
id = "zed.rainxch.convention.cmp.feature"
63+
implementationClass = "CmpFeatureConventionPlugin"
64+
}
65+
register("buildKonfig") {
66+
id = "zed.rainxch.convention.buildkonfig"
67+
implementationClass = "BuildKonfigConventionPlugin"
68+
}
69+
register("room") {
70+
id = "zed.rainxch.convention.room"
71+
implementationClass = "RoomConventionPlugin"
72+
}
73+
}
74+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.kotlin.dsl.getByType
5+
import zed.rainxch.githubstore.convention.configureAndroidCompose
6+
7+
class AndroidApplicationComposeConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
with(pluginManager) {
11+
apply("zed.rainxch.convention.android.application")
12+
apply("org.jetbrains.kotlin.plugin.compose")
13+
}
14+
15+
val commonExtension = extensions.getByType<ApplicationExtension>()
16+
configureAndroidCompose(commonExtension)
17+
}
18+
}
19+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import com.android.build.api.dsl.ApplicationExtension
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.kotlin.dsl.configure
5+
import zed.rainxch.githubstore.convention.configureKotlinAndroid
6+
import zed.rainxch.githubstore.convention.libs
7+
8+
class AndroidApplicationConventionPlugin : Plugin<Project> {
9+
override fun apply(target: Project) {
10+
with(target) {
11+
with(pluginManager) {
12+
apply("com.android.application")
13+
}
14+
15+
extensions.configure<ApplicationExtension> {
16+
namespace = "zed.rainxch.githubstore"
17+
compileSdk = libs.findVersion("projectCompileSdkVersion").get().toString().toInt()
18+
19+
defaultConfig {
20+
applicationId = libs.findVersion("projectApplicationId").get().toString()
21+
minSdk = libs.findVersion("projectMinSdkVersion").get().toString().toInt()
22+
targetSdk = libs.findVersion("projectTargetSdkVersion").get().toString().toInt()
23+
versionCode = libs.findVersion("projectVersionCode").get().toString().toInt()
24+
versionName = libs.findVersion("projectVersionName").get().toString()
25+
}
26+
packaging {
27+
resources {
28+
excludes += "/META-INF/{AL2.0,LGPL2.1}"
29+
}
30+
}
31+
buildTypes {
32+
getByName("release") {
33+
isMinifyEnabled = false
34+
}
35+
}
36+
37+
configureKotlinAndroid(this)
38+
}
39+
}
40+
}
41+
42+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import com.codingfeline.buildkonfig.compiler.FieldSpec
2+
import com.codingfeline.buildkonfig.gradle.BuildKonfigExtension
3+
import org.gradle.api.Plugin
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.configure
6+
import zed.rainxch.githubstore.convention.libs
7+
import zed.rainxch.githubstore.convention.pathToPackageName
8+
import java.util.Properties
9+
10+
class BuildKonfigConventionPlugin : Plugin<Project> {
11+
override fun apply(target: Project) {
12+
with(target) {
13+
with(pluginManager) {
14+
apply("com.codingfeline.buildkonfig")
15+
}
16+
17+
extensions.configure<BuildKonfigExtension> {
18+
packageName = target.pathToPackageName()
19+
20+
defaultConfigs {
21+
val localProps = Properties().apply {
22+
val file = rootProject.file("local.properties")
23+
if (file.exists()) file.inputStream().use { this.load(it) }
24+
}
25+
26+
val githubClientId = (localProps.getProperty("GITHUB_CLIENT_ID")
27+
?: "Ov23linTY28VFpFjFiI9").trim()
28+
29+
val versionName = libs.findVersion("projectVersionName").get().toString()
30+
31+
buildConfigField(FieldSpec.Type.STRING, "GITHUB_CLIENT_ID", githubClientId)
32+
buildConfigField(FieldSpec.Type.STRING, "VERSION_NAME", versionName)
33+
}
34+
}
35+
}
36+
}
37+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
import org.gradle.kotlin.dsl.dependencies
4+
import zed.rainxch.githubstore.convention.configureAndroidTarget
5+
import zed.rainxch.githubstore.convention.configureJvmTarget
6+
import zed.rainxch.githubstore.convention.libs
7+
8+
class CmpApplicationConventionPlugin : Plugin<Project> {
9+
override fun apply(target: Project) {
10+
with(target) {
11+
with(pluginManager) {
12+
apply("zed.rainxch.convention.android.application.compose")
13+
apply("org.jetbrains.kotlin.multiplatform")
14+
apply("org.jetbrains.compose")
15+
apply("org.jetbrains.kotlin.plugin.compose")
16+
}
17+
18+
configureAndroidTarget()
19+
configureJvmTarget()
20+
21+
dependencies {
22+
"debugImplementation"(libs.findLibrary("androidx-compose-ui-tooling").get( ))
23+
}
24+
}
25+
}
26+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
import org.gradle.kotlin.dsl.dependencies
4+
import zed.rainxch.githubstore.convention.libs
5+
6+
class CmpFeatureConventionPlugin : Plugin<Project> {
7+
override fun apply(target: Project) {
8+
with(target) {
9+
with(pluginManager) {
10+
apply("zed.rainxch.convention.cmp.library")
11+
}
12+
13+
dependencies {
14+
"commonMainImplementation"(project(":core:presentation"))
15+
16+
"commonMainImplementation"(platform(libs.findLibrary("koin-bom").get()))
17+
"androidMainImplementation"(platform(libs.findLibrary("koin-bom").get()))
18+
19+
"commonMainImplementation"(libs.findLibrary("koin-compose").get())
20+
"commonMainImplementation"(libs.findLibrary("koin-compose-viewmodel").get())
21+
22+
"commonMainImplementation"(libs.findLibrary("jetbrains-compose-runtime").get())
23+
"commonMainImplementation"(libs.findLibrary("jetbrains-compose-viewmodel").get())
24+
"commonMainImplementation"(libs.findLibrary("jetbrains-lifecycle-viewmodel").get())
25+
"commonMainImplementation"(libs.findLibrary("jetbrains-lifecycle-compose").get())
26+
27+
"commonMainImplementation"(libs.findLibrary("jetbrains-lifecycle-viewmodel-savedstate").get())
28+
"commonMainImplementation"(libs.findLibrary("jetbrains-savedstate").get())
29+
"commonMainImplementation"(libs.findLibrary("jetbrains-bundle").get())
30+
"commonMainImplementation"(libs.findLibrary("jetbrains-compose-navigation").get())
31+
32+
"androidMainImplementation"(libs.findLibrary("koin-android").get())
33+
"androidMainImplementation"(libs.findLibrary("koin-androidx-compose").get())
34+
"androidMainImplementation"(libs.findLibrary("koin-androidx-navigation").get())
35+
"androidMainImplementation"(libs.findLibrary("koin-core-viewmodel").get())
36+
}
37+
}
38+
}
39+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import org.gradle.api.Plugin
2+
import org.gradle.api.Project
3+
import org.gradle.kotlin.dsl.dependencies
4+
import zed.rainxch.githubstore.convention.libs
5+
import kotlin.text.get
6+
7+
class CmpLibraryConventionPlugin : Plugin<Project> {
8+
override fun apply(target: Project) {
9+
with(target) {
10+
with(pluginManager) {
11+
apply("zed.rainxch.convention.kmp.library")
12+
apply("org.jetbrains.kotlin.plugin.compose")
13+
apply("org.jetbrains.compose")
14+
}
15+
16+
dependencies {
17+
"commonMainImplementation"(libs.findLibrary("jetbrains-compose-ui").get())
18+
"commonMainImplementation"(libs.findLibrary("jetbrains-compose-foundation").get())
19+
"commonMainImplementation"(libs.findLibrary("jetbrains-compose-material3").get())
20+
"commonMainImplementation"(libs.findLibrary("jetbrains-compose-material-icons-extended").get())
21+
22+
"debugImplementation"(libs.findLibrary("androidx-compose-ui-tooling").get())
23+
}
24+
}
25+
}
26+
27+
28+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import com.android.build.api.dsl.LibraryExtension
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.kotlin.dsl.configure
5+
import org.gradle.kotlin.dsl.dependencies
6+
import zed.rainxch.githubstore.convention.configureKotlinAndroid
7+
import zed.rainxch.githubstore.convention.configureKotlinMultiplatform
8+
import zed.rainxch.githubstore.convention.libs
9+
import zed.rainxch.githubstore.convention.pathToResourcePrefix
10+
11+
class KmpLibraryConventionPlugin : Plugin<Project> {
12+
override fun apply(target: Project) {
13+
with(target) {
14+
with(pluginManager) {
15+
apply("com.android.library")
16+
apply("org.jetbrains.kotlin.multiplatform")
17+
apply("org.jetbrains.kotlin.plugin.serialization")
18+
}
19+
20+
configureKotlinMultiplatform()
21+
22+
extensions.configure<LibraryExtension> {
23+
configureKotlinAndroid(this)
24+
25+
resourcePrefix = this@with.pathToResourcePrefix()
26+
27+
experimentalProperties["android.experimental.kmp.enableAndroidResources"] = "true"
28+
}
29+
30+
dependencies {
31+
"commonMainImplementation"(libs.findLibrary("kotlinx-serialization-json").get())
32+
"commonTestImplementation"(libs.findLibrary("kotlin-test").get())
33+
}
34+
}
35+
}
36+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import androidx.room.gradle.RoomExtension
2+
import org.gradle.api.Plugin
3+
import org.gradle.api.Project
4+
import org.gradle.kotlin.dsl.configure
5+
import org.gradle.kotlin.dsl.dependencies
6+
import zed.rainxch.githubstore.convention.libs
7+
8+
class RoomConventionPlugin : Plugin<Project> {
9+
override fun apply(target: Project) {
10+
with(target) {
11+
with(pluginManager) {
12+
apply("com.google.devtools.ksp")
13+
apply("androidx.room")
14+
}
15+
16+
extensions.configure<RoomExtension> {
17+
schemaDirectory("$projectDir/schemas")
18+
}
19+
20+
dependencies {
21+
"commonMainApi"(libs.findLibrary("androidx-room-runtime").get())
22+
"commonMainApi"(libs.findLibrary("sqlite-bundled").get())
23+
"kspAndroid"(libs.findLibrary("androidx-room-compiler").get())
24+
"kspJvm"(libs.findLibrary("androidx-room-compiler").get())
25+
}
26+
}
27+
}
28+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package zed.rainxch.githubstore.convention
2+
3+
import com.android.build.api.dsl.CommonExtension
4+
import org.gradle.api.Project
5+
import org.gradle.kotlin.dsl.dependencies
6+
7+
fun Project.configureAndroidCompose(
8+
commonExtension: CommonExtension<*, *, *, *, *, *>
9+
) {
10+
with(commonExtension) {
11+
buildFeatures {
12+
compose = true
13+
}
14+
15+
dependencies {
16+
val composeBom = libs.findLibrary("androidx-compose-bom").get()
17+
18+
"implementation"(platform(composeBom))
19+
"testImplementation"(platform(composeBom))
20+
"debugImplementation"(libs.findLibrary("androidx-compose-ui-tooling-preview").get())
21+
"debugImplementation"(libs.findLibrary("androidx-compose-ui-tooling").get())
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)