From 4ce36da3f664f3e3c8596ca29c2cf9e21e03b53d Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Sat, 1 Jul 2023 09:31:57 -0400 Subject: [PATCH 1/6] Upgrade to agp 7.4.2 --- buildSrc/build.gradle.kts | 9 +--- firebase-firestore/firebase-firestore.gradle | 49 ++++++++++---------- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 3771cd0b255..0695e90f00d 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -41,11 +41,6 @@ ktfmt { googleStyle() } -java { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 -} - dependencies { // Firebase performance plugin, it should be added here because of how gradle dependency // resolution works, otherwise it breaks Fireperf Test Apps. @@ -70,8 +65,8 @@ dependencies { implementation(libs.kotlinx.serialization.json) implementation("com.google.code.gson:gson:2.8.9") - implementation("com.android.tools.build:gradle:7.3.1") - implementation("com.android.tools.build:builder-test-api:7.2.2") + implementation("com.android.tools.build:gradle:7.4.2") + implementation("com.android.tools.build:builder-test-api:7.4.2") implementation("gradle.plugin.com.github.sherter.google-java-format:google-java-format-gradle-plugin:0.9") testImplementation(libs.bundles.kotest) diff --git a/firebase-firestore/firebase-firestore.gradle b/firebase-firestore/firebase-firestore.gradle index 04dc09d5050..a2af42581c9 100644 --- a/firebase-firestore/firebase-firestore.gradle +++ b/firebase-firestore/firebase-firestore.gradle @@ -50,6 +50,9 @@ protobuf { } } } + // Acceptable values are: 'emulator', 'qa', 'nightly', and 'prod'. + ext.targetBackend = 'emulator' + android { adbOptions { timeOutInMs 60 * 1000 @@ -64,6 +67,25 @@ android { multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles 'proguard.txt' + + if (findProperty("useProdBackendForTests")) { + buildConfigField("boolean", "USE_EMULATOR_FOR_TESTS", "false") + } else { + buildConfigField("boolean", "USE_EMULATOR_FOR_TESTS", "true") + } + + if (findProperty('targetBackend')) { + buildConfigField("String", "TARGET_BACKEND", "\"${property("targetBackend")}\"") + } else { + // By default set the target backend to 'emulator' + buildConfigField("String", "TARGET_BACKEND", "\"emulator\"") + } + def localProps = new Properties() + + try { + file("local.properties").withInputStream { localProps.load(it) } + } catch (FileNotFoundException e) { + } } sourceSets { @@ -71,8 +93,6 @@ android { proto { srcDir 'src/proto' } - java { - } } test { java { @@ -92,30 +112,12 @@ android { } testOptions.unitTests.includeAndroidResources = true - // Acceptable values are: 'emulator', 'qa', 'nightly', and 'prod'. - ext.targetBackend = 'emulator' } tasks.withType(Test) { maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1 } -android.libraryVariants.all { variant -> - if (findProperty('targetBackend')) { - variant.buildConfigField("String", "TARGET_BACKEND", "\"${property("targetBackend")}\"") - } else { - // By default set the target backend to 'emulator' - variant.buildConfigField("String", "TARGET_BACKEND", "\"emulator\"") - } - - def localProps = new Properties() - - try { - file("local.properties").withInputStream { localProps.load(it) } - } catch (FileNotFoundException e) { - } -} - googleJavaFormat { exclude 'src/testUtil/java/com/google/firebase/firestore/testutil/Assert.java' exclude 'src/testUtil/java/com/google/firebase/firestore/testutil/ThrowingRunnable.java' @@ -161,7 +163,6 @@ dependencies { testImplementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8' testImplementation 'com.google.guava:guava-testlib:12.0-rc2' - androidTestImplementation project(':firebase-firestore') androidTestImplementation 'junit:junit:4.13.2' androidTestImplementation("com.google.truth:truth:$googleTruthVersion"){ exclude group: "org.codehaus.mojo", module: "animal-sniffer-annotations" @@ -170,9 +171,9 @@ dependencies { androidTestImplementation 'org.mockito:mockito-android:2.25.0' androidTestImplementation 'com.fasterxml.jackson.core:jackson-databind:2.9.8' androidTestImplementation "androidx.annotation:annotation:1.1.0" - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test:rules:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' + androidTestImplementation 'androidx.test:runner:1.5.2' + androidTestImplementation 'androidx.test:rules:1.5.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.4' } gradle.projectsEvaluated { From 356ceb8923552756908e335cf7ae73dc97a040ea Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Tue, 18 Jul 2023 17:39:26 -0400 Subject: [PATCH 2/6] Update vendor code --- .../firebase/gradle/plugins/VendorPlugin.kt | 281 +++++++----------- .../transport-runtime.gradle | 12 +- 2 files changed, 103 insertions(+), 190 deletions(-) diff --git a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/VendorPlugin.kt b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/VendorPlugin.kt index da1a0659fbd..b590ffb158d 100644 --- a/buildSrc/src/main/java/com/google/firebase/gradle/plugins/VendorPlugin.kt +++ b/buildSrc/src/main/java/com/google/firebase/gradle/plugins/VendorPlugin.kt @@ -14,11 +14,9 @@ package com.google.firebase.gradle.plugins -import com.android.build.api.transform.Format -import com.android.build.api.transform.QualifiedContent -import com.android.build.api.transform.Transform -import com.android.build.api.transform.TransformInvocation -import com.android.build.gradle.LibraryExtension +import com.android.build.api.artifact.ScopedArtifact +import com.android.build.api.variant.LibraryAndroidComponentsExtension +import com.android.build.api.variant.ScopedArtifacts import com.android.build.gradle.LibraryPlugin import java.io.BufferedInputStream import java.io.BufferedOutputStream @@ -28,42 +26,43 @@ import java.io.FileOutputStream import java.util.zip.ZipEntry import java.util.zip.ZipFile import java.util.zip.ZipOutputStream +import javax.inject.Inject +import org.gradle.api.DefaultTask import org.gradle.api.GradleException import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.artifacts.Configuration -import org.gradle.api.logging.Logger +import org.gradle.api.file.Directory +import org.gradle.api.file.RegularFile +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property -import org.gradle.api.provider.Provider +import org.gradle.api.tasks.Classpath +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.apply -import org.gradle.kotlin.dsl.create - -abstract class VendorExtension { - /** Controls dead code elimination, enabled if true. */ - abstract val optimize: Property - - init { - optimize.convention(true) - } -} +import org.gradle.kotlin.dsl.getByType +import org.gradle.process.ExecOperations class VendorPlugin : Plugin { override fun apply(project: Project) { - val vendorConfig = project.extensions.create("vendor") project.plugins.all { when (this) { - is LibraryPlugin -> configureAndroid(project, vendorConfig) + is LibraryPlugin -> configureAndroid(project) } } } - fun configureAndroid(project: Project, vendorConfig: VendorExtension) { + fun configureAndroid(project: Project) { project.apply(plugin = "LicenseResolverPlugin") val vendor = project.configurations.create("vendor") project.configurations.all { when (name) { - "compileOnly", + "releaseCompileOnly", + "debugImplementation", "testImplementation", "androidTestImplementation" -> extendsFrom(vendor) } @@ -72,174 +71,63 @@ class VendorPlugin : Plugin { val jarJar = project.configurations.create("firebaseJarJarArtifact") project.dependencies.add("firebaseJarJarArtifact", "org.pantsbuild:jarjar:1.7.2") - val android = project.extensions.getByType(LibraryExtension::class.java) - - android.registerTransform( - VendorTransform( - android, - vendor, - JarJarTransformer( - parentPackageProvider = { - android.libraryVariants.find { it.name == "release" }!!.applicationId - }, - jarJarProvider = { jarJar.resolve() }, - project = project, - logger = project.logger, - optimize = vendorConfig.optimize - ), - logger = project.logger - ) - ) - } -} + val androidComponents = project.extensions.getByType() -interface JarTransformer { - fun transform( - inputJar: File, - outputJar: File, - ownPackages: Set, - packagesToVendor: Set - ) -} - -class JarJarTransformer( - private val parentPackageProvider: () -> String, - private val jarJarProvider: () -> Collection, - private val project: Project, - private val logger: Logger, - private val optimize: Provider -) : JarTransformer { - override fun transform( - inputJar: File, - outputJar: File, - ownPackages: Set, - packagesToVendor: Set - ) { - val parentPackage = parentPackageProvider() - val rulesFile = File.createTempFile(parentPackage, ".jarjar") - rulesFile.printWriter().use { - if (optimize.get()) { - for (packageName in ownPackages) { - it.println("keep $packageName.**") + androidComponents.onVariants(androidComponents.selector().withBuildType("release")) { variant -> + val vendorTask = + project.tasks.register("${variant.name}VendorTransform", VendorTask::class.java) { + vendorDependencies.set(vendor) + packageName.set(variant.namespace) + this.jarJar.set(jarJar) } - } - for (externalPackageName in packagesToVendor) { - it.println("rule $externalPackageName.** $parentPackage.@0") - } + variant.artifacts + .forScope(ScopedArtifacts.Scope.PROJECT) + .use(vendorTask) + .toTransform( + ScopedArtifact.CLASSES, + VendorTask::inputJars, + VendorTask::inputDirs, + VendorTask::outputJar + ) } - logger.info("The following JarJar configuration will be used:\n ${rulesFile.readText()}") - - project - .javaexec { - main = "org.pantsbuild.jarjar.Main" - classpath = project.files(jarJarProvider()) - args = - listOf("process", rulesFile.absolutePath, inputJar.absolutePath, outputJar.absolutePath) - systemProperties = mapOf("verbose" to "true", "misplacedClassStrategy" to "FATAL") - } - .assertNormalExitValue() } } -class VendorTransform( - private val android: LibraryExtension, - private val configuration: Configuration, - private val jarTransformer: JarTransformer, - private val logger: Logger -) : Transform() { - override fun getName() = "firebaseVendorTransform" +abstract class VendorTask @Inject constructor(private val execOperations: ExecOperations) : + DefaultTask() { + @get:[InputFiles Classpath] + abstract val vendorDependencies: Property - override fun getInputTypes(): MutableSet { - return mutableSetOf(QualifiedContent.DefaultContentType.CLASSES) - } + @get:[InputFiles Classpath] + abstract val jarJar: Property - override fun isIncremental() = false + @get:Input abstract val packageName: Property - override fun getScopes(): MutableSet { - return mutableSetOf(QualifiedContent.Scope.PROJECT) - } + @get:InputFiles abstract val inputJars: ListProperty - override fun getReferencedScopes(): MutableSet { - return mutableSetOf(QualifiedContent.Scope.PROJECT) - } + @get:InputFiles abstract val inputDirs: ListProperty - override fun transform(transformInvocation: TransformInvocation) { - if (configuration.resolve().isEmpty()) { - logger.warn( - "Nothing to vendor. " + - "If you don't need vendor functionality please disable 'firebase-vendor' plugin. " + - "Otherwise use the 'vendor' configuration to add dependencies you want vendored in." - ) - for (input in transformInvocation.inputs) { - for (directoryInput in input.directoryInputs) { - val directoryOutput = - transformInvocation.outputProvider.getContentLocation( - directoryInput.name, - setOf(QualifiedContent.DefaultContentType.CLASSES), - mutableSetOf(QualifiedContent.Scope.PROJECT), - Format.DIRECTORY - ) - directoryInput.file.copyRecursively(directoryOutput, overwrite = true) - } - for (jarInput in input.jarInputs) { - val jarOutput = - transformInvocation.outputProvider.getContentLocation( - jarInput.name, - setOf(QualifiedContent.DefaultContentType.CLASSES), - mutableSetOf(QualifiedContent.Scope.PROJECT), - Format.JAR - ) + @get:OutputFile abstract val outputJar: RegularFileProperty - jarInput.file.copyTo(jarOutput, overwrite = true) - } - } - return - } - - val contentLocation = - transformInvocation.outputProvider.getContentLocation( - "sourceAndVendoredLibraries", - setOf(QualifiedContent.DefaultContentType.CLASSES), - mutableSetOf(QualifiedContent.Scope.PROJECT), - Format.DIRECTORY - ) - contentLocation.deleteRecursively() - contentLocation.mkdirs() - val tmpDir = File(contentLocation, "tmp") - tmpDir.mkdirs() - try { - val fatJar = process(tmpDir, transformInvocation) - unzipJar(fatJar, contentLocation) - } finally { - tmpDir.deleteRecursively() - } - } - - private fun isTest(transformInvocation: TransformInvocation): Boolean { - return android.testVariants.find { it.name == transformInvocation.context.variantName } != null - } + @TaskAction + fun taskAction() { + val workDir = File.createTempFile("vendorTmp", null) + workDir.mkdirs() + workDir.deleteRecursively() - private fun process(workDir: File, transformInvocation: TransformInvocation): File { - transformInvocation.context.variantName val unzippedDir = File(workDir, "unzipped") - val unzippedExcludedDir = File(workDir, "unzipped-excluded") - unzippedDir.mkdirs() - unzippedExcludedDir.mkdirs() - - val externalCodeDir = if (isTest(transformInvocation)) unzippedExcludedDir else unzippedDir + val externalCodeDir = unzippedDir - for (input in transformInvocation.inputs) { - for (directoryInput in input.directoryInputs) { - directoryInput.file.copyRecursively(unzippedDir) - } - for (jarInput in input.jarInputs) { - unzipJar(jarInput.file, unzippedDir) - } + for (directory in inputDirs.get()) { + directory.asFile.copyRecursively(unzippedDir) + } + for (jar in inputJars.get()) { + unzipJar(jar.asFile, unzippedDir) } val ownPackageNames = inferPackages(unzippedDir) - for (jar in configuration.resolve()) { + for (jar in vendorDependencies.get()) { unzipJar(jar, externalCodeDir) } val externalPackageNames = inferPackages(externalCodeDir) subtract ownPackageNames @@ -250,26 +138,57 @@ class VendorTransform( throw GradleException( "Vendoring java or javax packages is not supported. " + "Please exclude one of the direct or transitive dependencies: \n" + - configuration.resolvedConfiguration.resolvedArtifacts.joinToString(separator = "\n") + vendorDependencies + .get() + .resolvedConfiguration + .resolvedArtifacts + .joinToString(separator = "\n") ) } + val jar = File(workDir, "intermediate.jar") zipAll(unzippedDir, jar) - val outputJar = File(workDir, "output.jar") - - jarTransformer.transform(jar, outputJar, ownPackageNames, externalPackageNames) - return outputJar + transform(jar, ownPackageNames, externalPackageNames) } - private fun inferPackages(dir: File): Set { - return dir - .walk() - .filter { it.name.endsWith(".class") } - .map { it.parentFile.toRelativeString(dir).replace('/', '.') } - .toSet() + fun transform(inputJar: File, ownPackages: Set, packagesToVendor: Set) { + val parentPackage = packageName.get() + val rulesFile = File.createTempFile(parentPackage, ".jarjar") + rulesFile.printWriter().use { + for (packageName in ownPackages) { + it.println("keep $packageName.**") + } + for (externalPackageName in packagesToVendor) { + it.println("rule $externalPackageName.** $parentPackage.@0") + } + } + logger.info("The following JarJar configuration will be used:\n ${rulesFile.readText()}") + + execOperations + .javaexec { + mainClass.set("org.pantsbuild.jarjar.Main") + classpath = project.files(jarJar.get()) + args = + listOf( + "process", + rulesFile.absolutePath, + inputJar.absolutePath, + outputJar.asFile.get().absolutePath + ) + systemProperties = mapOf("verbose" to "true", "misplacedClassStrategy" to "FATAL") + } + .assertNormalExitValue() } } +fun inferPackages(dir: File): Set { + return dir + .walk() + .filter { it.name.endsWith(".class") } + .map { it.parentFile.toRelativeString(dir).replace('/', '.') } + .toSet() +} + fun unzipJar(jar: File, directory: File) { ZipFile(jar).use { zip -> zip diff --git a/transport/transport-runtime/transport-runtime.gradle b/transport/transport-runtime/transport-runtime.gradle index ebe8d6ad834..aae4ddd6b46 100644 --- a/transport/transport-runtime/transport-runtime.gradle +++ b/transport/transport-runtime/transport-runtime.gradle @@ -64,14 +64,8 @@ firebaseLibrary { } } -vendor { - // Integration tests use dagger classes that are not used in the main SDK, - // so we disable dead code elimination to ensure those classes are preserved. - optimize = false -} - android { - namespace "com.google.android.datatransport.runtime" + namespace "com.google.android.datatransport.runtime" compileSdkVersion project.targetSdkVersion defaultConfig { minSdkVersion project.minSdkVersion @@ -111,7 +105,7 @@ dependencies { implementation "com.google.firebase:firebase-encoders-proto:16.0.0" annotationProcessor project(":encoders:firebase-encoders-processor") - vendor ('com.google.dagger:dagger:2.27') { + vendor ('com.google.dagger:dagger:2.43.2') { exclude group: "javax.inject", module: "javax.inject" } @@ -119,7 +113,7 @@ dependencies { compileOnly "com.google.errorprone:error_prone_annotations:2.9.0" annotationProcessor "com.google.auto.value:auto-value:1.6.5" - annotationProcessor 'com.google.dagger:dagger-compiler:2.27' + annotationProcessor 'com.google.dagger:dagger-compiler:2.43.2' testImplementation 'junit:junit:4.13-beta-2' testImplementation "com.google.truth:truth:$googleTruthVersion" From 49eca392a4eadec01c813eaf242151568cc17f23 Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Tue, 18 Jul 2023 17:57:04 -0400 Subject: [PATCH 3/6] Update dagger dependencies --- .../firebase-inappmessaging-display.gradle | 5 +++-- firebase-inappmessaging/firebase-inappmessaging.gradle | 4 ++-- .../firebase-ml-modeldownloader.gradle | 7 +++---- transport/transport-runtime/transport-runtime.gradle | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle b/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle index f10207186f0..39d8b9ddf0d 100644 --- a/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle +++ b/firebase-inappmessaging-display/firebase-inappmessaging-display.gradle @@ -88,12 +88,13 @@ dependencies { implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' - vendor ('com.google.dagger:dagger:2.27') { + vendor (libs.dagger.dagger) { exclude group: "javax.inject", module: "javax.inject" } + annotationProcessor libs.dagger.compiler + implementation 'javax.inject:javax.inject:1' - annotationProcessor "com.google.dagger:dagger-compiler:2.27" annotationProcessor 'com.google.auto.value:auto-value:1.6.5' annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6' diff --git a/firebase-inappmessaging/firebase-inappmessaging.gradle b/firebase-inappmessaging/firebase-inappmessaging.gradle index 5313eda1fe5..927ca8c6326 100644 --- a/firebase-inappmessaging/firebase-inappmessaging.gradle +++ b/firebase-inappmessaging/firebase-inappmessaging.gradle @@ -126,11 +126,11 @@ dependencies { exclude group: 'com.google.firebase', module: 'firebase-common' } - vendor ('com.google.dagger:dagger:2.27') { + vendor (libs.dagger.dagger) { exclude group: "javax.inject", module: "javax.inject" } + annotationProcessor libs.dagger.compiler - annotationProcessor 'com.google.dagger:dagger-compiler:2.27' annotationProcessor 'com.google.auto.value:auto-value:1.6.5' annotationProcessor 'com.ryanharter.auto.value:auto-value-parcel:0.2.6' diff --git a/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle b/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle index 3aea50cac93..4bb85c6626b 100644 --- a/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle +++ b/firebase-ml-modeldownloader/firebase-ml-modeldownloader.gradle @@ -40,7 +40,7 @@ protobuf { } android { - namespace "com.google.firebase.ml.modeldownloader" + namespace "com.google.firebase.ml.modeldownloader" compileSdkVersion project.targetSdkVersion defaultConfig { @@ -80,11 +80,10 @@ dependencies { implementation 'com.google.auto.service:auto-service-annotations:1.0-rc6' implementation 'javax.inject:javax.inject:1' - implementation 'javax.inject:javax.inject:1' - vendor ('com.google.dagger:dagger:2.43.2') { + vendor (libs.dagger.dagger) { exclude group: "javax.inject", module: "javax.inject" } - annotationProcessor 'com.google.dagger:dagger-compiler:2.43.2' + annotationProcessor libs.dagger.compiler compileOnly "com.google.auto.value:auto-value-annotations:1.6.6" annotationProcessor "com.google.auto.value:auto-value:1.6.5" diff --git a/transport/transport-runtime/transport-runtime.gradle b/transport/transport-runtime/transport-runtime.gradle index aae4ddd6b46..5df3b39aa49 100644 --- a/transport/transport-runtime/transport-runtime.gradle +++ b/transport/transport-runtime/transport-runtime.gradle @@ -105,15 +105,15 @@ dependencies { implementation "com.google.firebase:firebase-encoders-proto:16.0.0" annotationProcessor project(":encoders:firebase-encoders-processor") - vendor ('com.google.dagger:dagger:2.43.2') { + vendor (libs.dagger.dagger) { exclude group: "javax.inject", module: "javax.inject" } + annotationProcessor libs.dagger.compiler compileOnly "com.google.auto.value:auto-value-annotations:1.6.6" compileOnly "com.google.errorprone:error_prone_annotations:2.9.0" annotationProcessor "com.google.auto.value:auto-value:1.6.5" - annotationProcessor 'com.google.dagger:dagger-compiler:2.43.2' testImplementation 'junit:junit:4.13-beta-2' testImplementation "com.google.truth:truth:$googleTruthVersion" From 1c9335374e5b480db22b217d5689651cb2123c6a Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Paz Date: Tue, 18 Jul 2023 18:13:59 -0400 Subject: [PATCH 4/6] Update changelogs --- firebase-appdistribution/CHANGELOG.md | 2 +- firebase-inappmessaging-display/CHANGELOG.md | 3 +-- firebase-inappmessaging/CHANGELOG.md | 7 +++---- firebase-ml-modeldownloader/CHANGELOG.md | 1 + transport/transport-runtime/CHANGELOG.md | 3 +-- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/firebase-appdistribution/CHANGELOG.md b/firebase-appdistribution/CHANGELOG.md index a49fba6c92d..4d256121210 100644 --- a/firebase-appdistribution/CHANGELOG.md +++ b/firebase-appdistribution/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased * [feature] Improved development mode to allow all API calls to be made without having to sign in. +* [unchanged] Updated internal Dagger dependency. # 16.0.0-beta08 * [fixed] Fixed an issue where a crash happened whenever a feedback @@ -69,4 +70,3 @@ The [appdistro] Android library with Kotlin extensions is now available in beta. The Kotlin extensions library transitively includes the base `firebase-app-distribution` library. To learn more, visit the [[appdistro] KTX reference documentation](/docs/reference/kotlin/com/google/firebase/appdistribution/ktx/package-summary). - diff --git a/firebase-inappmessaging-display/CHANGELOG.md b/firebase-inappmessaging-display/CHANGELOG.md index c1bad5d4fdb..e1beba9e292 100644 --- a/firebase-inappmessaging-display/CHANGELOG.md +++ b/firebase-inappmessaging-display/CHANGELOG.md @@ -1,5 +1,5 @@ # Unreleased - +* [unchanged] Updated internal Dagger dependency. # 20.3.2 * [fixed] Fixed nullpointer crash when using experiments @@ -289,4 +289,3 @@ additional updates. # 17.0.0 * [feature] The initial public beta release of the Firebase In-App Messaging Display SDK for Android is now available. To learn more, see the [Firebase In-App Messaging documentation](/docs/in-app-messaging). - diff --git a/firebase-inappmessaging/CHANGELOG.md b/firebase-inappmessaging/CHANGELOG.md index b34449268e1..31bad743aef 100644 --- a/firebase-inappmessaging/CHANGELOG.md +++ b/firebase-inappmessaging/CHANGELOG.md @@ -1,5 +1,5 @@ # Unreleased - +* [unchanged] Updated internal Dagger dependency. # 20.3.2 * [fixed] Fixed nullpointer crash when using experiments @@ -273,7 +273,7 @@ additional updates. # 17.1.0 * [feature] Adds functionality to programmatically register listeners for - updates on in-app engagement (for example, impression, click, display errors). + updates on in-app engagement (for example, impression, click, display errors). See [`FirebaseInAppMessaging.addClickListener()`](/docs/reference/android/com/google/firebase/inappmessaging/FirebaseInAppMessaging.addClickListener()) for more details. @@ -285,8 +285,7 @@ additional updates. * [fixed] Improved caching logic, added safeguards for cache expiration, and cleaned up API surface to prepare for open sourcing the [inappmessaging]-display SDK. # 17.0.1 -* [fixed] Fixed an issue where [fiam] and Firestore could not be included/built into the same app, because of an obfuscation collision. +* [fixed] Fixed an issue where [fiam] and Firestore could not be included/built into the same app, because of an obfuscation collision. # 17.0.0 * [feature] The initial public beta release of the Firebase In-App Messaging SDK for Android is now available. To learn more, see the [Firebase In-App Messaging documentation](/docs/in-app-messaging). - diff --git a/firebase-ml-modeldownloader/CHANGELOG.md b/firebase-ml-modeldownloader/CHANGELOG.md index 951de3ae791..c6d0313ec56 100644 --- a/firebase-ml-modeldownloader/CHANGELOG.md +++ b/firebase-ml-modeldownloader/CHANGELOG.md @@ -1,4 +1,5 @@ # Unreleased +* [unchanged] Updated internal Dagger dependency. # 24.1.2 * [changed] Internal infrastructure improvements. diff --git a/transport/transport-runtime/CHANGELOG.md b/transport/transport-runtime/CHANGELOG.md index f514bbb890e..74f982265c9 100644 --- a/transport/transport-runtime/CHANGELOG.md +++ b/transport/transport-runtime/CHANGELOG.md @@ -1,3 +1,2 @@ # Unreleased - - +* [unchanged] Updated internal Dagger dependency. From 70316e0e7ab9a79980c96186e18eb62d1bf3537c Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Date: Tue, 18 Jul 2023 18:17:00 -0400 Subject: [PATCH 5/6] Remove unneeded change --- firebase-appdistribution/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/firebase-appdistribution/CHANGELOG.md b/firebase-appdistribution/CHANGELOG.md index 4d256121210..1b49dbc39e1 100644 --- a/firebase-appdistribution/CHANGELOG.md +++ b/firebase-appdistribution/CHANGELOG.md @@ -1,6 +1,5 @@ # Unreleased * [feature] Improved development mode to allow all API calls to be made without having to sign in. -* [unchanged] Updated internal Dagger dependency. # 16.0.0-beta08 * [fixed] Fixed an issue where a crash happened whenever a feedback From fe1e0f981a71cbbb6f404cef0ee050d01a77ad4b Mon Sep 17 00:00:00 2001 From: Rodrigo Lazo Date: Tue, 18 Jul 2023 18:17:39 -0400 Subject: [PATCH 6/6] Remove extra line --- firebase-appdistribution/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/firebase-appdistribution/CHANGELOG.md b/firebase-appdistribution/CHANGELOG.md index 1b49dbc39e1..a49fba6c92d 100644 --- a/firebase-appdistribution/CHANGELOG.md +++ b/firebase-appdistribution/CHANGELOG.md @@ -69,3 +69,4 @@ The [appdistro] Android library with Kotlin extensions is now available in beta. The Kotlin extensions library transitively includes the base `firebase-app-distribution` library. To learn more, visit the [[appdistro] KTX reference documentation](/docs/reference/kotlin/com/google/firebase/appdistribution/ktx/package-summary). +