Skip to main content

Migrating from 6.x to 7.x

Bugsee Android SDK 7.x (beta)

This guide targets the 7.x release line, which is currently in beta. If you are setting up a brand-new project, start from the 7.x installation guide instead. For stable (6.x) installs, see the main installation guide.

This guide walks SDK embedders through every public-API change between Bugsee Android SDK 6.x (bugsee-android AAR) and 7.x (bugsee-android + extension modules).

TL;DR

7.x is a near-total rewrite. Many 6.x methods still exist with the same name but the dependency layout, the option keys, the listener shapes, and the network-client integration model have all changed. You will need code changes; an annotation-only upgrade is not possible.


1. Gradle / dependency changes

1.1 Add the Bugsee Gradle plugin

7.x relies on bytecode and Kotlin-compiler instrumentation provided by the Bugsee Gradle plugin. It is mandatory even if you only use the core artifact — without it, several features stop working entirely.

Use plugin 4.x with SDK 7.x

The Bugsee Gradle plugin is versioned independently of the SDK runtime library. Plugin 4.x is paired with SDK 7.x (both currently in beta); plugin 3.x is paired with SDK 6.x. The two lines are not interchangeable — if you pull the 7.x SDK into a project that still references a 3.x plugin version, the build or runtime will fail. See Gradle plugin — Requirements and compatibility for the supported plugin version.

// settings.gradle.kts (or root build.gradle.kts buildscript block)
plugins {
id("com.bugsee.android.gradle") version "<plugin-version>"
}

The plugin automatically performs the following work at build time. None of it requires any code changes on your side, but understanding what it does explains why so much of the 6.x boilerplate disappears in 7.x.

CapabilityWhat the plugin doesReplaces in 6.x
Logcat captureRewrites every android.util.Log.* static call site to forward through BugseeLogAdapter and then call the original Log method.The 6.x in-process Logcat tail reader.
OkHttp captureInjects BugseeOkHttpInterceptor into every OkHttpClient.Builder.build() site.Bugsee.addNetworkLoggingToOkHttpBuilder(...) and addNetworkLoggingToOkHttpClient(...).
HttpEngine captureWraps every android.net.http.HttpEngine.Builder.build() call site with BugseeHttpEngineAdapter.wrapHttpEngine(...).New in 7.x — Android 14+ platform HTTP API was not supported in 6.x.
Compose touch captureInstruments AndroidComposeView.dispatchTouchEvent to forward to BugseeComposeInputAdapter.New in 7.x — Compose was not supported in 6.x.
Compose secure modifierThe Kotlin compiler plugin auto-injects Modifier.bugseeSecure() into password TextField call sites.New in 7.x.
Native crash threadingInjects BugseeThreadAdapter.registerThread() at the start of every Runnable.run() / Thread.run() to build the JVM↔native thread ID map used by the NDK crash reporter.A 6.x runtime hack that hooked Thread.start reflectively.
APM operation dispatchInjects BugseeOperationDispatcher.onXxxOperationStart/End() around guarded I/O, network, DB, and SharedPreferences operations so the APM providers can emit db.* / file.* / http.client spans without runtime reflection.New in 7.x (APM did not exist).
Main-thread misuse detectionInjects pre-call checks before the same set of guarded operations and reports violations to the SDK when the calling thread is the main thread.New in 7.x — pairs with Options.DetectAndReportMainThreadMisuse.
Auto-install of extension modulesDetects OkHttp / Ktor 2 / Ktor 3 / Cronet / Compose dependencies in your build and auto-adds the matching bugsee-android-<name> module at the same version as the plugin.The single-artifact 6.x model where every capability lived in bugsee-android.
BUILD_UUID manifest injectionWires into AGP's merged-manifest transform pipeline to inject a per-build UUID.The 6.x ad-hoc manifest placeholder.
Mapping file uploadFinalizes assemble<Variant> / bundle<Variant> with a task that uploads the ProGuard / R8 mapping.The 6.x bugsee-mapping-uploader ad-hoc script.
NDK symbol uploadSame finalization model, scoped to extracted native debug metadata when bugsee { ndk(true) } is set.A separate manual native-symbols upload step.
Size analysis uploadUploads AAB/APK for size tracking when bugsee { sizeAnalysis { enabled.set(true) } } is set.New in 7.x.

Every instrumentation and auto-install rule can be toggled individually through the bugsee { instrumentation { … } } block in your build script. This includes the ktor and cronet properties that control whether the plugin auto-adds Ktor and Cronet extension modules.

note

Bytecode instrumentation is only applied to application modules (com.android.application). Library modules are not instrumented.

Cronet and Ktor are not fully transparent

Even with the Gradle plugin doing dependency auto-install, you still need to wrap your CronetEngine (BugseeCronet.instrument(engine)) and install(...) the Bugsee plugin into every Ktor HttpClient you create. The "manual wiring" rows in §5 cover the exact call sites.

1.2 Replace the single AAR with module-specific artifacts

6.x7.x
implementation("com.bugsee:bugsee-android:6.x.x")implementation("com.bugsee:bugsee-android:7.x.x")
(no separate feedback artifact)implementation("com.bugsee:bugsee-android-feedback:7.x.x")
(no separate network artifacts)implementation("com.bugsee:bugsee-android-okhttp:7.x.x")
(no Ktor 2 support)implementation("com.bugsee:bugsee-android-ktor-2:7.x.x")
(no Ktor 3 support)implementation("com.bugsee:bugsee-android-ktor-3:7.x.x")
(no Cronet support)implementation("com.bugsee:bugsee-android-cronet:7.x.x")
(no Compose support)implementation("com.bugsee:bugsee-android-compose:7.x.x")

With the Bugsee Gradle plugin (recommended): The plugin automatically analyzes your project's dependencies and pulls in the matching Bugsee extension modules for you. If your project depends on OkHttp, Ktor, Cronet, or Compose, the corresponding bugsee-android-* extension is added automatically — you do not need to declare it yourself. You only need to manually add extensions that are not dependency-driven (e.g. feedback).

Without the Gradle plugin: You must manually add every extension module you need to your dependency block. The table above lists all available modules.

1.3 ProGuard / R8

The 6.x consumer rules are replaced by the new ones bundled in bugsee-android 7.x. Remove any custom keep rules you copy-pasted into your own ProGuard configuration that referenced 6.x internal classes — most are gone or renamed.


2. Launching the SDK

2.1 Automatic launch via manifest metadata

In 7.x, if the application token is present in the AndroidManifest.xml metadata, the SDK launches automatically at app startup via a ContentProvider — no Bugsee.launch(...) call is needed at all. This is the recommended approach for most apps.

Add the token to your manifest's <application> block:

<application ...>
<meta-data
android:name="com.bugsee.app-token"
android:value="<your-app-token>" />
</application>

You can also reference a string resource instead of hardcoding the token:

<meta-data
android:name="com.bugsee.app-token"
android:value="@string/bugsee_app_token" />

SDK options can also be configured via manifest metadata. Each Options.* constant doubles as a manifest key. For example:

<meta-data android:name="com.bugsee.option.detect.crash-ndk"
android:value="true" />
<meta-data android:name="com.bugsee.option.capture.breadcrumbs"
android:value="true" />
<meta-data android:name="com.bugsee.option.config.duration"
android:value="120" />
<meta-data android:name="com.bugsee.option.reporting.triggers.shake"
android:value="false" />
<meta-data android:name="com.bugsee.option.capture.video.frame-rate"
android:value="Low" />

For enum-typed options, pass the enum value name as a string (e.g. "High" for FrameRate.High, "Blocker" for IssueSeverity.Blocker).

Options passed programmatically via Bugsee.launch(context, token, options) take precedence over manifest values.

2.2 Manual Bugsee.launch(...) overloads

If no token is in the manifest, the SDK must be launched manually. The Application/Activity requirement is dropped. The new minimal call is:

// 6.x
Bugsee.launch(application, "<token>");

// 7.x
Bugsee.launch("<token>");

The Application instance is auto-discovered via BugseeInitProvider. If you want to pass a context explicitly (for example because you are launching from a non-Application initializer), use:

Bugsee.launch(context, "<token>");

2.3 LaunchOptions is removed

The fluent LaunchOptions builder (and its General / Video / Network / Custom / Anr nested builders) does not exist in 7.x. Replace it with a Map<String, Serializable> keyed by Options.* constants:

// Map form (analogous to the 6.x HashMap variant)
Map<String, Serializable> options = new HashMap<>();
options.put(Options.Duration, 60);
options.put(Options.CaptureNetwork, true);
options.put(Options.ReportingTriggerByShake, true);
Bugsee.launch(context, "<token>", options);

// With async completion callback
Bugsee.launch(context, "<token>", options, success -> { /* called when launch finishes */ });

2.4 relaunch() and stop() gain async variants

Bugsee.relaunch(success -> { /* ... */ });
Bugsee.relaunch(newOptions, success -> { /* ... */ });
Bugsee.stop(() -> { /* fully stopped */ });

The synchronous overloads still exist.

2.5 Renamed and removed lifecycle methods

Bugsee.pause()Bugsee.startBlackout(), and Bugsee.resume()Bugsee.endBlackout(). The semantics are unchanged — the pair brackets a window where video is blanked and touches are dropped — but the names now reflect what they actually do. Bugsee.isResumed() was removed (no 7.x replacement).

Bugsee.getDeviceId() was removed. Use the device-correlation features in your dashboard instead.

Bugsee.setEmail() / getEmail() were removed. Use Bugsee.setUserIdentifier() / getUserIdentifier() / clearUserIdentifier() instead.


3. Option-key renames

Every option key changed name. Use this table to do a mechanical search/replace from Bugsee.Option.X to Options.Y. The constants now live in com.bugsee.library.contracts.options.Options.

Reporting triggers

6.x (Bugsee.Option)7.x (Options)
ShakeToTriggerReportingTriggerByShake
ScreenshotToTriggerReportingTriggerByScreenshot
NotificationBarTriggerReportingTriggerByNotification
(no broadcast trigger)ReportingTriggerByBroadcast

Detection flags

6.x7.x
CrashReportDetectAndReportCrash
DetectAppExitDetectAndReportExit
DetectAppLaunchCrashDetectAndReportEarlyCrash
(not available)DetectAndReportCrashNdk
(not available)DetectAndReportHang
(not available)DetectAndReportMainThreadMisuse
(not available)DetectAndReportHttpErrors
(not available)The full DetectAndReportExit* family for granular ANR / OOM / user-stop / package-update reasons.

Capture flags

6.x7.x
CaptureLogsCaptureLogs (unchanged)
LogLevelCaptureLogsLevel
MonitorNetworkCaptureNetwork
MaxNetworkBodySizeCaptureNetworkBodySizeLimit
RecordHttpBodyWithoutTypeCaptureNetworkBodyWithoutType
ScreenshotEnabledCaptureScreenshot
ViewHierarchyEnabledCaptureViewHierarchy
MaxRecordingTimeDuration
(not available)CaptureLogsUseAllSources
(not available)CaptureNetworkUseDefaultSanitizer
(not available)CaptureBreadcrumbs, CaptureBreadcrumbsExtras
(not available)CaptureVideoMode, CaptureVideoQuality, CaptureVideoFrameRate, CaptureVideoScale, and the CaptureVideoFullscreen* family

Reporting UI / defaults

6.x7.x
ReportSummaryRequiredReportingUISummaryRequired
ReportDescriptionRequiredReportingUIDescriptionRequired
ReportEmailRequiredReportingUIEmailRequired
ReportLabelsEnabledReportingUILabelsEnabled
ReportLabelsRequiredReportingUILabelsRequired
ReportPrioritySelectorReportingUIPrioritySelectorEnabled
DefaultCrashPriorityReportingDefaultCrashPriority
DefaultBugPriorityReportingDefaultBugPriority
(not available)ReportingDefaultErrorPriority

Other

6.x7.x
WifiOnlyUploadWifiOnlyUpload (unchanged)
ServiceModeremoved; replaced by the CaptureVideoMode enum and CaptureVideoFullscreen* options.
SkipVideoFramesOnScrollremoved; supplanted by CaptureVideoSecureScrolling (V1 only).
CaptureDeviceAndNetworkNamesremoved; device naming is captured automatically.
Bugsee.Override.AttachmentOverrideLabelsremoved; use ReportHandler.

Removed enum value

IssueSeverity.Critical is removed in 7.x. Map it to either High or Blocker depending on intent.


4. Feedback moved to its own module

Feedback is no longer part of the core artifact. Add the dependency:

implementation("com.bugsee:bugsee-android-feedback:7.x.x")

The extension auto-registers via its own ContentProvider. Then update your call sites:

// 6.x
Bugsee.showFeedbackActivity(context);
Bugsee.setOnNewFeedbackListener(listener);
Bugsee.setDefaultFeedbackGreeting("Hi!");

// 7.x
Feedback feedback = Bugsee.ext(Feedback.class);
if (feedback != null) {
feedback.showFeedbackActivity();
feedback.setOnNewFeedbackListener(listener);
feedback.setDefaultFeedbackGreeting("Hi!");
}

The Feedback interface lives in com.bugsee.library.contracts.extensions.Feedback (shipped inside bugsee-android-feedback). The null check matters because ext returns null whenever the extension module is not on the classpath — your code remains compilable even if a downstream consumer drops the feedback module.


5. Network client integration

In 6.x, every supported HTTP client was wired up by an explicit static helper on Bugsee. In 7.x, each client is its own extension module that auto-instruments at build time. The 6.x helpers are gone.

6.x call7.x replacement
Bugsee.addNetworkLoggingToOkHttpBuilder(builder)Add bugsee-android-okhttp to dependencies. The Bugsee Gradle plugin instruments every OkHttpClient.Builder.build() call site at compile time, so no code changes are required. The Gradle plugin auto-pulls the extension when it detects OkHttp in your build.
Bugsee.addNetworkLoggingToOkHttpClient(okhttp2Client)Not supported. OkHttp 2 is no longer a supported HTTP client.
Bugsee.addNetworkLoggingToKtorHttpClient(ktor1Client)Add bugsee-android-ktor-2 (for Ktor 2.x) or bugsee-android-ktor-3 (for Ktor 3.x), then install the plugin in every HttpClient you create (see below). The Gradle plugin auto-pulls the matching artifact, but the install(...) call is your responsibility — Ktor's pipeline is opt-in per client instance.
Bugsee.addNetworkLoggingToPicassoDownloader(downloader)Picasso uses OkHttp under the hood — install bugsee-android-okhttp and Picasso traffic is captured for free.
Bugsee.newOkHttpWrappedWebSocket(...)Standard OkHttpClient.newWebSocket(...) is captured automatically by the OkHttp extension.
(no Cronet support)Add bugsee-android-cronet and wrap your CronetEngine with BugseeCronet.instrument(engine) (see below).

Ktor 2.x

val client = HttpClient {
install(BugseeKtor2Plugin)
// ... your other plugins
}

BugseeKtor2Plugin is the plugin object exposed on com.bugsee.library.ktor2.BugseeKtor2Plugin. It takes no parameters; its configuration is bridged from Bugsee.launch(...) through a process-wide static, so the plugin no-ops automatically when the SDK is not active.

Ktor 3.x

val client = HttpClient {
install(BugseeKtor3Plugin.Plugin)
// ... your other plugins
}

Same model as Ktor 2 but using Ktor 3.x's createClientPlugin API. Note that the install target is BugseeKtor3Plugin.Plugin (a property on the companion), not the class itself.

Cronet

val engine = BugseeCronet.instrument(
CronetEngine.Builder(context).build()
)

BugseeCronet.instrument(engine) returns a delegating CronetEngineWrapper that captures request/redirect/complete/error events on every request the engine creates. The call is idempotent — wrapping an already-wrapped engine returns the same instance — and the wrapper is a transparent pass-through when the SDK is not active.

Removing the manual wiring is mandatory

After upgrading, delete any 6.x wiring code such as:

OkHttpClient client = Bugsee
.addNetworkLoggingToOkHttpBuilder(new OkHttpClient.Builder())
.build();

The 7.x bytecode instrumentation already covers every OkHttpClient.Builder.build() call site in your app, so leaving the 6.x calls in (a) will not compile because the helpers no longer exist, and (b) would otherwise install a no-op interceptor in addition to the real one.


6. Filtering: network and log events

The 6.x callback-style filters are replaced by a single generic EventFilter<T> interface.

// 6.x
Bugsee.setNetworkEventFilter((event, listener) -> {
if (event.getUrl().contains("token")) {
event.setUrl(redact(event.getUrl()));
}
listener.onFinish(event);
});

Bugsee.setLogFilter((log, listener) -> {
listener.onFinish(log);
});

// 7.x
Bugsee.setNetworkEventFilter(event -> {
if (event.getUrl().contains("token")) {
event.setUrl(redact(event.getUrl()));
}
return event; // return null to drop the event
});

Bugsee.setLogEventFilter(log -> log);

Notable shape changes:

  • The filter is a single-method interface. Return the (mutated) event to keep it; return null to drop it. There is no second-arg listener callback.
  • The event types are now NetworkEvent / LogEvent (in com.bugsee.library.contracts), not BugseeNetworkEvent / BugseeLog.
  • The helper getters/setters on NetworkEvent are largely the same as on BugseeNetworkEvent. getNoBodyReason() is preserved.
  • setLogFilter(...) is kept as an alias for setLogEventFilter(...) to smooth call-site migration.

7. Manual reports and the report handler

The 6.x createReport(...) family that mutates an ExtendedReport is gone. Two replacement APIs cover its uses:

7.1 Show the standard report dialog

// 6.x
Bugsee.createReport();
Bugsee.createReport(IssueSeverity.High);

// 7.x
Bugsee.showReportDialog();
Bugsee.showReportDialog("Summary", "Description");
Bugsee.showReportDialog("Summary", "Description", IssueSeverity.High);
Bugsee.showReportDialog("Summary", "Description", IssueSeverity.High, labels);

The 7.x overloads accept pre-filled summary, description, severity, and labels. There is no severity-only overload; if you need to set a severity without pre-filling other fields, pass null for summary and description.

7.2 Mutate every report before upload via ReportHandler

ReportHandler is the unified hook that supersedes 6.x's ExtendedReportCreatedListener, ReportFieldsFilter, and ReportAttachmentsProvider. It provides two callbacks:

Bugsee.setReportHandler(new ReportHandler() {
@Override
public void onBeforeReportCreated(Report report, boolean isTerminating, Runnable completionCallback) {
report.setSummary("[" + buildVariant + "] " + report.getSummary());
report.setSeverity(IssueSeverity.High);
completionCallback.run(); // MUST call to continue the pipeline
}

@Override
public void onAfterReportCreated(Report report, boolean isTerminating, Runnable completionCallback) {
report.addAttachment(loadConfigSnapshot());
completionCallback.run();
}
});

Both callbacks receive an isTerminating flag. When true, the process is about to exit (e.g. unhandled crash); call the completion callback immediately or not at all — the pipeline continues regardless.

6.x7.x
Bugsee.createReport(ExtendedReportCreatedListener)Bugsee.createReport(ReportCreationListener)
Bugsee.setReportFieldsFilter(...)Bugsee.setReportHandler(...)
Bugsee.setReportAttachmentsProvider(...)Bugsee.setReportHandler(...) (call report.addAttachment(...))
ExtendedReport.exportVideo(...)Not exposed; reports always include video by default.

The 6.x 3 attachments × 3 MB quota is preserved; enforce it inside your own ReportHandler if needed.


8. Privacy / secure-area APIs

7.x ships a much richer set of privacy primitives.

6.x7.x
addSecureView(View)addSecureView(View) (unchanged).
addSecureView(Fragment, Activity)addSecureView(Fragment) (hosting Activity parameter removed).
removeSecureView(View)removeSecureView(View) (unchanged); plus removeSecureView(Fragment).
addSecureActivity(String)addSecureActivity(String) (unchanged).
removeSecureActivity(String)removeSecureActivity(String) (unchanged).
isSecureActivity(String)isSecureActivity(String) (unchanged).
addSecureRectangle(Rect)addSecureRectangle(Rect) (unchanged).
removeSecureRectangle(Rect)removeSecureRectangle(Rect) (unchanged).
removeAllSecureRectangles()removeAllSecureRectangles() (unchanged).
getAllSecureRectangles()getAllSecureRectangles() (unchanged).
addSecureWebView(WebView)addSecureWebView(WebView) (unchanged).
captureViewHierarchy()captureViewHierarchy() (unchanged).
addSecureViews(int layoutId, Activity)Deprecated — always returns false. Use addSecureView(View) instead.
Bugsee.pause()Bugsee.startBlackout() (renamed — same time-bounded full-redaction semantics).
Bugsee.resume()Bugsee.endBlackout() (renamed).
resetVideoCapturePermissionDecision()resetVideoCapturePermission() (renamed).

Compose secure modifier

If you use Jetpack Compose, add bugsee-android-compose and apply the Modifier.bugseeSecure() modifier to any sensitive composable. The Bugsee Kotlin compiler plugin can also auto-inject it into password TextField call sites if you opt in.


9. New capabilities (no 6.x equivalent)

9.1 User identity

Bugsee.setUserIdentifier("user-123");
String currentId = Bugsee.getUserIdentifier();
Bugsee.clearUserIdentifier();

9.2 logUnhandledException

6.x has logException() (preserved in 7.x), but the new logUnhandledException() is specific to crash-handler integrations:

Bugsee.logUnhandledException(thrown);

9.3 Performance monitoring (APM)

Transaction tx = Bugsee.startTransaction("checkout", "ui.checkout");
try {
Span query = Bugsee.startSpan("db.query", "SELECT cart");
// ...
query.finish();
} finally {
tx.finish(SpanStatus.OK);
}

APM is enabled by default. Tune it via Options.PerformanceMonitoring, Options.PerformanceSampleRate, and Options.PerformanceUploadMode.

note

Sampling only gates the standalone APM upload pipeline. Every transaction is always recorded into the capture buffer used for issue reports.


10. Appearance customization

In 6.x, BugseeAppearance is a plain data class with public fields. In 7.x it is a typed contract with setColor / setString setters.

// 6.x
BugseeAppearance appearance = Bugsee.getAppearance();
appearance.ReportActionBarColor = Color.BLACK;
appearance.FeedbackOutgoingBubbleColor = Color.BLUE;

// 7.x
Appearance appearance = Bugsee.getAppearance();
appearance
.setColor(ReportAppearance.ActionBarColor, Color.BLACK)
.setColor(FeedbackAppearance.OutgoingBubbleColor, Color.BLUE);

Property keys are namespaced strings (e.g. "Report::ActionBarColor", "Feedback::OutgoingBubbleColor", "Notification::Title") declared as constants on three sibling contract interfaces:

  • com.bugsee.library.contracts.appearance.ReportAppearance — bug-report UI colors and placeholders. Lives in bugsee-android.
  • com.bugsee.library.contracts.appearance.NotificationAppearance — notification trigger title. Lives in bugsee-android.
  • com.bugsee.library.contracts.appearance.FeedbackAppearance — feedback / chat UI colors. Lives in bugsee-android-feedback (only available when the feedback extension is on the classpath).

The 6.x field names map to 7.x constants by stripping the Report / Feedback / Notification prefix from the field name and looking the remainder up on the matching *Appearance interface — e.g. ReportActionBarColorReportAppearance.ActionBarColor, FeedbackOutgoingBubbleColorFeedbackAppearance.OutgoingBubbleColor, NotificationTitleNotificationAppearance.Title. The 6.x NotificationTitleResId field has no 7.x equivalent — pass the resolved string via NotificationAppearance.Title instead.


11. Migration cheat sheet

Use the same target column to drive a global search/replace pass.

6.x symbol7.x replacement
com.bugsee.library.LaunchOptions(removed; use Map<String, Serializable> keyed by Options.* constants)
Bugsee.Option.*Options.* (see §3)
Bugsee.launch(application, token)Manifest-based auto-launch, or Bugsee.launch(token)
Bugsee.launch(activity, token, launchOptions)Bugsee.launch(context, token, optionsMap) or manifest-based auto-launch
Bugsee.getDeviceId()(removed)
Bugsee.createReport()Bugsee.showReportDialog()
Bugsee.createReport(severity)Bugsee.showReportDialog(null, null, severity)
Bugsee.createReport(ExtendedReportCreatedListener)Bugsee.createReport(ReportCreationListener)
Bugsee.setReportFieldsFilter(...)Bugsee.setReportHandler(...)
Bugsee.setReportAttachmentsProvider(...)Bugsee.setReportHandler(...)
Bugsee.setNetworkEventFilter(NetworkEventFilter)Bugsee.setNetworkEventFilter(EventFilter<NetworkEvent>)
Bugsee.setLogFilter(LogFilter)Bugsee.setLogEventFilter(EventFilter<LogEvent>)
Bugsee.showFeedbackActivity(context)Bugsee.ext(Feedback.class).showFeedbackActivity()
Bugsee.setOnNewFeedbackListener(listener)Bugsee.ext(Feedback.class).setOnNewFeedbackListener(listener)
Bugsee.setDefaultFeedbackGreeting(s)Bugsee.ext(Feedback.class).setDefaultFeedbackGreeting(s)
Bugsee.addNetworkLoggingToOkHttpBuilder(b)(removed; add bugsee-android-okhttp)
Bugsee.addNetworkLoggingToOkHttpClient(c)(removed; OkHttp 2 unsupported)
Bugsee.addNetworkLoggingToKtorHttpClient(c)(removed; add bugsee-android-ktor-2 or -3)
Bugsee.addNetworkLoggingToPicassoDownloader(d)(removed; covered by bugsee-android-okhttp)
Bugsee.newOkHttpWrappedWebSocket(...)(removed; covered by bugsee-android-okhttp)
Bugsee.resetVideoCapturePermissionDecision()Bugsee.resetVideoCapturePermission()
BugseeAppearance (data class with public fields)Appearance (typed contract; use setColor / setString)
IssueSeverity.CriticalIssueSeverity.High or IssueSeverity.Blocker
BugseeNetworkEventNetworkEvent (com.bugsee.library.contracts)
BugseeLogLogEvent (com.bugsee.library.contracts)
BugseeLogLevel (com.bugsee.library.events)LogLevel (com.bugsee.library.contracts.options)
AdditionalDataCaptureDataRequestProvider (com.bugsee.library.contracts.common)
ExtendedReport / ExtendedReportCreatedListenerReport + ReportHandler / ReportCreationListener
ExceptionLoggingOptionsMap<String, Serializable> options overload on logException
Bugsee.setEmail(email) / getEmail()Bugsee.setUserIdentifier(id) / getUserIdentifier() / clearUserIdentifier()
Bugsee.pause() / resume()Bugsee.startBlackout() / endBlackout() (renamed)
Bugsee.isResumed()(removed; no replacement)
Bugsee.addSecureView(Fragment, Activity)Bugsee.addSecureView(Fragment) (hosting Activity param removed)
ServiceMode optionCaptureVideoMode enum + CaptureVideoFullscreen* options

  1. Update the dependency block. Replace the 6.x AAR coordinate, add the Bugsee Gradle plugin, and add only the extension modules you need.
  2. Delete network-wiring code. Remove every Bugsee.addNetworkLoggingTo* and newOkHttpWrappedWebSocket call site before fixing the resulting compilation errors.
  3. Replace LaunchOptions with either a Map<String, Serializable> or an OptionsContainer. Use the §3 rename table to update keys.
  4. Update Bugsee.launch(...) to the new context-less or context-only signature.
  5. Rewire feedback through Bugsee.ext(Feedback.class).
  6. Migrate filters to the single-method EventFilter<T> shape.
  7. Replace createReport-with-listener call sites with setReportHandler or createReport(ReportCreationListener).
  8. Adopt new privacy APIs — the blackout API and Compose secure modifier are new in 7.x. Most other secure-area methods are unchanged from 6.x.
  9. (Optional) Add user identity, custom events, exception logging, and APM for the new visibility they provide.

After each step, build and run your app — the 7.x APIs are designed to be incrementally adoptable in this order.