Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions firebase-crashlytics/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- [feature] Decorate OOM and MLK events with whether a heap dump was generated and heap dump
collection is enabled [#8549]
- [fixed] Fixed event timestamps on ANR events [#8612]
- [feature] Enable heap dump uploads for OOM and MLK issues on API levels 37+ [#8661]

# 20.1.1

Expand Down
9 changes: 8 additions & 1 deletion firebase-crashlytics/firebase-crashlytics.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,11 @@ android {
timeOutInMs 60 * 1000
}
namespace "com.google.firebase.crashlytics"
compileSdkVersion 37
compileSdk {
version = release(37) {
minorApiLevel = 2
}
}
testOptions {
targetSdk project.targetSdkVersion
unitTests.includeAndroidResources = true
Expand Down Expand Up @@ -94,12 +98,15 @@ dependencies {
api(project(":firebase-installations-interop"))
api("com.google.firebase:firebase-measurement-connector:20.0.1")

implementation files('libs/scotty-all.jar')

// TODO(m187-repin): restore pin on com.google.android.datatransport:transport-api.
implementation(project(":transport:transport-api"))
// TODO(m187-repin): restore pin on com.google.android.datatransport:transport-backend-cct.
implementation(project(":transport:transport-backend-cct"))
// TODO(m187-repin): restore pin on com.google.android.datatransport:transport-runtime.
implementation(project(":transport:transport-runtime"))

implementation(libs.androidx.annotation)
compileOnly(libs.errorprone.annotations)

Expand Down
Binary file added firebase-crashlytics/libs/scotty-all.jar
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import com.google.android.gms.tasks.TaskCompletionSource;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.concurrent.TestOnlyExecutors;
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponent;
import com.google.firebase.crashlytics.internal.CrashlyticsTestCase;
Expand All @@ -49,6 +50,7 @@
import com.google.firebase.crashlytics.internal.metadata.UserMetadata;
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport;
import com.google.firebase.crashlytics.internal.persistence.FileStore;
import com.google.firebase.crashlytics.internal.persistence.ResumableUploadMetadataStore;
import com.google.firebase.crashlytics.internal.settings.Settings;
import com.google.firebase.crashlytics.internal.settings.SettingsProvider;
import com.google.firebase.crashlytics.internal.settings.TestSettings;
Expand Down Expand Up @@ -165,6 +167,9 @@ public CrashlyticsController build() {
CrashlyticsFileMarker crashMarker =
new CrashlyticsFileMarker(CrashlyticsCore.CRASH_MARKER_FILE_NAME, testFileStore);

ResumableUploadMetadataStore resumableUploadMetadataStore =
new ResumableUploadMetadataStore(testContext, testFileStore);

List<BuildIdInfo> buildIdInfoList = new ArrayList<>();
buildIdInfoList.add(new BuildIdInfo("lib.so", "x86", "aabb"));
AppData appData =
Expand All @@ -178,6 +183,16 @@ public CrashlyticsController build() {
"versionName",
mock(DevelopmentPlatformProvider.class));

FirebaseApp firebaseApp = mock(FirebaseApp.class);
FirebaseOptions options =
new FirebaseOptions.Builder()
.setApiKey("api-key")
.setApplicationId("applicationId")
.setProjectId("projectId")
.build();

when(firebaseApp.getOptions()).thenReturn(options);

final CrashlyticsController controller =
new CrashlyticsController(
testContext.getApplicationContext(),
Expand All @@ -192,7 +207,9 @@ public CrashlyticsController build() {
nativeComponent,
analyticsEventLogger,
mock(CrashlyticsAppQualitySessionsSubscriber.class),
crashlyticsWorkers);
crashlyticsWorkers,
resumableUploadMetadataStore,
firebaseApp);
return controller;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import android.app.ApplicationExitInfo;
import android.content.Context;
import android.os.Parcel;
import android.system.OsConstants;
import androidx.test.filters.SdkSuppress;
import androidx.test.platform.app.InstrumentationRegistry;
import com.google.android.gms.tasks.Task;
Expand All @@ -50,6 +49,7 @@
import com.google.firebase.crashlytics.internal.model.CrashlyticsReport.CustomAttribute;
import com.google.firebase.crashlytics.internal.persistence.CrashlyticsReportPersistence;
import com.google.firebase.crashlytics.internal.persistence.FileStore;
import com.google.firebase.crashlytics.internal.persistence.ResumableUploadMetadataStore;
import com.google.firebase.crashlytics.internal.send.DataTransportCrashlyticsReportSender;
import java.io.File;
import java.io.IOException;
Expand Down Expand Up @@ -96,6 +96,9 @@ public void setUp() {
FileStore testFileStore = new FileStore(getContext());
reportMetadata = new UserMetadata(TEST_SESSION_ID, testFileStore, crashlyticsWorkers);

ResumableUploadMetadataStore resumableUploadMetadataStore =
new ResumableUploadMetadataStore(getContext(), testFileStore);

reportingCoordinator =
new SessionReportingCoordinator(
dataCapture,
Expand All @@ -104,7 +107,8 @@ public void setUp() {
logFileManager,
reportMetadata,
idManager,
crashlyticsWorkers);
crashlyticsWorkers,
resumableUploadMetadataStore);
}

@After
Expand Down Expand Up @@ -631,30 +635,6 @@ public void testIsOom_skipsAllIrrelevantAppExitInfos() {
assertFalse(isOom);
}

@Test
public void testIsOom_returnsTrueOnReasonSignaled() {
ApplicationExitInfo oom =
makeApplicationExitInfo(ApplicationExitInfo.REASON_SIGNALED, 0, OsConstants.SIGKILL);
ApplicationExitInfo nonOom = makeApplicationExitInfo(ApplicationExitInfo.REASON_ANR, 0, 0);

boolean isOom = reportingCoordinator.isOom("sessionId", List.of(nonOom, oom));

assertTrue(isOom);
}

@SdkSuppress(minSdkVersion = 37)
@Test
public void testIsOom_returnTrueOnReasonLowMemory() {
ApplicationExitInfo oom =
makeApplicationExitInfo(
ApplicationExitInfo.REASON_LOW_MEMORY, /* SUBREASON_OOM_KILL= */ 30, 0);
ApplicationExitInfo nonOom = makeApplicationExitInfo(ApplicationExitInfo.REASON_ANR, 0, 0);

boolean isOom = reportingCoordinator.isOom("sessionId", List.of(nonOom, oom));

assertTrue(isOom);
}

@SdkSuppress(minSdkVersion = 37)
@Test
public void testIsMemoryLimiterKill() {
Expand Down
Loading
Loading