From 654d33e9b768d98c2cbc7f00016543faae5888ea Mon Sep 17 00:00:00 2001 From: Ashik Abbas Date: Fri, 14 Aug 2026 11:03:59 +0530 Subject: [PATCH 1/4] integrate startup-runtime lib Rebase with main branch --- ApiDemos/project/common-ui/build.gradle.kts | 3 +- FireMarkers/app/build.gradle.kts | 1 + README.md | 18 +++ WearOS/Wearable/build.gradle.kts | 1 + gradle/libs.versions.toml | 6 + library/.gitignore | 1 + library/build.gradle.kts | 116 ++++++++++++++++++ library/consumer-rules.pro | 0 library/proguard-rules.pro | 21 ++++ library/src/main/AndroidManifest.xml | 34 +++++ .../attribution/AttributionIdInitializer.kt | 42 +++++++ .../utils/AttributionIdInitializerTest.kt | 62 ++++++++++ settings.gradle.kts | 1 + snippets/app-compose/build.gradle.kts | 1 + snippets/app-places-ktx/build.gradle.kts | 1 + snippets/app-utils-ktx/build.gradle.kts | 0 snippets/app-utils/build.gradle.kts | 0 snippets/java-app/build.gradle.kts | 1 + snippets/kotlin-app/build.gradle.kts | 1 + .../kotlin/Polygons/app/build.gradle.kts | 1 + 20 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 library/.gitignore create mode 100644 library/build.gradle.kts create mode 100644 library/consumer-rules.pro create mode 100644 library/proguard-rules.pro create mode 100644 library/src/main/AndroidManifest.xml create mode 100644 library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt create mode 100644 library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt create mode 100644 snippets/app-utils-ktx/build.gradle.kts create mode 100644 snippets/app-utils/build.gradle.kts diff --git a/ApiDemos/project/common-ui/build.gradle.kts b/ApiDemos/project/common-ui/build.gradle.kts index 36f0235ef..2580bbcd3 100644 --- a/ApiDemos/project/common-ui/build.gradle.kts +++ b/ApiDemos/project/common-ui/build.gradle.kts @@ -66,11 +66,12 @@ android { } dependencies { + api(project(":library")) implementation(libs.core.ktx) implementation(libs.appcompat) implementation(libs.material) implementation(libs.play.services.maps) - + // Jetpack Compose implementation(platform(libs.compose.bom)) implementation(libs.ui) diff --git a/FireMarkers/app/build.gradle.kts b/FireMarkers/app/build.gradle.kts index 07c5df06c..0e7257fd9 100644 --- a/FireMarkers/app/build.gradle.kts +++ b/FireMarkers/app/build.gradle.kts @@ -98,6 +98,7 @@ android { } dependencies { + api(project(":library")) // --------------------------------------------------------------------------------------------- // AndroidX & Jetpack // diff --git a/README.md b/README.md index c6f48ea96..20e535737 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,24 @@ To run instrumentation tests on a connected device or emulator, use: Alternatively, use the `gradlew build` command to build the project directly or download an APK under [releases](https://github.com/googlemaps/android-samples/releases). +## Internal usage attribution ID + +This library calls the `addInternalUsageAttributionId` method, which helps Google understand which libraries and samples are helpful to developers and is optional. Instructions for opting out of the identifier are provided below. + +If you wish to disable this, you can do so by removing the initializer in your `AndroidManifest.xml` using the `tools:node="remove"` attribute: + +```xml + + + +``` + ## Contributing Contributions are welcome and encouraged! If you'd like to contribute, send us a [pull request] and refer to our [code of conduct] and [contributing guide]. diff --git a/WearOS/Wearable/build.gradle.kts b/WearOS/Wearable/build.gradle.kts index b1e2f174b..9e45bbe77 100644 --- a/WearOS/Wearable/build.gradle.kts +++ b/WearOS/Wearable/build.gradle.kts @@ -59,6 +59,7 @@ android { // [START maps_wear_os_dependencies] dependencies { + api(project(":library")) // [START_EXCLUDE] implementation(libs.core.ktx) implementation(platform(libs.kotlin.bom)) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index db4c4b7b9..fe8deb8f9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -62,6 +62,7 @@ androidxTestRules = "1.7.0" truth = "1.4.5" turbine = "1.2.1" uiautomator = "2.4.0" +mockk = "1.14.11" # Firebase firebaseBom = "34.19.0" @@ -73,12 +74,16 @@ volley = "1.2.1" ktor = "3.6.0" kotlinxSerialization = "1.11.0" +#Tracker lib +startup-runtime = "1.2.0" + [libraries] # Kotlin kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "kotlin" } kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinxDatetime" } +startup-runtime = { module = "androidx.startup:startup-runtime", version.ref = "startup-runtime" } # AndroidX activity = { module = "androidx.activity:activity", version.ref = "activity" } @@ -145,6 +150,7 @@ turbine = { module = "app.cash.turbine:turbine", version.ref = "turbine" } ui-test-junit4 = { module = "androidx.compose.ui:ui-test-junit4", version.ref = "compose" } ui-test-manifest = { module = "androidx.compose.ui:ui-test-manifest", version.ref = "compose" } uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" } +mockk = { module = "io.mockk:mockk", version.ref = "mockk" } # Firebase firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBom" } diff --git a/library/.gitignore b/library/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/library/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/library/build.gradle.kts b/library/build.gradle.kts new file mode 100644 index 000000000..09e4b28a0 --- /dev/null +++ b/library/build.gradle.kts @@ -0,0 +1,116 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + alias(libs.plugins.android.library) +} + +android { + namespace = "com.example.library" + compileSdk = libs.versions.compileSdk.get().toInt() + + defaultConfig { + minSdk = libs.versions.minSdk.get().toInt() + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + lint { + abortOnError = false + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + lint { + disable += setOf("MissingInflatedId", "OnClick") + sarifOutput = layout.buildDirectory.file("reports/lint-results-debug.sarif").get().asFile + } + kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + javaParameters.set(true) + } + } +} + +dependencies { + implementation(libs.appcompat) + implementation(libs.core.ktx) + implementation(libs.material) + implementation(libs.startup.runtime) + implementation(libs.play.services.maps) + testImplementation(libs.junit) + testImplementation(libs.robolectric) + testImplementation(libs.mockk) + testImplementation(libs.espresso.core) +} + + +abstract class GenerateArtifactIdTask : DefaultTask() { + @get:OutputDirectory + abstract val outputDir: DirectoryProperty + + @get:Input + abstract val version: Property + + @TaskAction + fun generate() { + val dir = outputDir.get().asFile + val packageName = "com.example.library.utils.meta" + val packagePath = packageName.replace('.', '/') + val outputFile = File(dir, "$packagePath/ArtifactId.kt") + outputFile.parentFile.mkdirs() + val attributionId = "gmp_git_androidsamples_v${version.get()}" + outputFile.writeText( + """ + package $packageName + + /** + * Automatically generated object containing the library's attribution ID. + * This is used to track library usage for analytics. + */ + public object AttributionId { + public const val VALUE: String = "$attributionId" + } + """.trimIndent() + ) + } +} + +val generateArtifactIdFile = tasks.register("generateArtifactIdFile") { + outputDir.set(layout.buildDirectory.dir("generated/source/artifactId")) + version.set(libs.versions.versionName.get()) +} + +androidComponents { + onVariants { variant -> + variant.sources.java?.addGeneratedSourceDirectory( + generateArtifactIdFile, + GenerateArtifactIdTask::outputDir + ) + } +} diff --git a/library/consumer-rules.pro b/library/consumer-rules.pro new file mode 100644 index 000000000..e69de29bb diff --git a/library/proguard-rules.pro b/library/proguard-rules.pro new file mode 100644 index 000000000..481bb4348 --- /dev/null +++ b/library/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml new file mode 100644 index 000000000..a0aa501d8 --- /dev/null +++ b/library/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt b/library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt new file mode 100644 index 000000000..5e53aa8a8 --- /dev/null +++ b/library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.library.utils.attribution + +import android.content.Context +import androidx.annotation.Keep +import androidx.startup.Initializer +import com.example.library.utils.meta.AttributionId +import com.google.android.gms.maps.MapsApiSettings + +/** + * Adds a usage attribution ID to the initializer, which helps Google understand which libraries + * and samples are helpful to developers, such as usage of this library. + * To opt out of sending the usage attribution ID, please remove this initializer from your manifest. + */ +@Keep +internal class AttributionIdInitializer : Initializer { + override fun create(context: Context) { + // See [AttributionIdInitializer] + MapsApiSettings.addInternalUsageAttributionId( + // context = + context, + // internalUsageAttributionId = + AttributionId.VALUE, + ) + } + + override fun dependencies(): List>> = emptyList() +} diff --git a/library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt b/library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt new file mode 100644 index 000000000..16cfad4a5 --- /dev/null +++ b/library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt @@ -0,0 +1,62 @@ +/* + * Copyright 2026 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.library.utils + +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import com.example.library.utils.attribution.AttributionIdInitializer +import com.example.library.utils.meta.AttributionId +import com.google.android.gms.maps.MapsApiSettings +import io.mockk.every +import io.mockk.just +import io.mockk.mockkStatic +import io.mockk.runs +import io.mockk.unmockkStatic +import io.mockk.verify +import org.junit.After +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner + +@RunWith(RobolectricTestRunner::class) +class AttributionIdInitializerTest { + @Before + fun setUp() { + mockkStatic(MapsApiSettings::class) + every { MapsApiSettings.addInternalUsageAttributionId(any(), any()) } just runs + } + + @After + fun tearDown() { + unmockkStatic(MapsApiSettings::class) + } + + @Test + fun `create adds internal usage attribution id`() { + val context = ApplicationProvider.getApplicationContext() + val initializer = AttributionIdInitializer() + + initializer.create(context) + + verify { + MapsApiSettings.addInternalUsageAttributionId( + context, + AttributionId.VALUE, + ) + } + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 85c6773da..495928dbd 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -70,6 +70,7 @@ project(":snippets:app-places-ktx").projectDir = file("snippets/app-places-ktx") include(":tutorials:kotlin:Polygons") project(":tutorials:kotlin:Polygons").projectDir = file("tutorials/kotlin/Polygons/app") // Add others as needed, starting with these for now +include(":library") // Visual Testing include(":visual-testing") diff --git a/snippets/app-compose/build.gradle.kts b/snippets/app-compose/build.gradle.kts index ac25bf249..ea2dbe701 100644 --- a/snippets/app-compose/build.gradle.kts +++ b/snippets/app-compose/build.gradle.kts @@ -72,6 +72,7 @@ android { // [START maps_android_compose_dependency] dependencies { + api(project(":library")) // [START_EXCLUDE silent] implementation(libs.kotlin.stdlib) implementation(libs.core.ktx) diff --git a/snippets/app-places-ktx/build.gradle.kts b/snippets/app-places-ktx/build.gradle.kts index 1076d3b21..db17edf79 100644 --- a/snippets/app-places-ktx/build.gradle.kts +++ b/snippets/app-places-ktx/build.gradle.kts @@ -70,6 +70,7 @@ android { // [START places_android_ktx_install_snippet] dependencies { + api(project(":library")) // [START_EXCLUDE silent] implementation(libs.core.ktx) implementation(libs.appcompat) diff --git a/snippets/app-utils-ktx/build.gradle.kts b/snippets/app-utils-ktx/build.gradle.kts new file mode 100644 index 000000000..e69de29bb diff --git a/snippets/app-utils/build.gradle.kts b/snippets/app-utils/build.gradle.kts new file mode 100644 index 000000000..e69de29bb diff --git a/snippets/java-app/build.gradle.kts b/snippets/java-app/build.gradle.kts index f6a60e1de..30a557c7c 100644 --- a/snippets/java-app/build.gradle.kts +++ b/snippets/java-app/build.gradle.kts @@ -62,6 +62,7 @@ android { // [START maps_android_play_services_maps_dependency] dependencies { // [START_EXCLUDE silent] + api(project(":library")) implementation(project(":snippets:common")) implementation(libs.volley) implementation(libs.constraintlayout) diff --git a/snippets/kotlin-app/build.gradle.kts b/snippets/kotlin-app/build.gradle.kts index 2d87d2ce7..7a71d4e56 100644 --- a/snippets/kotlin-app/build.gradle.kts +++ b/snippets/kotlin-app/build.gradle.kts @@ -63,6 +63,7 @@ android { // [START maps_android_ktx_install_snippet] dependencies { + api(project(":library")) // [START_EXCLUDE silent] implementation(project(":snippets:common")) implementation(libs.android.maps.utils) diff --git a/tutorials/kotlin/Polygons/app/build.gradle.kts b/tutorials/kotlin/Polygons/app/build.gradle.kts index 6658c0193..1bde813b9 100644 --- a/tutorials/kotlin/Polygons/app/build.gradle.kts +++ b/tutorials/kotlin/Polygons/app/build.gradle.kts @@ -59,6 +59,7 @@ kotlin { } dependencies { + api(project(":library")) implementation(libs.appcompat) implementation(libs.play.services.maps) implementation(libs.core.ktx) From f95f298c358f386439b984220f1918c0c1e1746d Mon Sep 17 00:00:00 2001 From: Ashik Abbas Date: Fri, 14 Aug 2026 16:12:38 +0530 Subject: [PATCH 2/4] fixed all comments --- ApiDemos/project/common-ui/build.gradle.kts | 2 +- FireMarkers/app/build.gradle.kts | 2 +- WearOS/Wearable/build.gradle.kts | 2 +- library/.gitignore | 2 +- library/proguard-rules.pro | 2 +- .../library/utils/attribution/AttributionIdInitializer.kt | 1 - snippets/app-compose/build.gradle.kts | 2 +- snippets/app-places-ktx/build.gradle.kts | 2 +- snippets/kotlin-app/build.gradle.kts | 2 +- tutorials/kotlin/Polygons/app/build.gradle.kts | 2 +- 10 files changed, 9 insertions(+), 10 deletions(-) diff --git a/ApiDemos/project/common-ui/build.gradle.kts b/ApiDemos/project/common-ui/build.gradle.kts index 2580bbcd3..6bcd0d712 100644 --- a/ApiDemos/project/common-ui/build.gradle.kts +++ b/ApiDemos/project/common-ui/build.gradle.kts @@ -66,7 +66,7 @@ android { } dependencies { - api(project(":library")) + implementation(project(":library")) implementation(libs.core.ktx) implementation(libs.appcompat) implementation(libs.material) diff --git a/FireMarkers/app/build.gradle.kts b/FireMarkers/app/build.gradle.kts index 0e7257fd9..20d921f50 100644 --- a/FireMarkers/app/build.gradle.kts +++ b/FireMarkers/app/build.gradle.kts @@ -98,7 +98,7 @@ android { } dependencies { - api(project(":library")) + implementation(project(":library")) // --------------------------------------------------------------------------------------------- // AndroidX & Jetpack // diff --git a/WearOS/Wearable/build.gradle.kts b/WearOS/Wearable/build.gradle.kts index 9e45bbe77..f7fff5e0a 100644 --- a/WearOS/Wearable/build.gradle.kts +++ b/WearOS/Wearable/build.gradle.kts @@ -59,11 +59,11 @@ android { // [START maps_wear_os_dependencies] dependencies { - api(project(":library")) // [START_EXCLUDE] implementation(libs.core.ktx) implementation(platform(libs.kotlin.bom)) implementation(libs.kotlin.stdlib) + implementation(project(":library")) // [END_EXCLUDE] // Modern Android projects use version catalogs to manage dependencies. To include the necessary dependencies, // first add the following to your libs.versions.toml file: diff --git a/library/.gitignore b/library/.gitignore index 42afabfd2..796b96d1c 100644 --- a/library/.gitignore +++ b/library/.gitignore @@ -1 +1 @@ -/build \ No newline at end of file +/build diff --git a/library/proguard-rules.pro b/library/proguard-rules.pro index 481bb4348..f1b424510 100644 --- a/library/proguard-rules.pro +++ b/library/proguard-rules.pro @@ -18,4 +18,4 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile diff --git a/library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt b/library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt index 5e53aa8a8..cc426e512 100644 --- a/library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt +++ b/library/src/main/java/com/example/library/utils/attribution/AttributionIdInitializer.kt @@ -29,7 +29,6 @@ import com.google.android.gms.maps.MapsApiSettings @Keep internal class AttributionIdInitializer : Initializer { override fun create(context: Context) { - // See [AttributionIdInitializer] MapsApiSettings.addInternalUsageAttributionId( // context = context, diff --git a/snippets/app-compose/build.gradle.kts b/snippets/app-compose/build.gradle.kts index ea2dbe701..f47df7fe1 100644 --- a/snippets/app-compose/build.gradle.kts +++ b/snippets/app-compose/build.gradle.kts @@ -72,7 +72,6 @@ android { // [START maps_android_compose_dependency] dependencies { - api(project(":library")) // [START_EXCLUDE silent] implementation(libs.kotlin.stdlib) implementation(libs.core.ktx) @@ -85,6 +84,7 @@ dependencies { implementation(libs.navigation.ui.ktx) implementation(libs.volley) implementation(libs.lifecycle.runtime.ktx) + implementation(project(":library")) // [END_EXCLUDE] // Modern Android projects use version catalogs to manage dependencies. To include the Maps Compose library, diff --git a/snippets/app-places-ktx/build.gradle.kts b/snippets/app-places-ktx/build.gradle.kts index db17edf79..72a8f4abd 100644 --- a/snippets/app-places-ktx/build.gradle.kts +++ b/snippets/app-places-ktx/build.gradle.kts @@ -70,7 +70,6 @@ android { // [START places_android_ktx_install_snippet] dependencies { - api(project(":library")) // [START_EXCLUDE silent] implementation(libs.core.ktx) implementation(libs.appcompat) @@ -79,6 +78,7 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.ext.junit) androidTestImplementation(libs.espresso.core) + implementation(project(":library")) // [END_EXCLUDE] // Modern Android projects use version catalogs to manage dependencies. To include the Places SDK for Android, diff --git a/snippets/kotlin-app/build.gradle.kts b/snippets/kotlin-app/build.gradle.kts index 7a71d4e56..58f1c2ea2 100644 --- a/snippets/kotlin-app/build.gradle.kts +++ b/snippets/kotlin-app/build.gradle.kts @@ -63,8 +63,8 @@ android { // [START maps_android_ktx_install_snippet] dependencies { - api(project(":library")) // [START_EXCLUDE silent] + api(project(":library")) implementation(project(":snippets:common")) implementation(libs.android.maps.utils) implementation(libs.kotlin.stdlib) diff --git a/tutorials/kotlin/Polygons/app/build.gradle.kts b/tutorials/kotlin/Polygons/app/build.gradle.kts index 1bde813b9..21e6934a8 100644 --- a/tutorials/kotlin/Polygons/app/build.gradle.kts +++ b/tutorials/kotlin/Polygons/app/build.gradle.kts @@ -59,11 +59,11 @@ kotlin { } dependencies { - api(project(":library")) implementation(libs.appcompat) implementation(libs.play.services.maps) implementation(libs.core.ktx) implementation(libs.kotlin.stdlib) + implementation(project(":library")) // Tests testImplementation(libs.junit) From 6b72baf94fa8b30213a15b2fb2168e443b868648 Mon Sep 17 00:00:00 2001 From: Ashik Abbas Date: Wed, 7 Oct 2026 09:47:31 +0530 Subject: [PATCH 3/4] refactor(library): address PR review feedback on build config and dependencies --- library/build.gradle.kts | 14 ++++---------- .../library/utils/AttributionIdInitializerTest.kt | 4 ++-- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/library/build.gradle.kts b/library/build.gradle.kts index 09e4b28a0..9e667f384 100644 --- a/library/build.gradle.kts +++ b/library/build.gradle.kts @@ -38,35 +38,29 @@ android { ) } } - lint { - abortOnError = false - } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } lint { + abortOnError = false disable += setOf("MissingInflatedId", "OnClick") sarifOutput = layout.buildDirectory.file("reports/lint-results-debug.sarif").get().asFile } kotlin { compilerOptions { - jvmTarget.set(JvmTarget.JVM_17) + jvmTarget.set(JvmTarget.JVM_11) javaParameters.set(true) } } } dependencies { - implementation(libs.appcompat) - implementation(libs.core.ktx) - implementation(libs.material) implementation(libs.startup.runtime) implementation(libs.play.services.maps) testImplementation(libs.junit) testImplementation(libs.robolectric) testImplementation(libs.mockk) - testImplementation(libs.espresso.core) } diff --git a/library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt b/library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt index 16cfad4a5..2621418b5 100644 --- a/library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt +++ b/library/src/test/java/com/example/library/utils/AttributionIdInitializerTest.kt @@ -16,7 +16,6 @@ package com.example.library.utils import android.content.Context -import androidx.test.core.app.ApplicationProvider import com.example.library.utils.attribution.AttributionIdInitializer import com.example.library.utils.meta.AttributionId import com.google.android.gms.maps.MapsApiSettings @@ -31,6 +30,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner +import org.robolectric.RuntimeEnvironment @RunWith(RobolectricTestRunner::class) class AttributionIdInitializerTest { @@ -47,7 +47,7 @@ class AttributionIdInitializerTest { @Test fun `create adds internal usage attribution id`() { - val context = ApplicationProvider.getApplicationContext() + val context: Context = RuntimeEnvironment.getApplication() val initializer = AttributionIdInitializer() initializer.create(context) From 5cfc480ad92d58b965520de97b68e07716459e70 Mon Sep 17 00:00:00 2001 From: Ashik Abbas Date: Fri, 9 Oct 2026 11:45:56 +0530 Subject: [PATCH 4/4] refactor(snippets): move attribution library dependency to :snippets:common and clean up rebase leftovers --- snippets/app-utils-ktx/build.gradle.kts | 0 snippets/app-utils/build.gradle.kts | 0 snippets/common/build.gradle.kts | 1 + snippets/java-app/build.gradle.kts | 1 - snippets/kotlin-app/build.gradle.kts | 1 - 5 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 snippets/app-utils-ktx/build.gradle.kts delete mode 100644 snippets/app-utils/build.gradle.kts diff --git a/snippets/app-utils-ktx/build.gradle.kts b/snippets/app-utils-ktx/build.gradle.kts deleted file mode 100644 index e69de29bb..000000000 diff --git a/snippets/app-utils/build.gradle.kts b/snippets/app-utils/build.gradle.kts deleted file mode 100644 index e69de29bb..000000000 diff --git a/snippets/common/build.gradle.kts b/snippets/common/build.gradle.kts index 559075eaf..9b8039a69 100644 --- a/snippets/common/build.gradle.kts +++ b/snippets/common/build.gradle.kts @@ -40,6 +40,7 @@ android { } dependencies { + implementation(project(":library")) implementation(libs.core.ktx) implementation(libs.appcompat) implementation(libs.material) diff --git a/snippets/java-app/build.gradle.kts b/snippets/java-app/build.gradle.kts index 30a557c7c..f6a60e1de 100644 --- a/snippets/java-app/build.gradle.kts +++ b/snippets/java-app/build.gradle.kts @@ -62,7 +62,6 @@ android { // [START maps_android_play_services_maps_dependency] dependencies { // [START_EXCLUDE silent] - api(project(":library")) implementation(project(":snippets:common")) implementation(libs.volley) implementation(libs.constraintlayout) diff --git a/snippets/kotlin-app/build.gradle.kts b/snippets/kotlin-app/build.gradle.kts index 58f1c2ea2..2d87d2ce7 100644 --- a/snippets/kotlin-app/build.gradle.kts +++ b/snippets/kotlin-app/build.gradle.kts @@ -64,7 +64,6 @@ android { // [START maps_android_ktx_install_snippet] dependencies { // [START_EXCLUDE silent] - api(project(":library")) implementation(project(":snippets:common")) implementation(libs.android.maps.utils) implementation(libs.kotlin.stdlib)