Migrate to Android Gradle Plugin 9

This commit is contained in:
MM20
2026-03-28 16:02:54 +01:00
parent dfad063811
commit 37fa1697dd
59 changed files with 31 additions and 179 deletions

View File

@@ -1,11 +1,9 @@
import android.annotation.SuppressLint
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
android {
@@ -31,7 +29,6 @@ android {
applicationId = "de.mm20.launcher2"
minSdk = libs.versions.minSdk.get().toInt()
targetSdk = libs.versions.targetSdk.get().toInt()
@SuppressLint("HighAppVersionCode")
versionCode = System.getenv("VERSION_CODE_OVERRIDE")?.toIntOrNull() ?: 2026012400
versionName = "1.39.3"
signingConfig = signingConfigs.getByName("debug")
@@ -49,12 +46,8 @@ android {
buildTypes {
release {
applicationIdSuffix = ".release"
postprocessing {
isRemoveUnusedCode = true
isObfuscate = false
isOptimizeCode = true
}
isMinifyEnabled = false
isShrinkResources = false
}
debug {
applicationIdSuffix = ".debug"
@@ -67,11 +60,8 @@ android {
versionNameSuffix = "-${LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"))}-nightly"
signingConfig = signingConfigs.findByName("gh-actions")
postprocessing {
isRemoveUnusedCode = true
isObfuscate = false
isOptimizeCode = true
}
isMinifyEnabled = false
isShrinkResources = false
}
flavorDimensions += "variant"
@@ -100,6 +90,9 @@ android {
abortOnError = false
}
namespace = "de.mm20.launcher2"
buildFeatures {
buildConfig = true
}
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.kotlin.plugin.compose)
}
@@ -60,6 +59,7 @@ android {
buildFeatures {
compose = true
viewBinding = true
buildConfig = true
}
lint {
@@ -86,7 +86,6 @@ dependencies {
implementation(libs.androidx.navigation3.ui)
implementation(libs.androidx.compose.material3adaptive.navigation3)
implementation(libs.jsoup)
implementation(libs.markdown)
implementation(libs.accompanist.systemuicontroller)
@@ -107,8 +106,6 @@ dependencies {
implementation(libs.androidx.lifecycle.viewmodelcompose)
implementation(libs.androidx.lifecycle.runtimecompose)
implementation(libs.jsoup)
implementation(libs.koin.android)
implementation(libs.koin.androidxcompose)

View File

@@ -1,105 +0,0 @@
package de.mm20.launcher2.ui.utils
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.BaselineShift
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextIndent
import androidx.compose.ui.unit.em
import org.jsoup.Jsoup
import org.jsoup.nodes.Element
import org.jsoup.nodes.TextNode
fun htmlToAnnotatedString(html: String): AnnotatedString {
val document = Jsoup.parse(html.replace("\n", ""))
return buildAnnotatedString {
addNodes(this, document)
}
}
private val blockElements = arrayOf("p", "h1", "h2", "h3", "h4", "h5", "h6", "li", "pre")
private val inlineElements = arrayOf("i", "b", "strong", "em", "sup", "sub", "u", "s", "code", "br")
/**
* @param inParagraph: ParagraphStyles may not be nested, this parameter indicates if we are already inside a paragraph
*/
private fun addNodes(builder: AnnotatedString.Builder, element: Element, inParagraph: Boolean = false) {
val tagName = element.tag().normalName()
when {
blockElements.contains(tagName) -> {
val spanStyle = SpanStyle(
fontSize = when (tagName) {
"h1" -> 2.em
"h2" -> 1.75.em
"h3" -> 1.5.em
"h4" -> 1.25.em
"h5" -> 1.125.em
"h6" -> 1.em
else -> 1.em
},
fontWeight = if (tagName.matches(Regex("h[1-6]"))) FontWeight.Bold else FontWeight.Normal,
fontFamily = if (tagName == "pre") FontFamily.Monospace else null
)
if (!inParagraph) {
builder.withStyle(ParagraphStyle(
textIndent = if (tagName == "li") TextIndent(0.em, 1.em) else TextIndent.None
)) {
withStyle(
spanStyle
) {
if (tagName == "li") builder.append("")
children(builder, element, true)
}
}
} else {
builder.append("\n")
builder.withStyle(
spanStyle
) {
if (tagName == "li") builder.append("")
children(builder, element, true)
}
}
}
inlineElements.contains(tagName) -> {
builder.withStyle(
SpanStyle(
fontStyle = if (tagName == "i" || tagName == "em") FontStyle.Italic else FontStyle.Normal,
fontWeight = if (tagName == "b" || tagName == "strong") FontWeight.Bold else FontWeight.Normal,
textDecoration = when (tagName) {
"u" -> TextDecoration.Underline
"s" -> TextDecoration.LineThrough
else -> TextDecoration.None
},
baselineShift = when (tagName) {
"sup" -> BaselineShift.Superscript
"sub" -> BaselineShift.Subscript
else -> BaselineShift.None
},
fontFamily = if (tagName == "code") FontFamily.Monospace else null
)
) {
if(tagName == "br") builder.append("\n")
children(builder, element, inParagraph)
}
}
else -> {
children(builder, element, inParagraph)
}
}
}
private fun children(builder: AnnotatedString.Builder, element: Element, inParagraph: Boolean) {
for (node in element.childNodes()) {
if (node is TextNode) {
builder.append(node.text())
}
if (node is Element) {
addNodes(builder, node, inParagraph)
}
}
}

View File

@@ -1,5 +1,4 @@
plugins {
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.kotlin.plugin.serialization) apply false
alias(libs.plugins.ksp) apply false
alias(libs.plugins.android.application) apply false

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}
@@ -40,6 +39,9 @@ android {
}
}
namespace = "de.mm20.launcher2.base"
buildFeatures {
buildConfig = true
}
}
dependencies {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {
@@ -35,6 +34,9 @@ android {
}
}
namespace = "de.mm20.launcher2.crashreporter"
buildFeatures {
buildConfig = true
}
}
dependencies {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.dokka)
`maven-publish`

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -0,0 +1,3 @@
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.google.re2j.Matcher
-dontwarn com.google.re2j.Pattern

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -0,0 +1,3 @@
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.google.re2j.Matcher
-dontwarn com.google.re2j.Pattern

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -18,8 +18,5 @@ android.injected.testOnly=false
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
android.enableR8.fullMode=false
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false
org.gradle.configuration-cache=true

View File

@@ -9,7 +9,7 @@ targetSdk = "36"
pluginSdk = "2.2.0"
gradle = "8.1.2"
android-gradle-plugin = "8.13.2"
android-gradle-plugin = "9.1.0"
ksp-gradle-plugin = "2.3.4"
kotlin = "2.3.20"

View File

@@ -1,6 +1,7 @@
#Sun Feb 09 12:41:42 CET 2025
#Sat Mar 28 15:03:15 CET 2026
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
distributionSha256Sum=b266d5ff6b90eada6dc3b20cb090e3731302e553a27c5d3e4df1f0d76beaff06
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.kotlin.plugin.compose)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.kotlin.plugin.compose)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
alias(libs.plugins.dokka)
`maven-publish`

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.plugin.serialization)
}
@@ -38,6 +37,7 @@ android {
buildFeatures {
aidl = true
buildConfig = true
}
namespace = "de.mm20.launcher2.feed"

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {
@@ -35,6 +34,9 @@ android {
}
}
namespace = "de.mm20.launcher2.icons"
buildFeatures {
buildConfig = true
}
}
dependencies {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -0,0 +1,3 @@
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.google.re2j.Matcher
-dontwarn com.google.re2j.Pattern

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {

View File

@@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
alias(libs.plugins.android.library)
alias(libs.plugins.kotlin.android)
}
android {