From fc64d77f9af5d70c44a01230bad85f174a2778c2 Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Fri, 27 May 2022 14:37:07 +0700 Subject: [PATCH 1/5] #340 fix error at namespace usage --- gradle/libs.versions.toml | 2 +- .../dev/icerock/gradle/MultiplatformResourcesPlugin.kt | 5 ++++- sample/mpp-library/build.gradle.kts | 5 ++--- sample/mpp-library/src/androidMain/AndroidManifest.xml | 2 -- 4 files changed, 7 insertions(+), 7 deletions(-) delete mode 100755 sample/mpp-library/src/androidMain/AndroidManifest.xml diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6628fb1b..1e4074a7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlinVersion = "1.6.10" -androidGradleVersion = "7.1.0" +androidGradleVersion = "7.2.0" # kotlinx kotlinxSerializationVersion = "1.2.1" diff --git a/resources-generator/src/main/kotlin/dev/icerock/gradle/MultiplatformResourcesPlugin.kt b/resources-generator/src/main/kotlin/dev/icerock/gradle/MultiplatformResourcesPlugin.kt index 4fb7b011..8fa237ba 100644 --- a/resources-generator/src/main/kotlin/dev/icerock/gradle/MultiplatformResourcesPlugin.kt +++ b/resources-generator/src/main/kotlin/dev/icerock/gradle/MultiplatformResourcesPlugin.kt @@ -143,7 +143,10 @@ class MultiplatformResourcesPlugin : Plugin { val androidMainSourceSet = androidExtension.sourceSets .getByName(SourceSet.MAIN_SOURCE_SET_NAME) - sourceInfo.getAndroidRClassPackage = { + sourceInfo.getAndroidRClassPackage = lambda@{ + val namespace: String? = androidExtension.namespace + if (namespace != null) return@lambda namespace + val manifestFile = androidMainSourceSet.manifest.srcFile getAndroidPackage(manifestFile) } diff --git a/sample/mpp-library/build.gradle.kts b/sample/mpp-library/build.gradle.kts index 4c2fe5d1..8dded80b 100644 --- a/sample/mpp-library/build.gradle.kts +++ b/sample/mpp-library/build.gradle.kts @@ -12,9 +12,8 @@ plugins { } android { - lintOptions { - disable("ImpliedQuantity") - } + namespace = "com.icerockdev.library" + testOptions { unitTests { isIncludeAndroidResources = true diff --git a/sample/mpp-library/src/androidMain/AndroidManifest.xml b/sample/mpp-library/src/androidMain/AndroidManifest.xml deleted file mode 100755 index 81963927..00000000 --- a/sample/mpp-library/src/androidMain/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - From 8bc44c74b4eef76e5102ffefafa1da20be242048 Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Fri, 27 May 2022 14:37:24 +0700 Subject: [PATCH 2/5] update android gradle config --- .../src/main/kotlin/android-app-convention.gradle.kts | 2 +- .../src/main/kotlin/android-base-convention.gradle.kts | 4 ++-- .../multiplatform-android-publish-convention.gradle.kts | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/resources-build-logic/src/main/kotlin/android-app-convention.gradle.kts b/resources-build-logic/src/main/kotlin/android-app-convention.gradle.kts index dae8c57c..b775dc81 100644 --- a/resources-build-logic/src/main/kotlin/android-app-convention.gradle.kts +++ b/resources-build-logic/src/main/kotlin/android-app-convention.gradle.kts @@ -22,6 +22,6 @@ android { } packagingOptions { - exclude("META-INF/*.kotlin_module") + resources.excludes.add("META-INF/*.kotlin_module") } } diff --git a/resources-build-logic/src/main/kotlin/android-base-convention.gradle.kts b/resources-build-logic/src/main/kotlin/android-base-convention.gradle.kts index efab6f4b..decb6859 100644 --- a/resources-build-logic/src/main/kotlin/android-base-convention.gradle.kts +++ b/resources-build-logic/src/main/kotlin/android-base-convention.gradle.kts @@ -5,10 +5,10 @@ import com.android.build.gradle.BaseExtension configure { - compileSdkVersion(31) + compileSdkVersion(32) defaultConfig { minSdk = 16 - targetSdk = 30 + targetSdk = 32 } } diff --git a/resources-build-logic/src/main/kotlin/multiplatform-android-publish-convention.gradle.kts b/resources-build-logic/src/main/kotlin/multiplatform-android-publish-convention.gradle.kts index 408302b8..02acce7f 100644 --- a/resources-build-logic/src/main/kotlin/multiplatform-android-publish-convention.gradle.kts +++ b/resources-build-logic/src/main/kotlin/multiplatform-android-publish-convention.gradle.kts @@ -8,6 +8,7 @@ plugins { kotlin { android { - publishLibraryVariants("release", "debug") + publishAllLibraryVariants() + publishLibraryVariantsGroupedByFlavor = true } } From ab941427f13722d0626e7421dfdb451a778407a0 Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Fri, 27 May 2022 14:38:02 +0700 Subject: [PATCH 3/5] #345 fix invalid gradle task dependencies debug tasks calls release tasks --- .../gradle/generator/android/AndroidMRGenerator.kt | 8 -------- 1 file changed, 8 deletions(-) diff --git a/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/android/AndroidMRGenerator.kt b/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/android/AndroidMRGenerator.kt index b2e10dee..cd27456c 100644 --- a/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/android/AndroidMRGenerator.kt +++ b/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/android/AndroidMRGenerator.kt @@ -4,9 +4,7 @@ package dev.icerock.gradle.generator.android -import com.android.build.gradle.tasks.ExtractDeepLinksTask import com.android.build.gradle.tasks.GenerateResValues -import com.android.build.gradle.tasks.ManifestProcessorTask import com.android.build.gradle.tasks.MergeSourceSetFolders import com.squareup.kotlinpoet.KModifier import dev.icerock.gradle.generator.MRGenerator @@ -30,17 +28,11 @@ class AndroidMRGenerator( override fun getMRClassModifiers(): Array = arrayOf(KModifier.ACTUAL) override fun apply(generationTask: Task, project: Project) { - project.tasks.withType().configureEach { - generationTask.dependsOn(it) - } project.tasks.withType().configureEach { it.dependsOn(generationTask) } project.tasks.withType().configureEach { it.dependsOn(generationTask) } - project.tasks.withType().configureEach { - generationTask.dependsOn(it) - } } } From 8a44b0e22f47c4ba1db7d8afc2b11c5661806f69 Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Fri, 27 May 2022 21:21:26 +0700 Subject: [PATCH 4/5] #339 kotlin 1.7.0 support --- gradle.properties | 2 +- gradle/libs.versions.toml | 6 +-- resources-generator/build.gradle.kts | 2 +- .../generator/apple/AppleMRGenerator.kt | 17 +++----- .../gradle/generator/js/JsMRGenerator.kt | 3 +- .../tasks/CopyExecutableResourcesToApp.kt | 15 ++++--- .../gradle/utils/KotlinNativeLinkExt.kt | 42 +++++++++++++++++++ .../android-app/src/main/AndroidManifest.xml | 11 +++-- .../src/main/AndroidManifest.xml | 6 ++- 9 files changed, 76 insertions(+), 28 deletions(-) create mode 100644 resources-generator/src/main/kotlin/dev/icerock/gradle/utils/KotlinNativeLinkExt.kt diff --git a/gradle.properties b/gradle.properties index 74d2016c..1238c435 100755 --- a/gradle.properties +++ b/gradle.properties @@ -12,4 +12,4 @@ android.useAndroidX=true xcodeproj=./sample/ios-app -mobile.multiplatform.iosTargetWarning=false \ No newline at end of file +mobile.multiplatform.iosTargetWarning=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1e4074a7..f5c2edb0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -29,8 +29,8 @@ espressoCoreVersion = "3.3.0" testRunnerVersion = "1.3.0" testRulesVersion = "1.3.0" testExtJunitVersion = "1.1.2" -testCoreVersion = "1.3.0" -robolectricVersion = "4.7.3" +testCoreVersion = "1.4.0" +robolectricVersion = "4.8.1" # moko mokoGraphicsVersion = "0.9.0" @@ -88,7 +88,7 @@ kotlinGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", ver # This version is used to fix compatibility issues between # Kotlin Gradle Plugin 1.6.10 -> 1.6.20 # we can't update all project to 1.6.20 now because Jetpack Compose not updated yet -kotlinGradlePluginNext = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version = "1.6.21" } +kotlinGradlePluginNext = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version = "1.7.0-RC" } androidGradlePlugin = { module = "com.android.tools.build:gradle", version.ref = "androidGradleVersion" } kotlinCompilerEmbeddable = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlinVersion" } detektGradlePlugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detektVersion" } diff --git a/resources-generator/build.gradle.kts b/resources-generator/build.gradle.kts index 9f139945..1fe2e828 100644 --- a/resources-generator/build.gradle.kts +++ b/resources-generator/build.gradle.kts @@ -17,11 +17,11 @@ dependencies { implementation(gradleKotlinDsl()) compileOnly(libs.kotlinGradlePluginNext) compileOnly(libs.androidGradlePlugin) + compileOnly(libs.kotlinCompilerEmbeddable) implementation(libs.kotlinPoet) implementation(libs.kotlinxSerialization) implementation(libs.apacheCommonsText) implementation(libs.commonsCodec) - implementation(libs.kotlinCompilerEmbeddable) } java { diff --git a/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/apple/AppleMRGenerator.kt b/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/apple/AppleMRGenerator.kt index f80be641..56fd5fcd 100644 --- a/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/apple/AppleMRGenerator.kt +++ b/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/apple/AppleMRGenerator.kt @@ -16,6 +16,7 @@ import dev.icerock.gradle.tasks.CopyExecutableResourcesToApp import dev.icerock.gradle.tasks.CopyFrameworkResourcesToAppEntryPointTask import dev.icerock.gradle.tasks.CopyFrameworkResourcesToAppTask import dev.icerock.gradle.utils.calculateResourcesHash +import dev.icerock.gradle.utils.klibs import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.Task @@ -222,8 +223,7 @@ $linkTask produces static framework, Xcode should have Build Phase with copyFram project: Project, outputDir: File ) { - linkTask.libraries - .plus(linkTask.intermediateLibrary.get()) + linkTask.klibs .filter { it.extension == "klib" } .filter { it.exists() } .forEach { inputFile -> @@ -253,18 +253,11 @@ $linkTask produces static framework, Xcode should have Build Phase with copyFram if (linkTask.project.tasks.any { it.name == copyTaskName }) return@all - project.files(linkTask.intermediateLibrary) - - val copyResources = linkTask.project.tasks + project.tasks .create(copyTaskName, CopyExecutableResourcesToApp::class) { - val libraries = linkTask.libraries - .plus(project.files(linkTask.intermediateLibrary)) - .filter { library -> library.extension == "klib" } - .filter(File::exists) - - it.libraries = libraries + it.linkTask = linkTask + it.dependsOn(linkTask) } - copyResources.dependsOn(linkTask) } } diff --git a/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/js/JsMRGenerator.kt b/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/js/JsMRGenerator.kt index f5b4905a..5572ffba 100644 --- a/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/js/JsMRGenerator.kt +++ b/resources-generator/src/main/kotlin/dev/icerock/gradle/generator/js/JsMRGenerator.kt @@ -11,6 +11,7 @@ import com.squareup.kotlinpoet.STRING import com.squareup.kotlinpoet.TypeSpec import dev.icerock.gradle.generator.MRGenerator import dev.icerock.gradle.utils.calculateResourcesHash +import dev.icerock.gradle.utils.klibs import org.gradle.api.Action import org.gradle.api.Project import org.gradle.api.Task @@ -129,7 +130,7 @@ class JsMRGenerator( override fun execute(task: Kotlin2JsCompile) { val project: Project = task.project - task.classpath.forEach { dependency -> + task.klibs.forEach { dependency -> copyResourcesFromLibraries( inputFile = dependency, project = project, diff --git a/resources-generator/src/main/kotlin/dev/icerock/gradle/tasks/CopyExecutableResourcesToApp.kt b/resources-generator/src/main/kotlin/dev/icerock/gradle/tasks/CopyExecutableResourcesToApp.kt index e9cdef12..c6091363 100644 --- a/resources-generator/src/main/kotlin/dev/icerock/gradle/tasks/CopyExecutableResourcesToApp.kt +++ b/resources-generator/src/main/kotlin/dev/icerock/gradle/tasks/CopyExecutableResourcesToApp.kt @@ -4,17 +4,22 @@ package dev.icerock.gradle.tasks +import dev.icerock.gradle.utils.klibs import org.gradle.api.DefaultTask -import org.gradle.api.file.FileCollection import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction +import org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink import org.jetbrains.kotlin.library.impl.KotlinLibraryLayoutImpl import java.io.File import java.io.FileFilter open class CopyExecutableResourcesToApp : DefaultTask() { @get:Internal - lateinit var libraries: FileCollection + lateinit var linkTask: KotlinNativeLink + + init { + group = "moko-resources" + } @TaskAction fun copyResources() { @@ -25,9 +30,9 @@ open class CopyExecutableResourcesToApp : DefaultTask() { val outputDir = File(buildProductsDir, contentsFolderPath) - libraries - .filter { it.extension == "klib" } - .filter { it.exists() } + linkTask.klibs + .filter { library -> library.extension == "klib" } + .filter(File::exists) .forEach { inputFile -> val klibKonan = org.jetbrains.kotlin.konan.file.File(inputFile.path) val klib = KotlinLibraryLayoutImpl(klib = klibKonan, component = "default") diff --git a/resources-generator/src/main/kotlin/dev/icerock/gradle/utils/KotlinNativeLinkExt.kt b/resources-generator/src/main/kotlin/dev/icerock/gradle/utils/KotlinNativeLinkExt.kt new file mode 100644 index 00000000..d5c4ea00 --- /dev/null +++ b/resources-generator/src/main/kotlin/dev/icerock/gradle/utils/KotlinNativeLinkExt.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2022 IceRock MAG Inc. Use of this source code is governed by the Apache 2.0 license. + */ + +package dev.icerock.gradle.utils + +import org.gradle.api.file.FileCollection +import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool +import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile +import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink + +val KotlinNativeLink.klibs: FileCollection + get() { + return try { + val getLibraries = + AbstractKotlinNativeCompile::class.java.getDeclaredMethod("getLibraries") + val getIntermediateLibrary = + KotlinNativeLink::class.java.getDeclaredMethod("getSource") + + @Suppress("UNCHECKED_CAST") + val libs: FileCollection = getLibraries.invoke(this) as FileCollection + val library: FileCollection = getIntermediateLibrary.invoke(this) as FileCollection + + libs.plus(library) + } catch (exc: NoSuchMethodException) { + libraries.plus(sources) + } + } + +val Kotlin2JsCompile.klibs: FileCollection + get() { + return try { + val getClasspath = + AbstractKotlinCompileTool::class.java.getDeclaredMethod("getClasspath") + + val libs: FileCollection = getClasspath.invoke(this) as FileCollection + libs + } catch (exc: NoSuchMethodException) { + libraries.plus(sources) + } + } diff --git a/sample/android-app/src/main/AndroidManifest.xml b/sample/android-app/src/main/AndroidManifest.xml index 2c5b6b7e..e26e8ea3 100755 --- a/sample/android-app/src/main/AndroidManifest.xml +++ b/sample/android-app/src/main/AndroidManifest.xml @@ -8,16 +8,21 @@ + tools:ignore="GoogleAppIndexingWarning,MissingApplicationIcon"> - + - + diff --git a/sample/android-mpp-app/src/main/AndroidManifest.xml b/sample/android-mpp-app/src/main/AndroidManifest.xml index 6b706b35..0fe88b06 100755 --- a/sample/android-mpp-app/src/main/AndroidManifest.xml +++ b/sample/android-mpp-app/src/main/AndroidManifest.xml @@ -8,9 +8,11 @@ + tools:ignore="GoogleAppIndexingWarning,MissingApplicationIcon"> - + From 435ab58d341d76c68b092ad315c34859bb80ee71 Mon Sep 17 00:00:00 2001 From: Aleksey Mikhailov Date: Fri, 27 May 2022 21:22:23 +0700 Subject: [PATCH 5/5] up version --- README.md | 10 +++++----- gradle/libs.versions.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 12e0c017..2e08ebe9 100755 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ buildscript { } dependencies { - classpath "dev.icerock.moko:resources-generator:0.20.0" + classpath "dev.icerock.moko:resources-generator:0.20.1" } } @@ -63,10 +63,10 @@ project build.gradle apply plugin: "dev.icerock.mobile.multiplatform-resources" dependencies { - commonMainApi("dev.icerock.moko:resources:0.20.0") - androidMainApi("dev.icerock.moko:resources-compose:0.20.0") - jvmMainApi("dev.icerock.moko:resources-compose:0.20.0") - commonTestImplementation("dev.icerock.moko:resources-test:0.20.0") + commonMainApi("dev.icerock.moko:resources:0.20.1") + androidMainApi("dev.icerock.moko:resources-compose:0.20.1") + jvmMainApi("dev.icerock.moko:resources-compose:0.20.1") + commonTestImplementation("dev.icerock.moko:resources-test:0.20.1") } multiplatformResources { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f5c2edb0..f3e28298 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,7 @@ robolectricVersion = "4.8.1" mokoGraphicsVersion = "0.9.0" mokoParcelizeVersion = "0.8.0" mokoTestVersion = "0.5.0" -mokoResourcesVersion = "0.20.0" +mokoResourcesVersion = "0.20.1" mokoMultiplatformPluginVersion = "0.14.1" [libraries]