mirror of
https://github.com/divkit/divkit.git
synced 2026-05-07 20:02:32 +00:00
set up android platform as default for kmp publications
commit_hash:35b785757b0000d02307fe650b4f62d8c347a43c
This commit is contained in:
@@ -589,6 +589,11 @@
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/FileExtensions.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/FileExtensions.kt",
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/PublicationType.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/PublicationType.kt",
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/Version.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/Version.kt",
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/XmlUtils.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/XmlUtils.kt",
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/aar/UnpackedStubAarTask.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/aar/UnpackedStubAarTask.kt",
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/aar/ZipStubAarTask.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/aar/ZipStubAarTask.kt",
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/multiplatform/Platforms.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/multiplatform/Platforms.kt",
|
||||
"client/android/buildSrc/src/main/java/com/yandex/div/gradle/multiplatform/PomUtils.kt":"divkit/public/client/android/buildSrc/src/main/java/com/yandex/div/gradle/multiplatform/PomUtils.kt",
|
||||
"client/android/coil/build.gradle":"divkit/public/client/android/coil/build.gradle",
|
||||
"client/android/coil/proguard-rules.pro":"divkit/public/client/android/coil/proguard-rules.pro",
|
||||
"client/android/coil/src/main/java/com/yandex/div/coil/CoilDivImageLoader.kt":"divkit/public/client/android/coil/src/main/java/com/yandex/div/coil/CoilDivImageLoader.kt",
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.BOOLEAN
|
||||
import com.yandex.div.gradle.aar.UnpackedStubAarTask
|
||||
import com.yandex.div.gradle.aar.ZipStubAarTask
|
||||
import com.yandex.div.gradle.multiplatform.PlatformIdentifier
|
||||
import com.yandex.div.gradle.multiplatform.configureDefaultKmpDependencies
|
||||
import java.lang.Boolean.parseBoolean
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.android.kotlin.multiplatform.library)
|
||||
alias(libs.plugins.buildkonfig)
|
||||
alias(libs.plugins.kotlin.multiplatform)
|
||||
id("maven-publish")
|
||||
}
|
||||
|
||||
apply(from = "../kmp-library.gradle")
|
||||
@@ -23,3 +28,39 @@ buildkonfig {
|
||||
buildConfigField(BOOLEAN, "DISABLE_ASSERTS", "${providers.gradleProperty("disableAssertsInBuild").map(::parseBoolean).get()}")
|
||||
}
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
publishing {
|
||||
publications {
|
||||
withType<MavenPublication>().configureEach {
|
||||
if (name == "kotlinMultiplatform") {
|
||||
val buildDir = project.layout.buildDirectory
|
||||
val minSdk = rootProject.ext["minSdkVersion"] as Int
|
||||
|
||||
val groupNamespace = project.group.toString().replace(':', '.')
|
||||
val moduleNamespace = project.name.replace('-', '.')
|
||||
val stubNamespace = "$groupNamespace.$moduleNamespace.anchor"
|
||||
|
||||
val unpackedStubAarTask = tasks.register<UnpackedStubAarTask>("unpackedStubAar") {
|
||||
aarPackage.set(stubNamespace)
|
||||
minSdkVersion.set(minSdk)
|
||||
outputDir.set(buildDir.dir("intermediates/stub-aar"))
|
||||
}
|
||||
val stubAarTask = tasks.register<ZipStubAarTask>("stubAar") {
|
||||
from(unpackedStubAarTask.flatMap { it.outputDir })
|
||||
destinationDirectory.set(buildDir.dir("outputs"))
|
||||
archiveExtension.set("aar")
|
||||
}
|
||||
artifact(stubAarTask)
|
||||
|
||||
pom {
|
||||
packaging = "aar"
|
||||
withXml {
|
||||
configureDefaultKmpDependencies(this@withXml, PlatformIdentifier.ANDROID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.yandex.div.gradle
|
||||
|
||||
import org.w3c.dom.Element
|
||||
import org.w3c.dom.Node
|
||||
|
||||
internal fun Node.appendElement(
|
||||
tagName: String,
|
||||
textValue: String? = null,
|
||||
): Element {
|
||||
val element = ownerDocument.createElement(tagName)
|
||||
appendChild(element)
|
||||
|
||||
if (textValue != null) {
|
||||
val textNode = ownerDocument.createTextNode(textValue)
|
||||
element.appendChild(textNode)
|
||||
}
|
||||
return element
|
||||
}
|
||||
|
||||
internal fun Node.find(predicate: (Node) -> Boolean): Node? {
|
||||
children().forEach { node ->
|
||||
if (predicate(node)) {
|
||||
return node
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
internal fun Node.children(): Iterable<Node> = object : Iterable<Node> {
|
||||
override fun iterator() = childrenIterator()
|
||||
}
|
||||
|
||||
private fun Node.childrenIterator(): Iterator<Node> = object : Iterator<Node> {
|
||||
|
||||
private var current = firstChild
|
||||
|
||||
override fun hasNext() = current != null
|
||||
|
||||
override fun next(): Node {
|
||||
val next = current
|
||||
current = current!!.nextSibling
|
||||
return next
|
||||
}
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package com.yandex.div.gradle.aar
|
||||
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.OutputDirectory
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.gradle.work.DisableCachingByDefault
|
||||
import org.intellij.lang.annotations.Language
|
||||
import java.io.File
|
||||
|
||||
@DisableCachingByDefault
|
||||
abstract class UnpackedStubAarTask : DefaultTask() {
|
||||
|
||||
@get:Input abstract val aarPackage: Property<String>
|
||||
@get:Input abstract val minSdkVersion: Property<Int>
|
||||
@get:OutputDirectory abstract val outputDir: DirectoryProperty
|
||||
|
||||
@TaskAction
|
||||
fun generate() {
|
||||
val outputDir = outputDir.asFile.get()
|
||||
outputDir.deleteRecursively()
|
||||
outputDir.mkdirs()
|
||||
|
||||
val manifestFile = File("$outputDir/AndroidManifest.xml")
|
||||
val aarPackage = aarPackage.get()
|
||||
@Language("xml")
|
||||
val manifestText = """
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="$aarPackage">
|
||||
<uses-sdk android:minSdkVersion="${minSdkVersion.get()}"/>
|
||||
</manifest>""".trimIndent()
|
||||
|
||||
manifestFile.writeText(manifestText)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.yandex.div.gradle.aar
|
||||
|
||||
import org.gradle.api.tasks.bundling.Zip
|
||||
import org.gradle.work.DisableCachingByDefault
|
||||
|
||||
@DisableCachingByDefault
|
||||
abstract class ZipStubAarTask : Zip()
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package com.yandex.div.gradle.multiplatform
|
||||
|
||||
enum class PlatformGroup {
|
||||
JVM,
|
||||
IOS;
|
||||
}
|
||||
|
||||
enum class PlatformIdentifier(
|
||||
val id: String,
|
||||
val group: PlatformGroup
|
||||
) {
|
||||
JVM("jvm", PlatformGroup.JVM),
|
||||
ANDROID("android", PlatformGroup.JVM),
|
||||
IOS_ARM_64("iosarm64", PlatformGroup.IOS),
|
||||
IOS_X_64("iosx64", PlatformGroup.IOS),
|
||||
IOS_SIMULATOR_ARM_64("iossimulatorarm64", PlatformGroup.IOS);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.yandex.div.gradle.multiplatform
|
||||
|
||||
import com.yandex.div.gradle.appendElement
|
||||
import com.yandex.div.gradle.find
|
||||
import org.gradle.api.XmlProvider
|
||||
|
||||
fun configureDefaultKmpDependencies(xml: XmlProvider, platformId: PlatformIdentifier) {
|
||||
val xmlElement = xml.asElement()
|
||||
val groupId = xmlElement.find { it.nodeName == "groupId" }?.textContent
|
||||
?: throw IllegalArgumentException("Failed to locate groupId node")
|
||||
val artifactId = xmlElement.find { it.nodeName == "artifactId" }?.textContent
|
||||
?: throw IllegalArgumentException("Failed to locate artifactId node")
|
||||
val version = xmlElement.find { it.nodeName == "version" }?.textContent
|
||||
?: throw IllegalArgumentException("Failed to locate version node")
|
||||
|
||||
val dependencies = xmlElement.find { it.nodeName == "dependencies" }
|
||||
?: xmlElement.appendElement("dependencies")
|
||||
dependencies.appendElement("dependency").apply {
|
||||
appendElement("groupId", groupId)
|
||||
appendElement("artifactId", "$artifactId-${platformId.id}")
|
||||
appendElement("version", version)
|
||||
if (platformId == PlatformIdentifier.ANDROID) {
|
||||
appendElement("type", "aar")
|
||||
}
|
||||
appendElement("scope", "compile")
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,15 @@
|
||||
import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.BOOLEAN
|
||||
import com.yandex.div.gradle.aar.UnpackedStubAarTask
|
||||
import com.yandex.div.gradle.aar.ZipStubAarTask
|
||||
import com.yandex.div.gradle.multiplatform.PlatformIdentifier
|
||||
import com.yandex.div.gradle.multiplatform.configureDefaultKmpDependencies
|
||||
import java.lang.Boolean.parseBoolean
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.android.kotlin.multiplatform.library)
|
||||
alias(libs.plugins.buildkonfig)
|
||||
alias(libs.plugins.kotlin.multiplatform)
|
||||
id("maven-publish")
|
||||
}
|
||||
|
||||
apply(from = "../kmp-library.gradle")
|
||||
@@ -23,3 +28,39 @@ buildkonfig {
|
||||
buildConfigField(BOOLEAN, "DISABLE_LOGS", "${providers.gradleProperty("disableLogsInBuild").map(::parseBoolean).get()}")
|
||||
}
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
publishing {
|
||||
publications {
|
||||
withType<MavenPublication>().configureEach {
|
||||
if (name == "kotlinMultiplatform") {
|
||||
val buildDir = project.layout.buildDirectory
|
||||
val minSdk = rootProject.ext["minSdkVersion"] as Int
|
||||
|
||||
val groupNamespace = project.group.toString().replace(':', '.')
|
||||
val moduleNamespace = project.name.replace('-', '.')
|
||||
val stubNamespace = "$groupNamespace.$moduleNamespace.anchor"
|
||||
|
||||
val unpackedStubAarTask = tasks.register<UnpackedStubAarTask>("unpackedStubAar") {
|
||||
aarPackage.set(stubNamespace)
|
||||
minSdkVersion.set(minSdk)
|
||||
outputDir.set(buildDir.dir("intermediates/stub-aar"))
|
||||
}
|
||||
val stubAarTask = tasks.register<ZipStubAarTask>("stubAar") {
|
||||
from(unpackedStubAarTask.flatMap { it.outputDir })
|
||||
destinationDirectory.set(buildDir.dir("outputs"))
|
||||
archiveExtension.set("aar")
|
||||
}
|
||||
artifact(stubAarTask)
|
||||
|
||||
pom {
|
||||
packaging = "aar"
|
||||
withXml {
|
||||
configureDefaultKmpDependencies(this@withXml, PlatformIdentifier.ANDROID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ afterEvaluate {
|
||||
|
||||
publishing {
|
||||
publications {
|
||||
release(MavenPublication) {
|
||||
withType(MavenPublication).configureEach {
|
||||
pom {
|
||||
name = "DivKit"
|
||||
description = "DivKit is an open source Server-Driven UI (SDUI) framework. SDUI is a an emerging technique that leverage the server to build the user interfaces of their mobile app."
|
||||
|
||||
Reference in New Issue
Block a user