diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/APIController.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/APIController.kt index 7ba9b026817..720b2c50a63 100644 --- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/APIController.kt +++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/APIController.kt @@ -335,7 +335,9 @@ private suspend fun validateResponse(response: HttpResponse) { throw PromptBlockedException(message) } if (message.contains("genai config not found")) { - throw APINotConfiguredException() + throw APINotConfiguredException( + "The Gemini Developer API is not enabled, to enable and configure, see https://firebase.google.com/docs/ai-logic/faq-and-troubleshooting?api=dev#error-genai-config-not-found" + ) } getServiceDisabledErrorDetailsOrNull(error)?.let { val errorMessage = diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/Exceptions.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/Exceptions.kt index cf90119e150..82ad80838f6 100644 --- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/Exceptions.kt +++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/common/Exceptions.kt @@ -90,14 +90,13 @@ internal class UnsupportedUserLocationException(cause: Throwable? = null) : FirebaseCommonAIException("User location is not supported for the API use.", cause) /** - * The user's project does not have the Gemini Developer API enabled in the Firebase Console. + * The user's project has not been configured and enabled for the selected API. * - * See the Firebase documentation for the + * For the Gemini Developer API, see * [steps](https://firebase.google.com/docs/ai-logic/faq-and-troubleshooting?api=dev#error-genai-config-not-found) - * to enable the Gemini Developer API. */ -internal class APINotConfiguredException(cause: Throwable? = null) : - FirebaseCommonAIException("Gemini Developer API not enabled in Firebase console.", cause) +internal class APINotConfiguredException(message: String, cause: Throwable? = null) : + FirebaseCommonAIException(message, cause) /** * Some form of state occurred that shouldn't have. diff --git a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Exceptions.kt b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Exceptions.kt index 4118afd57c4..a006f34e915 100644 --- a/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Exceptions.kt +++ b/firebase-ai/src/main/kotlin/com/google/firebase/ai/type/Exceptions.kt @@ -62,7 +62,7 @@ internal constructor(message: String, cause: Throwable? = null) : RuntimeExcepti is com.google.firebase.ai.common.QuotaExceededException -> QuotaExceededException(cause.message ?: "", cause.cause) is com.google.firebase.ai.common.APINotConfiguredException -> - APINotConfiguredException(cause.cause) + APINotConfiguredException(cause.message ?: "", cause.cause) else -> UnknownException(cause.message ?: "", cause) } is TimeoutCancellationException -> @@ -152,14 +152,14 @@ public class UnsupportedUserLocationException internal constructor(cause: Throwa FirebaseAIException("User location is not supported for the API use.", cause) /** - * The user's project does not have the Gemini Developer API enabled in the Firebase Console. + * The user's project has not been configured and enabled for the selected API. * - * See the Firebase documentation for the + * For the Gemini Developer API, see * [steps](https://firebase.google.com/docs/ai-logic/faq-and-troubleshooting?api=dev#error-genai-config-not-found) - * to enable the Gemini Developer API. */ -public class APINotConfiguredException internal constructor(cause: Throwable? = null) : - FirebaseAIException("Gemini Developer API not enabled in Firebase console.", cause) +public class APINotConfiguredException +internal constructor(message: String, cause: Throwable? = null) : + FirebaseAIException(message, cause) /** * Some form of state occurred that shouldn't have. diff --git a/firebase-common/src/main/java/com/google/firebase/datastorage/JavaDataStorage.kt b/firebase-common/src/main/java/com/google/firebase/datastorage/JavaDataStorage.kt index 9b16720210e..8de2b3bae4b 100644 --- a/firebase-common/src/main/java/com/google/firebase/datastorage/JavaDataStorage.kt +++ b/firebase-common/src/main/java/com/google/firebase/datastorage/JavaDataStorage.kt @@ -17,11 +17,15 @@ package com.google.firebase.datastorage import android.content.Context +import android.os.Process +import android.util.Log import androidx.datastore.core.DataStore +import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler import androidx.datastore.preferences.SharedPreferencesMigration import androidx.datastore.preferences.core.MutablePreferences import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.emptyPreferences import androidx.datastore.preferences.preferencesDataStore import com.google.firebase.annotations.concurrent.Background import kotlinx.coroutines.flow.firstOrNull @@ -60,7 +64,16 @@ class JavaDataStorage(val context: Context, val name: String) { private val Context.dataStore: DataStore by preferencesDataStore( name = name, - produceMigrations = { listOf(SharedPreferencesMigration(it, name)) } + produceMigrations = { listOf(SharedPreferencesMigration(it, name)) }, + corruptionHandler = + ReplaceFileCorruptionHandler { ex -> + Log.w( + JavaDataStorage::class.simpleName, + "CorruptionException in ${name} DataStore running in process ${Process.myPid()}", + ex + ) + emptyPreferences() + } ) private val dataStore = context.dataStore diff --git a/firebase-crashlytics-ndk/CHANGELOG.md b/firebase-crashlytics-ndk/CHANGELOG.md index 09b47444a04..0f9763a12f5 100644 --- a/firebase-crashlytics-ndk/CHANGELOG.md +++ b/firebase-crashlytics-ndk/CHANGELOG.md @@ -1,5 +1,5 @@ # Unreleased - +* [changed] Updated `firebase-crashlytics` dependency to 20.0.1 # 20.0.0 * [changed] **Breaking Change**: Updated minSdkVersion to API level 23 or higher. @@ -243,12 +243,12 @@ change. The following release notes describe changes in the new SDK.
  • If you're using [crashlytics] for NDK crash reporting in your app for the first time, follow the getting - started instructions. + started instructions.
  • If you're upgrading from the legacy Fabric SDK to the [firebase_crashlytics] SDK for NDK crash reporting, follow the upgrade - instructions to update your app with the following SDK changes. + instructions to update your app with the following SDK changes.
  • @@ -259,4 +259,3 @@ change. The following release notes describe changes in the new SDK. uploading symbol files to [crashlytics] servers. See the [[crashlytics] Gradle plugin documentation](/docs/crashlytics/ndk-reports-new-sdk) for more information. - diff --git a/firebase-crashlytics/CHANGELOG.md b/firebase-crashlytics/CHANGELOG.md index 9c18c722fe7..1deae6608e4 100644 --- a/firebase-crashlytics/CHANGELOG.md +++ b/firebase-crashlytics/CHANGELOG.md @@ -1,5 +1,5 @@ # Unreleased - +** [changed] Updated `firebase-sessions` dependency to v3.0.1 # 20.0.0 * [changed] **Breaking Change**: Removed deprecated public constructor `KeyValueBuilder(crashlytics: FirebaseCrashlytics)` @@ -683,12 +683,12 @@ The following release notes describe changes in the new SDK.
  • If you're using [crashlytics] for NDK crash reporting in your app for the first time, follow the getting - started instructions. + started instructions.
  • If you're upgrading from the legacy Fabric SDK to the [firebase_crashlytics] SDK, follow the upgrade - instructions to update your app with the following SDK changes. + instructions to update your app with the following SDK changes.
  • @@ -702,4 +702,3 @@ The following release notes describe changes in the new SDK. from your `AndroidManifest.xml` file. * [removed] The `fabric.properties` and `crashlytics.properties` files are no longer supported. Remove them from your app. - diff --git a/firebase-perf/CHANGELOG.md b/firebase-perf/CHANGELOG.md index 4954be336b5..b4db8bb6bc4 100644 --- a/firebase-perf/CHANGELOG.md +++ b/firebase-perf/CHANGELOG.md @@ -1,6 +1,5 @@ # Unreleased * [fixed] Fixed an ANR on app launch. [#4831] -* [fixed] Fixed app start traces on API 34+. [#5920] # 22.0.0 * [changed] **Breaking Change**: Updated minSdkVersion to API level 23 or higher. diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java index ceac4b39335..7574f989d92 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/metrics/AppStartTrace.java @@ -75,8 +75,6 @@ public class AppStartTrace implements ActivityLifecycleCallbacks, LifecycleObser private static final @NonNull Timer PERF_CLASS_LOAD_TIME = new Clock().getTime(); private static final long MAX_LATENCY_BEFORE_UI_INIT = TimeUnit.MINUTES.toMicros(1); - private static final long MAX_BACKGROUND_RUNNABLE_DELAY = TimeUnit.MILLISECONDS.toMicros(100); - // Core pool size 0 allows threads to shut down if they're idle private static final int CORE_POOL_SIZE = 0; private static final int MAX_POOL_SIZE = 1; // Only need single thread @@ -113,8 +111,6 @@ public class AppStartTrace implements ActivityLifecycleCallbacks, LifecycleObser private final @Nullable Timer processStartTime; private final @Nullable Timer firebaseClassLoadTime; private Timer onCreateTime = null; - - private Timer mainThreadRunnableTime = null; private Timer onStartTime = null; private Timer onResumeTime = null; private Timer firstForegroundTime = null; @@ -323,26 +319,8 @@ private void recordOnDrawFrontOfQueue() { logExperimentTrace(this.experimentTtid); } - private void resolveIsStartedFromBackground() { - // If the mainThreadRunnableTime is null, either the runnable hasn't run, or this check has - // already been made. - if (mainThreadRunnableTime == null) { - return; - } - - // Set it to true if the runnable ran more than 100ms prior to onActivityCreated() - if (mainThreadRunnableTime.getDurationMicros() > MAX_BACKGROUND_RUNNABLE_DELAY) { - isStartedFromBackground = true; - } - - // Set this to null to prevent additional checks if `onActivityCreated()` is called again. - mainThreadRunnableTime = null; - } - @Override public synchronized void onActivityCreated(Activity activity, Bundle savedInstanceState) { - resolveIsStartedFromBackground(); - if (isStartedFromBackground || onCreateTime != null // An activity already called onCreate() ) { return; @@ -582,7 +560,8 @@ public static boolean isScreenOn(Context appContext) { * We use StartFromBackgroundRunnable to detect if app is started from background or foreground. * If app is started from background, we do not generate AppStart trace. This runnable is posted * to main UI thread from FirebasePerfEarly. If app is started from background, this runnable will - * be executed earlier than 100ms of any activity's onCreate() method. + * be executed before any activity's onCreate() method. If app is started from foreground, + * activity's onCreate() method is executed before this runnable. */ public static class StartFromBackgroundRunnable implements Runnable { private final AppStartTrace trace; @@ -593,7 +572,10 @@ public StartFromBackgroundRunnable(final AppStartTrace trace) { @Override public void run() { - trace.mainThreadRunnableTime = new Timer(); + // if no activity has ever been created. + if (trace.onCreateTime == null) { + trace.isStartedFromBackground = true; + } } } @@ -632,7 +614,7 @@ Timer getOnResumeTime() { } @VisibleForTesting - void setMainThreadRunnableTime(Timer timer) { - mainThreadRunnableTime = timer; + void setIsStartFromBackground() { + isStartedFromBackground = true; } } diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java index 25ad845231a..36ae3d10116 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/metrics/AppStartTraceTest.java @@ -18,7 +18,6 @@ import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -239,42 +238,11 @@ public void testDelayedAppStart() { } @Test - public void testStartFromBackground_within100ms() { + public void testStartFromBackground() { FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); - Timer fakeTimer = spy(new Timer(currentTime)); AppStartTrace trace = new AppStartTrace(transportManager, clock, configResolver, fakeExecutorService); - trace.registerActivityLifecycleCallbacks(appContext); - trace.setMainThreadRunnableTime(fakeTimer); - - when(fakeTimer.getDurationMicros()).thenReturn(99L); - trace.onActivityCreated(activity1, bundle); - Assert.assertNotNull(trace.getOnCreateTime()); - ++currentTime; - trace.onActivityStarted(activity1); - Assert.assertNotNull(trace.getOnStartTime()); - ++currentTime; - trace.onActivityResumed(activity1); - Assert.assertNotNull(trace.getOnResumeTime()); - fakeExecutorService.runAll(); - // There should be a trace sent since the delay between the main thread and onActivityCreated - // is limited. - verify(transportManager, times(1)) - .log( - traceArgumentCaptor.capture(), - ArgumentMatchers.nullable(ApplicationProcessState.class)); - } - - @Test - public void testStartFromBackground_moreThan100ms() { - FakeScheduledExecutorService fakeExecutorService = new FakeScheduledExecutorService(); - Timer fakeTimer = spy(new Timer(currentTime)); - AppStartTrace trace = - new AppStartTrace(transportManager, clock, configResolver, fakeExecutorService); - trace.registerActivityLifecycleCallbacks(appContext); - trace.setMainThreadRunnableTime(fakeTimer); - - when(fakeTimer.getDurationMicros()).thenReturn(TimeUnit.MILLISECONDS.toMicros(100) + 1); + trace.setIsStartFromBackground(); trace.onActivityCreated(activity1, bundle); Assert.assertNull(trace.getOnCreateTime()); ++currentTime; @@ -284,7 +252,6 @@ public void testStartFromBackground_moreThan100ms() { trace.onActivityResumed(activity1); Assert.assertNull(trace.getOnResumeTime()); // There should be no trace sent. - fakeExecutorService.runAll(); verify(transportManager, times(0)) .log( traceArgumentCaptor.capture(), diff --git a/firebase-sessions/CHANGELOG.md b/firebase-sessions/CHANGELOG.md index 1d40247f8f7..49730f25f08 100644 --- a/firebase-sessions/CHANGELOG.md +++ b/firebase-sessions/CHANGELOG.md @@ -1,5 +1,7 @@ # Unreleased - +* [fixed] Bumped DataStore dependency to include the mitigation for + `CorruptionException` released in version `1.1.5`. See Jetpacks' DataStore + [release notes](https://developer.android.com/jetpack/androidx/releases/datastore#1.1.5). # 3.0.0 * [changed] Added internal api for Crashlytics to notify Sessions of crash events @@ -55,4 +57,3 @@ # 1.0.0 * [feature] Initial Firebase sessions library. - diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a634c5f080f..40fc59d2a6f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -19,7 +19,7 @@ constraintlayout = "2.1.4" coreKtx = "1.12.0" coroutines = "1.9.0" dagger = "2.51" # Don't bump above 2.51 as it causes a bug in AppDistro FeedbackSender JPEG code -datastore = "1.1.3" +datastore = "1.1.7" dexmaker = "2.28.1" dexmakerVersion = "1.2" espressoCore = "3.6.1" @@ -238,4 +238,4 @@ spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } protobuf = { id = "com.google.protobuf", version.ref = "protobufGradlePlugin" } errorprone = { id = "net.ltgt.errorprone", version.ref = "gradleErrorpronePlugin" } google-services = { id = "com.google.gms.google-services", version.ref = "googleServices" } -crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsGradle" } \ No newline at end of file +crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "firebaseCrashlyticsGradle" } diff --git a/release.json b/release.json new file mode 100644 index 00000000000..2f677b9e036 --- /dev/null +++ b/release.json @@ -0,0 +1,7 @@ +{ + "name": "m169", + "libraries": [ + ":firebase-ai", + ":firebase-perf" + ] +} \ No newline at end of file diff --git a/release_report.json b/release_report.json new file mode 100644 index 00000000000..dd9c6349402 --- /dev/null +++ b/release_report.json @@ -0,0 +1,95 @@ +{ + "changesByLibraryName": { + "firebase-ai": [ + { + "commitId": "be8f4809baa8eaca33cd7d4c21b955d40204dfd7", + "prId": "7272", + "author": "Rodrigo Lazo", + "message": "[AI] Add support for thinkingSummaries and thoughtSignatures (#7272)\n\nAdded support for returning [thought\nsummaries](https://ai.google.dev/gemini-api/docs/thinking#summaries)\nwhen using thinking-compatible models.\n\nAdditionally, it adds support for automatic handling of\n`thoughtSignatures`.\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/be8f4809baa8eaca33cd7d4c21b955d40204dfd7", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7272" + }, + { + "commitId": "c85227e344230aa676066352184bc6ccd510294f", + "prId": "7270", + "author": "Rodrigo Lazo", + "message": "[AI] Correctly handle empty candidates in the accessors (#7270)\n\nBefore, if a response had no candidates, accessors would throw an\nexception when used instead of handle the case elegantly. Now they\neither return an empty list, for collections, or null, for string.\n\nThe test file is added in\nhttps://github.com/FirebaseExtended/vertexai-sdk-test-data/pull/48", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/c85227e344230aa676066352184bc6ccd510294f", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7270" + }, + { + "commitId": "da659d7d614c41375a29868bed234b6890329e18", + "prId": "7259", + "author": "Rodrigo Lazo", + "message": "[Ai] Expose `APINotConfiguredException` in the public API (#7259)\n\nThe exception was added in #7233 but was mistakenly marked as internal.", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/da659d7d614c41375a29868bed234b6890329e18", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7259" + }, + { + "commitId": "628a6c6131fe14916592e60da5b4eeea94537b03", + "prId": "7260", + "author": "David Motsonashvili", + "message": "Added dilation parameter to generateMaskAndPadForOutpainting (#7260)\n\nThe dilation parameter gets passed through to the mask, and is optional.\n\nEnded up doing manual overloading to preserve binary compatibility.\n\n---------\n\nCo-authored-by: David Motsonashvili ", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/628a6c6131fe14916592e60da5b4eeea94537b03", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7260" + }, + { + "commitId": "2253d3f53da5b047b1525b5ef0bb07f80df2d1d0", + "prId": "7229", + "author": "David Motsonashvili", + "message": "documentation fixes for M168 (#7229)\n\nCo-authored-by: David Motsonashvili ", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/2253d3f53da5b047b1525b5ef0bb07f80df2d1d0", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7229" + }, + { + "commitId": "5e778b940e72d6ce10455a6604f2857820df1d28", + "prId": "7250", + "author": "emilypgoogle", + "message": "Configure Firebase AI tests to run nightly (#7250)\n\n", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/5e778b940e72d6ce10455a6604f2857820df1d28", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7250" + }, + { + "commitId": "8b1b50d421d558ca0d7e3f606fb289a5a370275d", + "prId": "7233", + "author": "emilypgoogle", + "message": "Add NotConfiguredException with a better error message than provided by the server. (#7233)\n\nThe previous error text \"genai config not found\" is ambiguous and as a\ngeneric ServerException did not provide documentation for resolutions.", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/8b1b50d421d558ca0d7e3f606fb289a5a370275d", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7233" + }, + { + "commitId": "316e1686c3ac9675384da435f43a1eff6c78f755", + "prId": "7228", + "author": "Ryan Wilson", + "message": "Temporarily remove CHANGELOG entry (#7228)\n\nThe backend won't be published until sometime next week, removing this\nuntil it's ready. No changes to the code are necessary as there are no\npublic API changes and it'll still hit a runtime error.", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/316e1686c3ac9675384da435f43a1eff6c78f755", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7228" + } + ], + "firebase-perf": [ + { + "commitId": "e11e900b31360e6dba51adab7b26b5329903ebf4", + "prId": "7274", + "author": "Tejas Deshpande", + "message": "Make a change to prevent false positive background app starts. (#7274)\n\nAdded a change in `AppStartTrace` to prevent false positives of a\nbackground app start on API 34+ devices.\n\nSee https://github.com/firebase/firebase-android-sdk/issues/5920\n\nVerified locally:\n\n```\n2025-08-20 10:34:51.283 18373-18373 AppMonDemo com.tdeshpande.appmontester D mainThreadRunnable.run(): activityCreated = false\n2025-08-20 10:34:51.292 18373-18373 AppMonDemo com.tdeshpande.appmontester D onActivityPreCreated: mainThreadRunnableRun = true\n2025-08-20 10:34:51.294 18373-18373 AppMonDemo com.tdeshpande.appmontester D onActivityCreated: mainThreadRunnableRun = true\n2025-08-20 10:34:51.314 18373-18373 AppMonDemo com.tdeshpande.appmontester D onActivityStarted: mainThreadRunnableRun = true\n2025-08-20 10:34:51.318 18373-18373 FirebasePerformance com.tdeshpande.appmontester I Firebase Performance Monitoring is successfully initialized! In a minute, visit the Firebase console to view your data: \n2025-08-20 10:34:51.319 18373-18373 FirebasePerformance com.tdeshpande.appmontester D onResume(): com.tdeshpande.appmontester.MainActivity: 74362 microseconds\n2025-08-20 10:34:51.320 18373-18373 AppMonDemo com.tdeshpande.appmontester D onActivityResumed: mainThreadRunnableRun = true\n2025-08-20 10:34:51.323 18373-18431 FirebasePerformance com.tdeshpande.appmontester I Logging trace metric: _as (duration: 74.362ms). In a minute, visit the Firebase console to view your data: \n```", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/e11e900b31360e6dba51adab7b26b5329903ebf4", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7274" + }, + { + "commitId": "042827da3e2106264b87dd777eed3f32034851f2", + "prId": "7214", + "author": "Tejas Deshpande", + "message": "Refactor RCM fetch random delay to not depend on FirebaseApp initialization. (#7214)\n\nThis should help address the issue where there could be a deadlock if\n`FirebaseApp` is still being initialized.\n\nSee https://github.com/firebase/firebase-android-sdk/issues/4831", + "commitLink": "https://github.com/firebase/firebase-android-sdk/commit/042827da3e2106264b87dd777eed3f32034851f2", + "prLink": "https://github.com/firebase/firebase-android-sdk/pull/7214" + } + ] + }, + "changedLibrariesWithNoChangelog": [ + ":firebase-appdistribution", + ":firebase-appdistribution-api", + ":firebase-config", + ":firebase-dataconnect", + ":firebase-ml-modeldownloader" + ] +} \ No newline at end of file diff --git a/release_report.md b/release_report.md new file mode 100644 index 00000000000..9e0841bfc22 --- /dev/null +++ b/release_report.md @@ -0,0 +1,42 @@ +# Release Report +## firebase-ai + +* [AI] Add support for thinkingSummaries and thoughtSignatures (#7272) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7272) [commit](https://github.com/firebase/firebase-android-sdk/commit/be8f4809baa8eaca33cd7d4c21b955d40204dfd7) [Rodrigo Lazo] + +* [AI] Correctly handle empty candidates in the accessors (#7270) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7270) [commit](https://github.com/firebase/firebase-android-sdk/commit/c85227e344230aa676066352184bc6ccd510294f) [Rodrigo Lazo] + +* [Ai] Expose `APINotConfiguredException` in the public API (#7259) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7259) [commit](https://github.com/firebase/firebase-android-sdk/commit/da659d7d614c41375a29868bed234b6890329e18) [Rodrigo Lazo] + +* Added dilation parameter to generateMaskAndPadForOutpainting (#7260) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7260) [commit](https://github.com/firebase/firebase-android-sdk/commit/628a6c6131fe14916592e60da5b4eeea94537b03) [David Motsonashvili] + +* documentation fixes for M168 (#7229) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7229) [commit](https://github.com/firebase/firebase-android-sdk/commit/2253d3f53da5b047b1525b5ef0bb07f80df2d1d0) [David Motsonashvili] + +* Configure Firebase AI tests to run nightly (#7250) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7250) [commit](https://github.com/firebase/firebase-android-sdk/commit/5e778b940e72d6ce10455a6604f2857820df1d28) [emilypgoogle] + +* Add NotConfiguredException with a better error message than provided by the server. (#7233) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7233) [commit](https://github.com/firebase/firebase-android-sdk/commit/8b1b50d421d558ca0d7e3f606fb289a5a370275d) [emilypgoogle] + +* Temporarily remove CHANGELOG entry (#7228) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7228) [commit](https://github.com/firebase/firebase-android-sdk/commit/316e1686c3ac9675384da435f43a1eff6c78f755) [Ryan Wilson] + +## firebase-perf + +* Make a change to prevent false positive background app starts. (#7274) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7274) [commit](https://github.com/firebase/firebase-android-sdk/commit/e11e900b31360e6dba51adab7b26b5329903ebf4) [Tejas Deshpande] + +* Refactor RCM fetch random delay to not depend on FirebaseApp initialization. (#7214) + [pr](https://github.com/firebase/firebase-android-sdk/pull/7214) [commit](https://github.com/firebase/firebase-android-sdk/commit/042827da3e2106264b87dd777eed3f32034851f2) [Tejas Deshpande] + + +## SDKs with changes, but no changelogs +:firebase-appdistribution +:firebase-appdistribution-api +:firebase-config +:firebase-dataconnect +:firebase-ml-modeldownloader \ No newline at end of file