Skip to content

Commit

Permalink
Add Android-specific variant of the libraries
Browse files Browse the repository at this point in the history
This avoids the need for adding the permission manually.
  • Loading branch information
stoyicker committed Jul 17, 2024
1 parent d7c8e0b commit a51f20f
Show file tree
Hide file tree
Showing 10 changed files with 49 additions and 14 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false
alias(libs.plugins.buildlogic.kotlin.multiplatform.library) apply false
alias(libs.plugins.compose) apply false
alias(libs.plugins.kotlin.atomicfu) apply false
Expand Down
1 change: 1 addition & 0 deletions buildlogic/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {

dependencies {
compileOnly(gradleApi())
implementation(libs.plugin.android.build)
implementation(libs.plugin.kotlin)
implementation(libs.plugin.vanniktech.publish)
}
Expand Down
1 change: 1 addition & 0 deletions buildlogic/settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
dependencyResolutionManagement {
repositories {
google()
gradlePluginPortal()
mavenCentral()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package buildlogic

import com.android.build.api.dsl.LibraryExtension
import com.vanniktech.maven.publish.JavadocJar
import com.vanniktech.maven.publish.KotlinMultiplatform
import com.vanniktech.maven.publish.MavenPublishBaseExtension
Expand All @@ -8,6 +9,7 @@ import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.kotlin.dsl.configure
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension

Expand All @@ -18,6 +20,12 @@ internal class KotlinMultiplatformLibraryPlugin : Plugin<Project> {
KotlinMultiplatformLibraryPluginExtension::class.java,
)
val libs = extensions.getByType(VersionCatalogsExtension::class.java).named("libs")
pluginManager.apply(
libs.findPlugin("android-library")
.get()
.get()
.pluginId,
)
pluginManager.apply(
libs.findPlugin("kotlin-multiplatform")
.get()
Expand All @@ -31,6 +39,27 @@ internal class KotlinMultiplatformLibraryPlugin : Plugin<Project> {
.pluginId,
)
group = "com.tidal.networktime"
configure<KotlinMultiplatformExtension> {
applyDefaultHierarchyTemplate()
androidTarget {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_1_8)
}
publishLibraryVariants("release")
}
jvm()
sourceSets.androidMain.get().dependsOn(sourceSets.jvmMain.get())
}
configure<KotlinProjectExtension> {
sourceSets.all {
languageSettings.optIn("kotlin.experimental.ExperimentalObjCName")
}
}
configure<LibraryExtension> {
compileSdk = 34
defaultConfig.minSdk = 26
namespace = "com.tidal.networktime${customExtension.androidNamespaceSuffix.getOrElse("")}"
}
configure<MavenPublishBaseExtension> {
pom {
name.set(project.name)
Expand Down Expand Up @@ -62,14 +91,5 @@ internal class KotlinMultiplatformLibraryPlugin : Plugin<Project> {
signAllPublications()
publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL, true)
}
configure<KotlinMultiplatformExtension> {
applyDefaultHierarchyTemplate()
jvm()
}
configure<KotlinProjectExtension> {
sourceSets.all {
languageSettings.optIn("kotlin.experimental.ExperimentalObjCName")
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ open class KotlinMultiplatformLibraryPluginExtension @Inject constructor(
private val project: Project,
objectFactory: ObjectFactory,
) {
val androidNamespaceSuffix: Property<String> = objectFactory.property(String::class.java)
val pomDescription: Property<String> = objectFactory.property(String::class.java)

fun xCFramework(xCFrameworkName: String) = with(project) {
Expand Down
3 changes: 2 additions & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,17 @@ kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-c
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
kotlinx-serialization-json-okio = { module = "com.squareup.okio:okio", version.ref = "okio" }
okio = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json-okio", version.ref = "kotlinx-serialization-json-okio" }
plugin-android-build = { module = "com.android.tools.build:gradle", version.ref = "android-build" }
plugin-kotlin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
plugin-vanniktech-publish = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "vanniktech-publish" }

[plugins]
android-application = { id = "com.android.application", version.ref = "android-build" }
android-library = { id = "com.android.library", version.ref = "android-build" }
buildlogic-kotlin-multiplatform-library = { id = "buildlogic.kotlin.multiplatform.library", version = "unspecified" }
compose = { id = "org.jetbrains.compose", version.ref = "compose" }
kotlin-atomicfu = { id = "org.jetbrains.kotlin.plugin.atomicfu", version.ref = "kotlin" }
kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
vanniktech-publish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktech-publish" }
1 change: 1 addition & 0 deletions networktime-singletons/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
}

buildlogicKotlinMultiplatformLibrary {
androidNamespaceSuffix = ".singletons"
pomDescription = "Singleton API extension."
xCFramework("TidalNetworkTimeSingletons")
}
Expand Down
7 changes: 7 additions & 0 deletions networktime/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget

plugins {
Expand All @@ -11,6 +12,12 @@ buildlogicKotlinMultiplatformLibrary {
}

kotlin {
androidTarget {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_1_8)
}
publishLibraryVariants("release")
}
targets.filterIsInstance<KotlinNativeTarget>()
.forEach {
it.compilations.configureEach { cinterops.create("NetworkFrameworkWorkaround") }
Expand Down
5 changes: 5 additions & 0 deletions networktime/src/androidMain/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<uses-permission android:name="android.permission.INTERNET" />
</manifest>
5 changes: 1 addition & 4 deletions samples/multiplatform-kotlin/android/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@ kotlin {

android {
compileSdk = 34
defaultConfig {
minSdk = 26
targetSdk = 34
}
defaultConfig.minSdk = 26
namespace = "com.tidal.networktime.sample.android"
}

0 comments on commit a51f20f

Please sign in to comment.