From c59c88a40472d6e857959ceb4989a2b84a0c6068 Mon Sep 17 00:00:00 2001 From: Konstantin Kostov Date: Tue, 25 Nov 2025 09:35:26 +0100 Subject: [PATCH 1/4] feat: update .gitignore to ignore .idea files --- .gitignore | 3 +- .idea/.gitignore | 3 - .idea/androidTestResultsUserPreferences.xml | 36 ------ .idea/codeStyles/Project.xml | 123 -------------------- .idea/codeStyles/codeStyleConfig.xml | 5 - .idea/compiler.xml | 6 - .idea/deploymentTargetSelector.xml | 13 --- .idea/gradle.xml | 20 ---- .idea/kotlinc.xml | 6 - .idea/migrations.xml | 10 -- .idea/misc.xml | 9 -- .idea/runConfigurations.xml | 17 --- .idea/vcs.xml | 6 - 13 files changed, 2 insertions(+), 255 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/androidTestResultsUserPreferences.xml delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/deploymentTargetSelector.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/kotlinc.xml delete mode 100644 .idea/migrations.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/runConfigurations.xml delete mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore index 734bf56..0a2a7a2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.iml .gradle /local.properties +.idea/ /.idea/caches /.idea/libraries /.idea/modules.xml @@ -71,4 +72,4 @@ outTmp/ /kotlin-native/dist kotlin-ide/ .kotlin/ -.teamcity/ \ No newline at end of file +.teamcity/ diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/androidTestResultsUserPreferences.xml b/.idea/androidTestResultsUserPreferences.xml deleted file mode 100644 index d048f59..0000000 --- a/.idea/androidTestResultsUserPreferences.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 7643783..0000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123..0000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index b589d56..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml deleted file mode 100644 index 30b58be..0000000 --- a/.idea/deploymentTargetSelector.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 9c6ca34..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml deleted file mode 100644 index d4b7acc..0000000 --- a/.idea/kotlinc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml deleted file mode 100644 index f8051a6..0000000 --- a/.idea/migrations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 709c7a2..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 16660f1..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From cbc5f24ef73cd7a11aecae8fffd3c4aae6303168 Mon Sep 17 00:00:00 2001 From: Konstantin Kostov Date: Tue, 25 Nov 2025 10:27:12 +0100 Subject: [PATCH 2/4] feat(pirate metrics): add paywall shown with reason helper --- .../com/telemetrydeck/sdk/TelemetryDeck.kt | 26 +++++++++++++++++++ .../telemetrydeck/sdk/TelemetryDeckClient.kt | 13 ++++++++++ .../com/telemetrydeck/sdk/params/Revenue.kt | 5 ++++ .../com/telemetrydeck/sdk/signals/Revenue.kt | 5 ++++ .../telemetrydeck/sdk/TelemetryDeckTests.kt | 18 +++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 lib/src/main/java/com/telemetrydeck/sdk/params/Revenue.kt create mode 100644 lib/src/main/java/com/telemetrydeck/sdk/signals/Revenue.kt diff --git a/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeck.kt b/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeck.kt index 097a4fd..fec4b83 100644 --- a/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeck.kt +++ b/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeck.kt @@ -5,6 +5,7 @@ import android.content.pm.ApplicationInfo import com.telemetrydeck.sdk.params.Acquisition import com.telemetrydeck.sdk.params.Activation import com.telemetrydeck.sdk.params.Navigation +import com.telemetrydeck.sdk.params.Revenue import com.telemetrydeck.sdk.providers.AccessibilityProvider import com.telemetrydeck.sdk.providers.CalendarParameterProvider import com.telemetrydeck.sdk.providers.DurationSignalTrackerProvider @@ -137,6 +138,23 @@ class TelemetryDeck( ) } + override fun paywallShown( + reason: String, + params: Map, + customUserID: String? + ) { + val signalParams = mergeMapsWithOverwrite( + params, mapOf( + Revenue.PaywallShowReason.paramName to reason + ) + ) + signal( + com.telemetrydeck.sdk.signals.Revenue.PaywallShown.signalName, + params = signalParams, + customUserID = customUserID + ) + } + override suspend fun send( signalType: String, clientUser: String?, @@ -474,6 +492,14 @@ class TelemetryDeck( getInstance()?.coreFeatureUsed(featureName, params, customUserID) } + override fun paywallShown( + reason: String, + params: Map, + customUserID: String? + ) { + getInstance()?.paywallShown(reason, params, customUserID) + } + override suspend fun send( signalType: String, clientUser: String?, diff --git a/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeckClient.kt b/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeckClient.kt index d7ff7ff..e7afc32 100644 --- a/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeckClient.kt +++ b/lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeckClient.kt @@ -232,5 +232,18 @@ interface TelemetryDeckClient { */ fun purchaseCompleted(event: PurchaseEvent, countryCode: String, productID: String, purchaseType: PurchaseType, priceAmountMicros: Long, currencyCode: String, offerID: String? = null, params: Map = emptyMap(), customUserID: String? = null) + /** + * Send a `TelemetryDeck.Revenue.paywallShown` signal with the provided reason. + * + * @param reason The reason why the paywall was shown (e.g., "trial_ended", "feature_locked"). + * @param params A map of additional string key-value pairs that provide further context about the signal. + * @param customUserID An optional string specifying a custom user identifier. + */ + fun paywallShown( + reason: String, + params: Map = emptyMap(), + customUserID: String? = null + ) + val configuration: TelemetryManagerConfiguration? } \ No newline at end of file diff --git a/lib/src/main/java/com/telemetrydeck/sdk/params/Revenue.kt b/lib/src/main/java/com/telemetrydeck/sdk/params/Revenue.kt new file mode 100644 index 0000000..88667ff --- /dev/null +++ b/lib/src/main/java/com/telemetrydeck/sdk/params/Revenue.kt @@ -0,0 +1,5 @@ +package com.telemetrydeck.sdk.params + +internal enum class Revenue(val paramName: String) { + PaywallShowReason("TelemetryDeck.Revenue.paywallShowReason"), +} diff --git a/lib/src/main/java/com/telemetrydeck/sdk/signals/Revenue.kt b/lib/src/main/java/com/telemetrydeck/sdk/signals/Revenue.kt new file mode 100644 index 0000000..6b1fc67 --- /dev/null +++ b/lib/src/main/java/com/telemetrydeck/sdk/signals/Revenue.kt @@ -0,0 +1,5 @@ +package com.telemetrydeck.sdk.signals + +internal enum class Revenue(val signalName: String) { + PaywallShown("TelemetryDeck.Revenue.paywallShown"), +} diff --git a/lib/src/test/java/com/telemetrydeck/sdk/TelemetryDeckTests.kt b/lib/src/test/java/com/telemetrydeck/sdk/TelemetryDeckTests.kt index f1cee44..f6b1481 100644 --- a/lib/src/test/java/com/telemetrydeck/sdk/TelemetryDeckTests.kt +++ b/lib/src/test/java/com/telemetrydeck/sdk/TelemetryDeckTests.kt @@ -264,6 +264,24 @@ class TelemetryDeckTests { Assert.assertEquals("TelemetryDeck.Activation.onboardingCompleted", signal?.type) } + @Test + fun telemetryDeck_paywallShown_sends_signal_with_reason() { + val builder = TelemetryDeck.Builder() + val sut = builder + .appID("32CB6574-6732-4238-879F-582FEBEB6536") + .build(null) + sut.paywallShown("trial_ended") + + val signal = sut.cache?.empty()?.firstOrNull() + + Assert.assertNotNull(signal) + Assert.assertEquals("TelemetryDeck.Revenue.paywallShown", signal?.type) + Assert.assertEquals( + "TelemetryDeck.Revenue.paywallShowReason:trial_ended", + signal?.payload?.firstOrNull { it.startsWith("TelemetryDeck.Revenue.paywallShowReason:") } + ) + } + @Test fun telemetryDeck_addProvider_appends_after_default_providers() { val builder = TelemetryDeck.Builder() From 0549d4bee7ba8a5de70086e0e8afec8ea5fed246 Mon Sep 17 00:00:00 2001 From: Konstantin Kostov Date: Tue, 25 Nov 2025 11:41:51 +0100 Subject: [PATCH 3/4] feat: upgrade Gradle, Kotlin 2.2, adapt used within distinct days count to use a fixed window of 30 days to align with SwiftSDK --- README.md | 6 ++-- gradle/libs.versions.toml | 10 +++---- gradle/wrapper/gradle-wrapper.properties | 3 +- .../sdk/SessionTrackingSignalProviderTest.kt | 30 +++++++++++++++++++ .../providers/CalendarParameterProvider.kt | 9 +++--- .../SessionTrackingSignalProvider.kt | 21 ++++++++----- 6 files changed, 58 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 40700bd..f39b3c4 100644 --- a/README.md +++ b/README.md @@ -45,10 +45,10 @@ dependencies { } ``` -If needed, update your `gradle.settings` to reference Kotlin version compatible with 2.0.20, e.g.: +If needed, update your `gradle.settings` to reference Kotlin version compatible with 2.2.21, e.g.: ``` -id "org.jetbrains.kotlin.android" version "2.0.20" apply false +id "org.jetbrains.kotlin.android" version "2.2.21" apply false ``` ### Permission for internet access @@ -636,7 +636,7 @@ queues and contexts. ## Requirements - Android API 21 or later -- Kotlin 2.0.20 +- Kotlin 2.2.21 - Gradle 6.8.3–8.8\* - AGP 7.1.3–8.5 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 018d53f..cd9b2ba 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] agp = "8.8.0" -kotlin = "2.0.20" +kotlin = "2.2.21" coreKtx = "1.15.0" junit = "4.13.2" junitVersion = "1.2.1" @@ -8,16 +8,16 @@ espressoCore = "3.6.1" lifecycleRuntimeKtx = "2.8.7" activityCompose = "1.10.0" composeBom = "2024.04.01" -ktor = "3.0.2" -kotlinx = "1.7.3" -coroutines = "1.10.1" +ktor = "3.3.2" +kotlinx = "1.9.0" +coroutines = "1.10.2" uiautomator = "2.3.0" vanniktech-publish = "0.30.0" appcompat = "1.7.0" mockk = "1.13.13" robolectric = "4.7.3" androidxTest = "1.6.1" -datetime = "0.6.2" +datetime = "0.7.1" google-play-billing = "7.1.1" [libraries] diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index df97d72..2ea9028 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ +#Tue Nov 25 10:40:49 CET 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/lib/src/androidTest/java/com/telemetrydeck/sdk/SessionTrackingSignalProviderTest.kt b/lib/src/androidTest/java/com/telemetrydeck/sdk/SessionTrackingSignalProviderTest.kt index 74f1646..9d00962 100644 --- a/lib/src/androidTest/java/com/telemetrydeck/sdk/SessionTrackingSignalProviderTest.kt +++ b/lib/src/androidTest/java/com/telemetrydeck/sdk/SessionTrackingSignalProviderTest.kt @@ -286,6 +286,36 @@ class SessionTrackingSignalProviderTest { assertNotNull(session.id) } + @UiThreadTest + @Test + fun distinct_days_used_last_month_uses_30_day_window() { + val now = parseDateString("2025-03-15T00:00:00.000Z") + val sut = createSut(stateFromJson(""" + { + "sessions": [ + { + "firstStart": "2025-02-08T10:00:00.000Z", + "ended": "2025-02-08T10:30:00.000Z", + "durationMillis": 1800000 + } + ], + "distinctDays": [ + "2025-01-10", + "2025-02-13", + "2025-02-14", + "2025-02-16", + "2025-03-10" + ], + "lifetimeSessionsCount": 5 + } + """.trimIndent())) + + sut.handleOnForeground(now) + + val attributes = sut.enrichInternal("signal1", "clientUser", mapOf(), now) + assertEquals("6", attributes[Retention.DistinctDaysUsed.paramName]) + assertEquals("3", attributes[Retention.DistinctDaysUsedLastMonth.paramName]) + } // Helpers diff --git a/lib/src/main/java/com/telemetrydeck/sdk/providers/CalendarParameterProvider.kt b/lib/src/main/java/com/telemetrydeck/sdk/providers/CalendarParameterProvider.kt index 4c98298..da2d1e4 100644 --- a/lib/src/main/java/com/telemetrydeck/sdk/providers/CalendarParameterProvider.kt +++ b/lib/src/main/java/com/telemetrydeck/sdk/providers/CalendarParameterProvider.kt @@ -5,15 +5,16 @@ import android.os.Build import com.telemetrydeck.sdk.TelemetryDeckProvider import com.telemetrydeck.sdk.TelemetryDeckSignalProcessor import com.telemetrydeck.sdk.platform.getCurrentLocale -import kotlinx.datetime.Clock import kotlinx.datetime.TimeZone import kotlinx.datetime.isoDayNumber import kotlinx.datetime.toLocalDateTime +import kotlin.time.Clock import java.lang.ref.WeakReference import java.time.LocalDate import java.time.temporal.IsoFields import java.util.Calendar +@OptIn(kotlin.time.ExperimentalTime::class) class CalendarParameterProvider : TelemetryDeckProvider { private var app: WeakReference? = null private var manager: WeakReference? = null @@ -46,10 +47,10 @@ class CalendarParameterProvider : TelemetryDeckProvider { val signalPayload = additionalPayload.toMutableMap() val now = Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()) - signalPayload[com.telemetrydeck.sdk.params.Calendar.DayOfMonth.paramName] = "${now.dayOfMonth}" + signalPayload[com.telemetrydeck.sdk.params.Calendar.DayOfMonth.paramName] = "${now.day}" signalPayload[com.telemetrydeck.sdk.params.Calendar.DayOfWeek.paramName] = "${now.dayOfWeek.isoDayNumber}" signalPayload[com.telemetrydeck.sdk.params.Calendar.DayOfYear.paramName] = "${now.dayOfYear}" - signalPayload[com.telemetrydeck.sdk.params.Calendar.MonthOfYear.paramName] = "${now.monthNumber}" + signalPayload[com.telemetrydeck.sdk.params.Calendar.MonthOfYear.paramName] = "${now.month.ordinal + 1}" signalPayload[com.telemetrydeck.sdk.params.Calendar.HourOfDay.paramName] = "${now.hour}" // Note: isWeekend only accounts for Sat-Sun counties @@ -61,7 +62,7 @@ class CalendarParameterProvider : TelemetryDeckProvider { signalPayload[com.telemetrydeck.sdk.params.Calendar.QuarterOfYear.paramName] = "${currentDate.get(IsoFields.QUARTER_OF_YEAR)}" } else { // falling back to simple 3 month approach - val quarterNumber = when (now.monthNumber) { + val quarterNumber = when (now.month.ordinal + 1) { in 1..3 -> 1 in 4..6 -> 2 in 7..9 -> 3 diff --git a/lib/src/main/java/com/telemetrydeck/sdk/providers/SessionTrackingSignalProvider.kt b/lib/src/main/java/com/telemetrydeck/sdk/providers/SessionTrackingSignalProvider.kt index 96208fa..f34d16e 100644 --- a/lib/src/main/java/com/telemetrydeck/sdk/providers/SessionTrackingSignalProvider.kt +++ b/lib/src/main/java/com/telemetrydeck/sdk/providers/SessionTrackingSignalProvider.kt @@ -18,7 +18,6 @@ import kotlinx.serialization.Serializable import java.lang.ref.WeakReference import java.text.DateFormat import java.text.SimpleDateFormat -import java.util.Calendar import java.util.Date import java.util.Locale import java.util.UUID @@ -78,9 +77,18 @@ class SessionTrackingSignalProvider: TelemetryDeckSessionManagerProvider, Defaul signalType: String, clientUser: String?, additionalPayload: Map + ): Map { + return enrichInternal(signalType, clientUser, additionalPayload, Date()) + } + + internal fun enrichInternal( + signalType: String, + clientUser: String?, + additionalPayload: Map, + now: Date ): Map { val signalPayload = additionalPayload.toMutableMap() - for (item in createMetadata()) { + for (item in createMetadata(now)) { if (!signalPayload.containsKey(item.key)) { signalPayload[item.key] = item.value } @@ -88,17 +96,14 @@ class SessionTrackingSignalProvider: TelemetryDeckSessionManagerProvider, Defaul return signalPayload } - private fun createMetadata(): Map { + private fun createMetadata(now: Date): Map { val currentState = this.providerState?.copy() ?: return emptyMap() - // list distinct days which are "last month" val daysLastMonth = currentState.distinctDays.filter { val day = dateFormat.parse(it) if (day != null) { - val calendar = Calendar.getInstance() - calendar.add(Calendar.MONTH, -1) - val lastMonth = calendar.time - day.after(lastMonth) && day.before(Date()) + val thirtyDaysAgo = Date(now.time - (30L * 24L * 60L * 60L * 1000L)) + day.after(thirtyDaysAgo) && day.before(now) } else { false } From 692ab61a79c529d0fc465f846f42695c793fbc42 Mon Sep 17 00:00:00 2001 From: Konstantin Kostov Date: Tue, 25 Nov 2025 12:05:34 +0100 Subject: [PATCH 4/4] feat: apg upgrade 8.13, minSdk 23 --- google-services/build.gradle.kts | 11 ++++------- gradle/libs.versions.toml | 26 +++++++++++++------------- lib/build.gradle.kts | 11 ++++------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/google-services/build.gradle.kts b/google-services/build.gradle.kts index 0b891ab..25b4092 100644 --- a/google-services/build.gradle.kts +++ b/google-services/build.gradle.kts @@ -1,6 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode -import com.vanniktech.maven.publish.SonatypeHost - plugins { alias(libs.plugins.androidLibrary) alias(libs.plugins.kotlin.android) @@ -8,21 +5,21 @@ plugins { } android { - compileSdk = 35 + compileSdk = 36 defaultConfig { - minSdk = 21 + minSdk = 23 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } lint { - targetSdk = 34 + targetSdk = 35 } @Suppress("UnstableApiUsage") testOptions { - targetSdk = 34 + targetSdk = 35 } buildTypes { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index cd9b2ba..76307df 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,24 +1,24 @@ [versions] -agp = "8.8.0" +agp = "8.13.1" kotlin = "2.2.21" -coreKtx = "1.15.0" +coreKtx = "1.17.0" junit = "4.13.2" -junitVersion = "1.2.1" -espressoCore = "3.6.1" -lifecycleRuntimeKtx = "2.8.7" -activityCompose = "1.10.0" -composeBom = "2024.04.01" +junitVersion = "1.3.0" +espressoCore = "3.7.0" +lifecycleRuntimeKtx = "2.10.0" +activityCompose = "1.12.0" +composeBom = "2024.09.00" ktor = "3.3.2" kotlinx = "1.9.0" coroutines = "1.10.2" uiautomator = "2.3.0" -vanniktech-publish = "0.30.0" -appcompat = "1.7.0" -mockk = "1.13.13" -robolectric = "4.7.3" -androidxTest = "1.6.1" +vanniktech-publish = "0.35.0" +appcompat = "1.7.1" +mockk = "1.14.6" +robolectric = "4.16" +androidxTest = "1.7.0" datetime = "0.7.1" -google-play-billing = "7.1.1" +google-play-billing = "8.1.0" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index 464aa9d..7df6366 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -1,6 +1,3 @@ -import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode -import com.vanniktech.maven.publish.SonatypeHost - plugins { alias(libs.plugins.androidLibrary) alias(libs.plugins.kotlin.android) @@ -9,21 +6,21 @@ plugins { } android { - compileSdk = 35 + compileSdk = 36 defaultConfig { - minSdk = 21 + minSdk = 23 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") } lint { - targetSdk = 34 + targetSdk = 35 } @Suppress("UnstableApiUsage") testOptions { - targetSdk = 34 + targetSdk = 35 } buildTypes {