Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 12 additions & 38 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
@Suppress("DSL_SCOPE_VIOLATION") // TODO: Remove once KTIJ-19369 is fixed
plugins {
alias(libs.plugins.com.android.application)
alias(libs.plugins.org.jetbrains.kotlin.android)
id("conf.mad.primitive.android.application")
id("conf.mad.primitive.android.kotlin")
id("conf.mad.primitive.android.compose")
id("conf.mad.primitive.android.hilt")
id("conf.mad.primitive.kotlin.serialization")
}

android {
namespace = "com.conf.mad.todo"
compileSdk = 34

defaultConfig {
applicationId = "com.conf.mad.todo"
minSdk = 28
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
versionCode = libs.versions.versionCode.get().toInt()
versionName = libs.versions.appVersion.get()

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
Expand All @@ -23,48 +23,22 @@ android {

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

dependencies {
implementation(libs.core.ktx)
implementation(libs.lifecycle.runtime.ktx)
implementation(libs.activity.compose)
implementation(platform(libs.compose.bom))
implementation(libs.ui)
implementation(libs.ui.graphics)
implementation(libs.ui.tooling.preview)
implementation(libs.material3)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.ext.junit)
androidTestImplementation(libs.espresso.core)
androidTestImplementation(platform(libs.compose.bom))
androidTestImplementation(libs.ui.test.junit4)
debugImplementation(libs.ui.tooling)
debugImplementation(libs.ui.test.manifest)
androidTestImplementation(libs.androidx.test.junit)
androidTestImplementation(libs.androidx.test.espresso)
androidTestImplementation(platform(libs.androidx.compose.bom))
}

This file was deleted.

17 changes: 0 additions & 17 deletions app/src/test/java/com/conf/mad/todo/ExampleUnitTest.kt

This file was deleted.

1 change: 1 addition & 0 deletions build-logic/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
8 changes: 8 additions & 0 deletions build-logic/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Build logic rules

○ module -> convention
○ module -> primitive
○ convention -> primitive
✗ convention -> convention
○ primitive -> primitive
✗ primitive -> convention
63 changes: 63 additions & 0 deletions build-logic/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
`kotlin-dsl`
}

group = "com.conf.mad.todo.buildlogic"

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

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = "17"

java {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}

dependencies {
implementation(libs.kotlin.gradle.plugin)
implementation(libs.android.gradle.plugin)
// https://github.com/google/dagger/issues/3068#issuecomment-1470534930
implementation(libs.java.poet)
}

gradlePlugin {
plugins {
// primitives
register("androidApplication") {
id = "conf.mad.primitive.android.application"
implementationClass = "com.conf.mad.todo.primitive.AndroidApplicationPlugin"
}
register("androidCompose") {
id = "conf.mad.primitive.android.compose"
implementationClass = "com.conf.mad.todo.primitive.AndroidComposePlugin"
}
register("androidHilt") {
id = "conf.mad.primitive.android.hilt"
implementationClass = "com.conf.mad.todo.primitive.AndroidHiltPlugin"
}
register("androidKotlin") {
id = "conf.mad.primitive.android.kotlin"
implementationClass = "com.conf.mad.todo.primitive.AndroidKotlinPlugin"
}
register("android") {
id = "conf.mad.primitive.android"
implementationClass = "com.conf.mad.todo.primitive.AndroidPlugin"
}
register("kotlinSerialization") {
id = "conf.mad.primitive.kotlin.serialization"
implementationClass = "com.conf.mad.todo.primitive.KotlinSerializationPlugin"
}
// convention
register("androidFeature") {
id = "conf.mad.convention.android.feature"
implementationClass = "com.conf.mad.todo.convention.AndroidFeaturePlugin"
}
}
}
3 changes: 3 additions & 0 deletions build-logic/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
org.gradle.configureondemand=true
org.gradle.caching=true
org.gradle.parallel=true
13 changes: 13 additions & 0 deletions build-logic/settings.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")

dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
versionCatalogs {
create("libs") {
from(files("../gradle/libs.versions.toml"))
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.conf.mad.todo.convention

import org.gradle.api.Plugin
import org.gradle.api.Project

class AndroidFeaturePlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("conf.mad.primitive.android")
apply("conf.mad.primitive.android.kotlin")
apply("conf.mad.primitive.android.compose")
apply("conf.mad.primitive.android.hilt")
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.conf.mad.todo.dsl

import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.TestedExtension
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.dependencies

fun Project.androidApplication(action: BaseAppModuleExtension.() -> Unit) {
extensions.configure(action)
}

fun Project.androidLibrary(action: LibraryExtension.() -> Unit) {
extensions.configure(action)
}

fun Project.android(action: TestedExtension.() -> Unit) {
extensions.configure(action)
}

fun Project.setupAndroid() {
android {
namespace?.let {
this.namespace = it
}
compileSdkVersion(34)

defaultConfig {
minSdk = 28
targetSdk = 34
}

compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
isCoreLibraryDesugaringEnabled = true
}
dependencies {
add("coreLibraryDesugaring", libs.library("android-desugar-libs"))
}
testOptions {
unitTests {
isIncludeAndroidResources = true
}
}
}
}
34 changes: 34 additions & 0 deletions build-logic/src/main/kotlin/com/conf/mad/todo/dsl/GradleDsl.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.conf.mad.todo.dsl

import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.kotlin.dsl.DependencyHandlerScope

fun DependencyHandlerScope.implementation(
artifact: MinimalExternalModuleDependency,
) {
add("implementation", artifact)
}

fun DependencyHandlerScope.debugImplementation(
artifact: MinimalExternalModuleDependency,
) {
add("debugImplementation", artifact)
}

fun DependencyHandlerScope.androidTestImplementation(
artifact: MinimalExternalModuleDependency,
) {
add("androidTestImplementation", artifact)
}

fun DependencyHandlerScope.testImplementation(
artifact: MinimalExternalModuleDependency,
) {
add("testImplementation", artifact)
}

fun DependencyHandlerScope.implementationPlatform(
artifact: MinimalExternalModuleDependency,
) {
add("implementation", platform(artifact))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.conf.mad.todo.dsl

import com.android.build.gradle.TestedExtension
import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.api.plugins.ExtensionAware
import org.gradle.kotlin.dsl.DependencyHandlerScope
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions

fun TestedExtension.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
(this as ExtensionAware).extensions.configure("kotlinOptions", block)
}

fun DependencyHandlerScope.ksp(
artifact: MinimalExternalModuleDependency,
) {
add("ksp", artifact)
}

fun DependencyHandlerScope.kaptTest(
artifact: MinimalExternalModuleDependency,
) {
add("kaptTest", artifact)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.conf.mad.todo.dsl

import org.gradle.api.Project
import org.gradle.api.artifacts.ExternalModuleDependencyBundle
import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.api.artifacts.VersionCatalog
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.getByType
import org.gradle.plugin.use.PluginDependency

internal val Project.libs: VersionCatalog
get() = extensions.getByType<VersionCatalogsExtension>().named("libs")

internal fun VersionCatalog.version(name: String): String {
return findVersion(name).get().requiredVersion
}

internal fun VersionCatalog.library(name: String): MinimalExternalModuleDependency {
return findLibrary(name).get().get()
}

internal fun VersionCatalog.plugin(name: String): PluginDependency {
return findPlugin(name).get().get()
}

internal fun VersionCatalog.bundle(name: String): ExternalModuleDependencyBundle {
return findBundle(name).get().get()
}
Loading