Skip to content
Open
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
Original file line number Diff line number Diff line change
@@ -1,21 +1,31 @@
package org.publicvalue.convention

import com.android.build.api.dsl.ApplicationExtension
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.the
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.publicvalue.convention.config.configureKotlinAndroid

class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
val libs = the<LibrariesForLibs>()
with(pluginManager) {
apply("com.android.application")
}

extensions.configure<ApplicationExtension> {
configureKotlinAndroid(this)
}

tasks.withType<KotlinCompile>().configureEach {
compilerOptions.jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get()))
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,43 @@
package org.publicvalue.convention

import com.android.build.gradle.LibraryExtension
import org.publicvalue.convention.config.configureKotlinAndroid
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryExtension
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.the
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension

/**
* KMP Android library (AGP 9+). Apply [KotlinMultiplatformMobileConventionPlugin] first so
* `org.jetbrains.kotlin.multiplatform` is on the project before this plugin runs.
*/
class AndroidLibraryConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
with(target) {
with(pluginManager) {
apply("com.android.library")
check(pluginManager.hasPlugin("org.jetbrains.kotlin.multiplatform")) {
"Apply org.publicvalue.convention.kotlin.multiplatform.mobile before org.publicvalue.convention.android.library"
}

extensions.configure<LibraryExtension> {
configureKotlinAndroid(this)
namespace = "org.publicvalue.multiplatform.easyqrscan.${project.name.replace("-", ".")}"
pluginManager.apply("com.android.kotlin.multiplatform.library")
val libs = the<LibrariesForLibs>()
extensions.configure<KotlinMultiplatformExtension> {
(this as ExtensionAware).extensions.configure<KotlinMultiplatformAndroidLibraryExtension>("android") {
compileSdk = libs.versions.compileSdk.get().toInt()
minSdk = libs.versions.minSdk.get().toInt()
androidResources {
enable = true
}
}
targets.withType<KotlinMultiplatformAndroidLibraryTarget>().configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(libs.versions.jvmTarget.get()))
}
}
}
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.publicvalue.convention.config.configureAndroidTarget
import org.publicvalue.convention.config.configureIosTargets
import org.publicvalue.convention.config.configureKotlin

/**
Expand All @@ -20,12 +18,8 @@ class KotlinMultiplatformMobileConventionPlugin : Plugin<Project> {

extensions.configure<KotlinMultiplatformExtension> {
applyDefaultHierarchyTemplate()

if (pluginManager.hasPlugin("com.android.library")) {
this.configureAndroidTarget()
}
}
configureKotlin()
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import org.gradle.kotlin.dsl.withType
import org.gradle.plugins.signing.Sign
import org.gradle.plugins.signing.SigningExtension
import org.jetbrains.compose.internal.utils.getLocalProperty
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension

class MavenCentralPublishConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
Expand All @@ -23,14 +22,6 @@ class MavenCentralPublishConventionPlugin : Plugin<Project> {
apply("org.jetbrains.dokka")
}

extensions.configure<KotlinMultiplatformExtension> {
if (pluginManager.hasPlugin("com.android.library")) {
androidTarget {
publishLibraryVariants("release")
}
}
}

val javadocJar = tasks.register("javadocJar", Jar::class.java) {
archiveClassifier.set("javadoc")
from(tasks.getByName("dokkaGeneratePublicationHtml"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,33 @@ package org.publicvalue.convention.config

import com.android.build.api.dsl.ApplicationExtension
import com.android.build.api.dsl.CommonExtension
import com.android.build.api.dsl.LibraryExtension
import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.JavaVersion
import org.gradle.api.Project
import org.gradle.kotlin.dsl.the
import java.io.File

fun Project.configureKotlinAndroid(extension: CommonExtension<*, *, *, *, *, *>) {
fun Project.configureKotlinAndroid(extension: CommonExtension) {
val libs = the<LibrariesForLibs>()

if (extension is LibraryExtension) {
extension.defaultConfig {
consumerProguardFiles += File("consumer-rules.pro")
}
} else if (extension is ApplicationExtension) {
if (extension is ApplicationExtension) {
extension.apply {
defaultConfig {
targetSdk = libs.versions.targetSdk.get().toInt()
}
}
}

extension.apply {
compileSdk = libs.versions.compileSdk.get().toInt()
extension.compileSdk = libs.versions.compileSdk.get().toInt()

defaultConfig {
minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
with(extension.defaultConfig) {
minSdk = libs.versions.minSdk.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

// Can remove this once https://issuetracker.google.com/issues/260059413 is fixed.
// See https://kotlinlang.org/docs/gradle-configure-project.html#gradle-java-toolchains-support
compileOptions {
sourceCompatibility = JavaVersion.toVersion(libs.versions.jvmTarget.get())
targetCompatibility = JavaVersion.toVersion(libs.versions.jvmTarget.get())
}
// Can remove this once https://issuetracker.google.com/issues/260059413 is fixed.
// See https://kotlinlang.org/docs/gradle-configure-project.html#gradle-java-toolchains-support
with(extension.compileOptions) {
sourceCompatibility = JavaVersion.toVersion(libs.versions.jvmTarget.get())
targetCompatibility = JavaVersion.toVersion(libs.versions.jvmTarget.get())
}
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,6 @@
package org.publicvalue.convention.config

import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.publicvalue.convention.libs

fun KotlinMultiplatformExtension.configureAndroidTarget() {
androidTarget {
compilerOptions {
jvmTarget.set(JvmTarget.fromTarget(project.libs.versions.jvmTarget.get()))
}
}
}

fun KotlinMultiplatformExtension.configureIosTargets(baseName: String? = null) {
listOf(
Expand All @@ -24,4 +14,4 @@ fun KotlinMultiplatformExtension.configureIosTargets(baseName: String? = null) {
isStatic = true
}
}
}
}
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import java.net.URI

plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.android.kotlin.multiplatform.library) apply false
alias(libs.plugins.composeMultiplatform) apply false
alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.ksp) apply false
Expand Down
8 changes: 6 additions & 2 deletions camerautils/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import org.publicvalue.convention.config.configureIosTargets

plugins {
id("org.publicvalue.convention.android.library")
id("org.publicvalue.convention.kotlin.multiplatform.mobile")
id("org.publicvalue.convention.android.library")
id("org.publicvalue.convention.centralPublish")
id("org.publicvalue.convention.compose.multiplatform")
}

description = "Compose Multiplatform Camera Utilities for Android/iOS"

kotlin {
android {
namespace = "org.publicvalue.multiplatform.easyqrscan.camerautils"
}

configureIosTargets()
jvm()

Expand All @@ -32,4 +36,4 @@ kotlin {
}
}
}
}
}
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ minSdk = "23"

jvmTarget = "17"
# https://developer.android.com/build/releases/gradle-plugin#compatibility
agp = "8.11.2"
agp = "9.1.1"

#https://github.com/JetBrains/compose-multiplatform
compose-multiplatform = "1.10.1"
Expand Down Expand Up @@ -48,7 +48,7 @@ dokka-gradlePlugin = { module = "org.jetbrains.dokka:org.jetbrains.dokka.gradle.

[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.library", version.ref = "agp" }
android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "compose-multiplatform" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Thu Aug 05 09:58:17 CEST 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
23 changes: 9 additions & 14 deletions sample-app/android-app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
plugins {
id("org.publicvalue.convention.android.application")
id("org.publicvalue.convention.kotlin.multiplatform.mobile")
id("org.publicvalue.convention.compose.multiplatform")
}

kotlin {
androidTarget()
sourceSets {
val androidMain by getting {
dependencies {
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)

implementation(projects.sampleApp.shared)
}
}
}
dependencies {
implementation(projects.sampleApp.shared)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
}

android {
Expand All @@ -27,4 +18,8 @@ android {
versionCode = 1
versionName = "1.0"
}

buildFeatures {
compose = true
}
}
10 changes: 5 additions & 5 deletions sample-app/shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.publicvalue.convention.config.configureIosTargets

plugins {
id("org.publicvalue.convention.android.library")
id("org.publicvalue.convention.kotlin.multiplatform.mobile")
id("org.publicvalue.convention.android.library")
id("org.publicvalue.convention.compose.multiplatform")
}

kotlin {
android {
namespace = "org.publicvalue.multiplatform.qrcode.sample.shared"
}

configureIosTargets()
sourceSets {
commonMain {
Expand All @@ -34,7 +38,3 @@ kotlin {
}
}
}

android {
namespace = "org.publicvalue.multiplatform.qrcode.sample.shared"
}
8 changes: 6 additions & 2 deletions scanner/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import org.publicvalue.convention.config.configureIosTargets

plugins {
id("org.publicvalue.convention.android.library")
id("org.publicvalue.convention.kotlin.multiplatform.mobile")
id("org.publicvalue.convention.android.library")
id("org.publicvalue.convention.centralPublish")
id("org.publicvalue.convention.compose.multiplatform")
}

description = "Compose Multiplatform QR Code Scanner for Android/iOS"

kotlin {
android {
namespace = "org.publicvalue.multiplatform.easyqrscan.scanner"
}

configureIosTargets()
jvm()

Expand Down Expand Up @@ -38,4 +42,4 @@ kotlin {
}
}
}
}
}