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). 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..1e9637161 --- /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 + +pluginManager.withPlugin("java") { + apply(plugin = "ru.vyarus.animalsniffer") + + 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/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() 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" }