From ed46f516f8234d8d6dfbd6ad74df7255482ece0c Mon Sep 17 00:00:00 2001 From: Filipp Zhinkin Date: Thu, 10 Aug 2023 12:55:39 +0200 Subject: [PATCH 1/6] Use animalsniffer plugin to verify compatibility with Android --- build-logic/build.gradle.kts | 1 + .../kotlinx-io-android-compat.gradle.kts | 19 +++++++++++++++++++ bytestring/build.gradle.kts | 1 + core/build.gradle.kts | 1 + gradle/libs.versions.toml | 3 +++ 5 files changed, 25 insertions(+) create mode 100644 build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 6cfc893ba..14c0f8ec1 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -13,4 +13,5 @@ repositories { dependencies { implementation(libs.kotlin.gradle.plugin) + implementation(libs.animalsniffer.gradle.plugin) } diff --git a/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts new file mode 100644 index 000000000..f1074014b --- /dev/null +++ b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts @@ -0,0 +1,19 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE.txt file. + */ + +import ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferExtension + +apply(plugin = "ru.vyarus.animalsniffer") + +project.plugins.withType(JavaPlugin::class.java) { + configure { + sourceSets = listOf((project.extensions.getByName("sourceSets") as SourceSetContainer).getByName("main")) + } + val signature: Configuration by configurations + dependencies { + // Use the same API level as OkHttp + signature("net.sf.androidscents.signature:android-api-level-21:5.0.1_r2@signature") + } +} diff --git a/bytestring/build.gradle.kts b/bytestring/build.gradle.kts index f6ebf202b..4440dc999 100644 --- a/bytestring/build.gradle.kts +++ b/bytestring/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.dokka.gradle.DokkaTaskPartial plugins { id("kotlinx-io-multiplatform") id("kotlinx-io-publish") + id("kotlinx-io-android-compat") alias(libs.plugins.kover) alias(libs.plugins.dokka) } diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 8046ccd6a..33de73700 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -8,6 +8,7 @@ import org.jetbrains.dokka.gradle.DokkaTaskPartial plugins { id("kotlinx-io-multiplatform") id("kotlinx-io-publish") + id("kotlinx-io-android-compat") alias(libs.plugins.kover) alias(libs.plugins.dokka) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5178c04d4..94f729c59 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,12 +7,15 @@ bcv = "0.13.2" benchmark = "0.4.9" jmh = "1.36" coroutines = "1.7.3" +animalsniffer = "1.7.1" [libraries] kotlinx-benchmark-runtime = { group = "org.jetbrains.kotlinx", name = "kotlinx-benchmark-runtime", version.ref = "benchmark" } kotlin-gradle-plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "coroutines" } +animalsniffer-gradle-plugin = { group = "ru.vyarus", name = "gradle-animalsniffer-plugin", version.ref = "animalsniffer" } + [plugins] dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } From 2cb1d7dbe9a4a62fe8f2a97721fd8ee29591c594 Mon Sep 17 00:00:00 2001 From: Filipp Zhinkin Date: Thu, 10 Aug 2023 13:02:53 +0200 Subject: [PATCH 2/6] Use java.io.File instead of java.nio.files.Path Closes #202 --- core/jvm/src/files/Paths.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/core/jvm/src/files/Paths.kt b/core/jvm/src/files/Paths.kt index 148ec4318..406870590 100644 --- a/core/jvm/src/files/Paths.kt +++ b/core/jvm/src/files/Paths.kt @@ -6,15 +6,14 @@ package kotlinx.io.files import kotlinx.io.* +import java.io.File import java.io.FileInputStream import java.io.FileOutputStream -import java.nio.file.* -import java.nio.file.Path as NioPath -public actual class Path internal constructor(internal val nioPath: NioPath) +public actual class Path internal constructor(internal val file: File) -public actual fun Path(path: String): Path = Path(Paths.get(path)) +public actual fun Path(path: String): Path = Path(File(path)) -public actual fun Path.source(): Source = FileInputStream(nioPath.toFile()).asSource().buffered() +public actual fun Path.source(): Source = FileInputStream(file).asSource().buffered() -public actual fun Path.sink(): Sink = FileOutputStream(nioPath.toFile()).asSink().buffered() +public actual fun Path.sink(): Sink = FileOutputStream(file).asSink().buffered() From b90ab70f4732cdb048bf9f2fa5e5597de2a0344e Mon Sep 17 00:00:00 2001 From: Filipp Zhinkin Date: Thu, 10 Aug 2023 13:07:17 +0200 Subject: [PATCH 3/6] Mention Android API compatibility in README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 529d10bb1..5479e3da7 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,11 @@ Add the library to dependencies: ``` +### Android + +`kotlinx-io` is not tested on Android on a regular basis, +but the library is compatible with Android 5.0+ (API level 21+). + ## Contributing Read the [Contributing Guidelines](CONTRIBUTING.md). From f5ce27a3f338c760d104e15cef147c5f3d107339 Mon Sep 17 00:00:00 2001 From: Filipp Zhinkin Date: Fri, 11 Aug 2023 09:42:11 +0200 Subject: [PATCH 4/6] Cleanup --- .../io/conventions/kotlinx-io-android-compat.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts index f1074014b..b4f61625c 100644 --- a/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts +++ b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts @@ -5,9 +5,9 @@ import ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferExtension -apply(plugin = "ru.vyarus.animalsniffer") +plugins.withType(JavaPlugin::class.java) { + apply(plugin = "ru.vyarus.animalsniffer") -project.plugins.withType(JavaPlugin::class.java) { configure { sourceSets = listOf((project.extensions.getByName("sourceSets") as SourceSetContainer).getByName("main")) } From 95c58b8e24912cad571b7625930601553a194064 Mon Sep 17 00:00:00 2001 From: Filipp Zhinkin Date: Mon, 14 Aug 2023 11:29:30 +0200 Subject: [PATCH 5/6] Lazily configure AnimalSniffer --- .../io/conventions/kotlinx-io-android-compat.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts index b4f61625c..324c4a013 100644 --- a/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts +++ b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts @@ -5,9 +5,9 @@ import ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferExtension -plugins.withType(JavaPlugin::class.java) { - apply(plugin = "ru.vyarus.animalsniffer") +apply(plugin = "ru.vyarus.animalsniffer") +plugins.withType(JavaPlugin::class.java).configureEach { configure { sourceSets = listOf((project.extensions.getByName("sourceSets") as SourceSetContainer).getByName("main")) } From 062d14013439281dff976e4f5a7bc00eaaea1660 Mon Sep 17 00:00:00 2001 From: Filipp Zhinkin Date: Mon, 14 Aug 2023 11:56:14 +0200 Subject: [PATCH 6/6] Lazily apply AnimalSniffer --- .../io/conventions/kotlinx-io-android-compat.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts index 324c4a013..1e9637161 100644 --- a/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts +++ b/build-logic/src/main/kotlin/kotlinx/io/conventions/kotlinx-io-android-compat.gradle.kts @@ -5,9 +5,9 @@ import ru.vyarus.gradle.plugin.animalsniffer.AnimalSnifferExtension -apply(plugin = "ru.vyarus.animalsniffer") +pluginManager.withPlugin("java") { + apply(plugin = "ru.vyarus.animalsniffer") -plugins.withType(JavaPlugin::class.java).configureEach { configure { sourceSets = listOf((project.extensions.getByName("sourceSets") as SourceSetContainer).getByName("main")) }