From 74fa6e44b96a653ca0dc0bf7412d322efa81bf56 Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Thu, 26 Mar 2026 17:22:11 -0700 Subject: [PATCH 1/8] add comment to so LLMs stop complaining --- .../observability/bridge/DictionaryTypeConverters.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs b/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs index 2f12b8cd7f..711b9eedac 100644 --- a/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs +++ b/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs @@ -59,6 +59,10 @@ internal static NSObject ToNSObject(object? value) } #elif ANDROID + // Returns a managed Dictionary (not Java.Util.HashMap) intentionally. + // The auto-generated Android binding marshals any IDictionary into a + // java.util.HashMap via JavaDictionary.ToLocalJniHandle() at JNI call + // time — changing this to Java.Util.HashMap causes double-marshaling bugs. internal static IDictionary? ToJavaDictionary(IDictionary? src) { if (src is null) return null; From 1c7dd715f7aaaf234fc52ad7f9f95a4604a81283 Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Thu, 26 Mar 2026 18:47:14 -0700 Subject: [PATCH 2/8] fix warnings --- .../LDObserve.Android.Binding.csproj | 2 +- .../Transforms/Metadata.xml | 3 +++ .../android/native/LDObserve/build.gradle.kts | 6 +++-- .../bridge/DictionaryTypeConverters.cs | 24 +++++++++---------- .../mobile-dotnet/sample/MauiProgram.cs | 2 +- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/sdk/@launchdarkly/mobile-dotnet/android/LDObserve.Android.Binding/LDObserve.Android.Binding.csproj b/sdk/@launchdarkly/mobile-dotnet/android/LDObserve.Android.Binding/LDObserve.Android.Binding.csproj index 1b40498296..6c90d0f0ed 100644 --- a/sdk/@launchdarkly/mobile-dotnet/android/LDObserve.Android.Binding/LDObserve.Android.Binding.csproj +++ b/sdk/@launchdarkly/mobile-dotnet/android/LDObserve.Android.Binding/LDObserve.Android.Binding.csproj @@ -10,7 +10,7 @@ To learn more, see: https://learn.microsoft.com/dotnet/core/deploying/trimming/prepare-libraries-for-trimming --> true - $(NoWarn);NU1605;NU1608 + $(NoWarn);NU1605;NU1608;BG8605;BG8606;BG8400 LDObserveAndroid + + + diff --git a/sdk/@launchdarkly/mobile-dotnet/android/native/LDObserve/build.gradle.kts b/sdk/@launchdarkly/mobile-dotnet/android/native/LDObserve/build.gradle.kts index 2022791182..9ec534c444 100644 --- a/sdk/@launchdarkly/mobile-dotnet/android/native/LDObserve/build.gradle.kts +++ b/sdk/@launchdarkly/mobile-dotnet/android/native/LDObserve/build.gradle.kts @@ -24,8 +24,10 @@ android { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } - kotlinOptions { - jvmTarget = "1.8" + kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8) + } } } diff --git a/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs b/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs index 711b9eedac..303a44c1e7 100644 --- a/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs +++ b/sdk/@launchdarkly/mobile-dotnet/observability/bridge/DictionaryTypeConverters.cs @@ -63,7 +63,7 @@ internal static NSObject ToNSObject(object? value) // The auto-generated Android binding marshals any IDictionary into a // java.util.HashMap via JavaDictionary.ToLocalJniHandle() at JNI call // time — changing this to Java.Util.HashMap causes double-marshaling bugs. - internal static IDictionary? ToJavaDictionary(IDictionary? src) + internal static IDictionary? ToJavaDictionary(IDictionary? src) { if (src is null) return null; @@ -83,21 +83,21 @@ internal static NSObject ToNSObject(object? value) return value switch { string s => new Java.Lang.String(s), - bool b => new Java.Lang.Boolean(b), - int i => new Java.Lang.Integer(i), - long l => new Java.Lang.Long(l), - double d => new Java.Lang.Double(d), - float f => new Java.Lang.Float(f), - decimal m => new Java.Lang.Double((double)m), + bool b => Java.Lang.Boolean.ValueOf(b), + int i => Java.Lang.Integer.ValueOf(i), + long l => Java.Lang.Long.ValueOf(l), + double d => Java.Lang.Double.ValueOf(d), + float f => Java.Lang.Float.ValueOf(f), + decimal m => Java.Lang.Double.ValueOf((double)m), IDictionary dict => ToJavaHashMap(dict), IEnumerable arr => ToJavaList(arr.Select(s => (Java.Lang.Object)new Java.Lang.String(s))), - IEnumerable arr => ToJavaList(arr.Select(b => (Java.Lang.Object)new Java.Lang.Boolean(b))), - IEnumerable arr => ToJavaList(arr.Select(i => (Java.Lang.Object)new Java.Lang.Integer(i))), - IEnumerable arr => ToJavaList(arr.Select(l => (Java.Lang.Object)new Java.Lang.Long(l))), - IEnumerable arr => ToJavaList(arr.Select(d => (Java.Lang.Object)new Java.Lang.Double(d))), - IEnumerable arr => ToJavaList(arr.Select(f => (Java.Lang.Object)new Java.Lang.Float(f))), + IEnumerable arr => ToJavaList(arr.Select(b => (Java.Lang.Object)Java.Lang.Boolean.ValueOf(b))), + IEnumerable arr => ToJavaList(arr.Select(i => (Java.Lang.Object)Java.Lang.Integer.ValueOf(i))), + IEnumerable arr => ToJavaList(arr.Select(l => (Java.Lang.Object)Java.Lang.Long.ValueOf(l))), + IEnumerable arr => ToJavaList(arr.Select(d => (Java.Lang.Object)Java.Lang.Double.ValueOf(d))), + IEnumerable arr => ToJavaList(arr.Select(f => (Java.Lang.Object)Java.Lang.Float.ValueOf(f))), _ => new Java.Lang.String(value.ToString() ?? string.Empty) }; diff --git a/sdk/@launchdarkly/mobile-dotnet/sample/MauiProgram.cs b/sdk/@launchdarkly/mobile-dotnet/sample/MauiProgram.cs index 60cd325da3..372d5451e3 100644 --- a/sdk/@launchdarkly/mobile-dotnet/sample/MauiProgram.cs +++ b/sdk/@launchdarkly/mobile-dotnet/sample/MauiProgram.cs @@ -98,7 +98,7 @@ public static MauiApp CreateMauiApp() #endif otlpEndpoint: otlpEndpoint, backendUrl: backendUrl, - attributes: new Dictionary { { "test-options-attribute", "maui-sample-value" } } + attributes: new Dictionary { { "test-options-attribute", "maui-sample-value" } } ))) .Add(new SessionReplayPlugin(new SessionReplayOptions( isEnabled: true, From 8bde69c679df5a2e66131b0bce946753d80ee291 Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Thu, 26 Mar 2026 18:48:54 -0700 Subject: [PATCH 3/8] dokka 2.1.0 --- .../observability-android/gradle.properties | 1 + .../lib/build.gradle.kts | 23 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/sdk/@launchdarkly/observability-android/gradle.properties b/sdk/@launchdarkly/observability-android/gradle.properties index 67c8186a8c..fcd96c89fb 100644 --- a/sdk/@launchdarkly/observability-android/gradle.properties +++ b/sdk/@launchdarkly/observability-android/gradle.properties @@ -2,6 +2,7 @@ # https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties android.useAndroidX=true +org.jetbrains.dokka.experimental.gradle.pluginMode=V2EnabledWithHelpers #x-release-please-start-version version=0.32.0 diff --git a/sdk/@launchdarkly/observability-android/lib/build.gradle.kts b/sdk/@launchdarkly/observability-android/lib/build.gradle.kts index 314e8ec4c9..04dac3bf86 100644 --- a/sdk/@launchdarkly/observability-android/lib/build.gradle.kts +++ b/sdk/@launchdarkly/observability-android/lib/build.gradle.kts @@ -9,7 +9,8 @@ plugins { alias(libs.plugins.kotlin.serialization) // Apply Dokka plugin for documentation generation - id("org.jetbrains.dokka") version "2.0.0" + id("org.jetbrains.dokka") version "2.1.0" + id("org.jetbrains.dokka-javadoc") version "2.1.0" } allprojects { @@ -106,8 +107,10 @@ android { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } - kotlinOptions { - jvmTarget = "1.8" + kotlin { + compilerOptions { + jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8) + } } publishing { @@ -177,15 +180,15 @@ signing { sign(publishing.publications["release"]) } -// Dokka configuration for Android library documentation -tasks.dokkaJavadoc.configure { +dokka { moduleName.set("launchdarkly-observability-android") moduleVersion.set(project.version.toString()) - outputDirectory.set(layout.projectDirectory.dir("docs")) - dokkaSourceSets { - configureEach { - includes.from("doc-module.md") - } + dokkaPublications.javadoc { + outputDirectory.set(layout.projectDirectory.dir("docs")) + } + + dokkaSourceSets.configureEach { + includes.from("doc-module.md") } } From 6331d16f9507bedd43ff3984c27d3d54b46428d4 Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Thu, 26 Mar 2026 19:05:38 -0700 Subject: [PATCH 4/8] gecko changes --- .../masking/ComposeWebActivity.kt | 84 ++++++------- .../src/main/res/layout/activity_webview.xml | 112 ++++++++++-------- 2 files changed, 103 insertions(+), 93 deletions(-) diff --git a/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt b/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt index efa1184e0e..432f9433ee 100644 --- a/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt +++ b/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt @@ -20,7 +20,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.key import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -48,42 +47,46 @@ class ComposeWebActivity : ComponentActivity() { val customWebView = remember(context) { CustomWebView(context) } val geckoView = remember(context) { GeckoView(context) } val customGeckoView = remember(context) { CustomGeckoView(context) } - Column( modifier = Modifier .fillMaxSize() .padding(innerPadding) - .verticalScroll(rememberScrollState()) ) { - Text( - text = "android.webkit.WebView", - fontSize = 16.sp, - modifier = Modifier - .background(Color.Yellow) - .align(Alignment.CenterHorizontally) - ) - WebViewItem( - url = "https://www.google.com", - webView = webView, + Column( modifier = Modifier - .fillMaxWidth() - .height(450.dp) - ) + .weight(1f) + .verticalScroll(rememberScrollState()) + ) { + Text( + text = "android.webkit.WebView", + fontSize = 16.sp, + modifier = Modifier + .background(Color.Yellow) + .align(Alignment.CenterHorizontally) + ) + WebViewItem( + url = "https://www.google.com", + webView = webView, + modifier = Modifier + .fillMaxWidth() + .height(450.dp) + ) - Text( - text = "CustomWebView", - fontSize = 16.sp, - modifier = Modifier - .background(Color.Yellow) - .align(Alignment.CenterHorizontally) - ) - WebViewItem( - url = "https://www.google.com", - webView = customWebView, - modifier = Modifier - .fillMaxWidth() - .height(450.dp) - ) + Text( + text = "CustomWebView", + fontSize = 16.sp, + modifier = Modifier + .background(Color.Yellow) + .align(Alignment.CenterHorizontally) + ) + WebViewItem( + url = "https://www.google.com", + webView = customWebView, + modifier = Modifier + .fillMaxWidth() + .height(450.dp) + ) + } Text( text = "org.mozilla.geckoview.GeckoView", @@ -98,7 +101,7 @@ class ComposeWebActivity : ComponentActivity() { geckoView = geckoView, modifier = Modifier .fillMaxWidth() - .height(450.dp) + .height(200.dp) ) Text( @@ -114,7 +117,7 @@ class ComposeWebActivity : ComponentActivity() { geckoView = customGeckoView, modifier = Modifier .fillMaxWidth() - .height(450.dp) + .height(200.dp) ) } } @@ -170,18 +173,17 @@ fun GeckoViewItem(url: String, geckoView: GeckoView, modifier: Modifier = Modifi } } - key(geckoView) { - AndroidView( - modifier = modifier, - factory = { _ -> - geckoView.apply { - setSession(session) - } + AndroidView( + modifier = modifier, + factory = { _ -> + geckoView.apply { + setSession(session) } - ) - } + } + ) LaunchedEffect(url) { session.loadUri(url) } } + diff --git a/e2e/android/app/src/main/res/layout/activity_webview.xml b/e2e/android/app/src/main/res/layout/activity_webview.xml index 4997b98044..38f43beb4b 100644 --- a/e2e/android/app/src/main/res/layout/activity_webview.xml +++ b/e2e/android/app/src/main/res/layout/activity_webview.xml @@ -1,67 +1,75 @@ - + android:layout_height="match_parent" + android:orientation="vertical"> - + android:layout_height="0dp" + android:layout_weight="1"> - + android:orientation="vertical"> - + - + - + - + - + + - + + + - + + + - - + From 2deb928d965b7db9770972a015b9e113bbabd736 Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Thu, 26 Mar 2026 19:19:56 -0700 Subject: [PATCH 5/8] lazy gecko browser --- .../masking/ComposeWebActivity.kt | 100 ++++++++++-------- .../masking/XMLWebActivity.kt | 58 ++++++++-- .../src/main/res/layout/activity_webview.xml | 20 ++-- 3 files changed, 113 insertions(+), 65 deletions(-) diff --git a/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt b/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt index 432f9433ee..82705cbc2e 100644 --- a/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt +++ b/e2e/android/app/src/compose/java/com/example/androidobservability/masking/ComposeWebActivity.kt @@ -8,6 +8,8 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -20,7 +22,10 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -45,8 +50,6 @@ class ComposeWebActivity : ComponentActivity() { val context = LocalContext.current val webView = remember(context) { WebView(context) } val customWebView = remember(context) { CustomWebView(context) } - val geckoView = remember(context) { GeckoView(context) } - val customGeckoView = remember(context) { CustomGeckoView(context) } Column( modifier = Modifier .fillMaxSize() @@ -88,33 +91,19 @@ class ComposeWebActivity : ComponentActivity() { ) } - Text( - text = "org.mozilla.geckoview.GeckoView", - fontSize = 16.sp, - modifier = Modifier - .align(Alignment.CenterHorizontally) - .background(Color.Yellow) - .padding(top = 8.dp) - ) - GeckoViewItem( + LazyGeckoViewItem( + label = "org.mozilla.geckoview.GeckoView (device)", url = "https://www.google.com", - geckoView = geckoView, + geckoViewFactory = { GeckoView(it) }, modifier = Modifier .fillMaxWidth() .height(200.dp) ) - Text( - text = "CustomGeckoView", - fontSize = 16.sp, - modifier = Modifier - .align(Alignment.CenterHorizontally) - .background(Color.Yellow) - .padding(top = 8.dp) - ) - GeckoViewItem( + LazyGeckoViewItem( + label = "CustomGeckoView (device)", url = "https://www.google.com", - geckoView = customGeckoView, + geckoViewFactory = { CustomGeckoView(it) }, modifier = Modifier .fillMaxWidth() .height(200.dp) @@ -155,35 +144,52 @@ fun WebViewItem(url: String, webView: WebView, modifier: Modifier = Modifier) { } @Composable -fun GeckoViewItem(url: String, geckoView: GeckoView, modifier: Modifier = Modifier) { - val context = LocalContext.current - val runtime = remember { - GeckoRuntime.getDefault(context.applicationContext) - } - val session = remember(runtime) { - GeckoSession().apply { - setContentDelegate(object : ContentDelegate {}) - open(runtime) - } - } +fun LazyGeckoViewItem( + label: String, + url: String, + geckoViewFactory: (android.content.Context) -> GeckoView, + modifier: Modifier = Modifier +) { + var loaded by remember { mutableStateOf(false) } - DisposableEffect(session) { - onDispose { - session.close() - } - } + Text( + text = if (loaded) label else "Tap to load $label", + fontSize = 16.sp, + modifier = Modifier + .background(Color.Yellow) + .padding(top = 8.dp) + .then(if (!loaded) Modifier.clickable { loaded = true } else Modifier) + ) - AndroidView( - modifier = modifier, - factory = { _ -> - geckoView.apply { - setSession(session) + if (loaded) { + val context = LocalContext.current + val geckoView = remember(context) { geckoViewFactory(context) } + val runtime = remember { GeckoRuntime.getDefault(context.applicationContext) } + val session = remember(runtime) { + GeckoSession().apply { + setContentDelegate(object : ContentDelegate {}) + open(runtime) } } - ) - LaunchedEffect(url) { - session.loadUri(url) + DisposableEffect(session) { + onDispose { session.close() } + } + + AndroidView( + modifier = modifier, + factory = { _ -> geckoView.apply { setSession(session) } } + ) + + LaunchedEffect(url) { session.loadUri(url) } + } else { + Box( + modifier = modifier + .background(Color.LightGray) + .clickable { loaded = true }, + contentAlignment = Alignment.Center + ) { + Text("Tap to load", color = Color.DarkGray) + } } } - diff --git a/e2e/android/app/src/main/java/com/example/androidobservability/masking/XMLWebActivity.kt b/e2e/android/app/src/main/java/com/example/androidobservability/masking/XMLWebActivity.kt index 5069f0386a..cdc0a9ddc8 100644 --- a/e2e/android/app/src/main/java/com/example/androidobservability/masking/XMLWebActivity.kt +++ b/e2e/android/app/src/main/java/com/example/androidobservability/masking/XMLWebActivity.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.os.Bundle import android.webkit.WebView import android.webkit.WebViewClient +import android.widget.FrameLayout +import android.widget.TextView import androidx.activity.ComponentActivity import androidx.annotation.IdRes import com.example.androidobservability.R @@ -22,8 +24,19 @@ class XMLWebActivity : ComponentActivity() { setupWebView(R.id.webview) setupWebView(R.id.customWebView) - setupGeckoWebView(R.id.geckoview) - setupGeckoWebView(R.id.customGeckoView) + + setupLazyGeckoView( + labelId = R.id.geckoLabel, + containerId = R.id.geckoContainer, + factory = { GeckoView(this) }, + label = "org.mozilla.geckoview.GeckoView (device)" + ) + setupLazyGeckoView( + labelId = R.id.customGeckoLabel, + containerId = R.id.customGeckoContainer, + factory = { CustomGeckoView(this) }, + label = "CustomGeckoView (device)" + ) } @SuppressLint("SetJavaScriptEnabled") @@ -34,16 +47,41 @@ class XMLWebActivity : ComponentActivity() { webView.loadUrl(url) } - private fun setupGeckoWebView(@IdRes geckoViewId: Int) { - val view = findViewById(geckoViewId) - val session = GeckoSession() + private fun setupLazyGeckoView( + @IdRes labelId: Int, + @IdRes containerId: Int, + factory: () -> GeckoView, + label: String + ) { + val labelView = findViewById(labelId) + val container = findViewById(containerId) - session.setContentDelegate(object : ContentDelegate {}) + labelView.setOnClickListener { loadGeckoView(container, factory(), label, labelView) } + container.setOnClickListener { loadGeckoView(container, factory(), label, labelView) } + } - GeckoRuntime.getDefault(application).let { - session.open(it) - } - view?.setSession(session) + private fun loadGeckoView( + container: FrameLayout, + geckoView: GeckoView, + label: String, + labelView: TextView + ) { + container.setOnClickListener(null) + labelView.setOnClickListener(null) + labelView.text = label + + val session = GeckoSession() + session.setContentDelegate(object : ContentDelegate {}) + GeckoRuntime.getDefault(application).let { session.open(it) } + geckoView.setSession(session) session.loadUri(url) + + container.addView( + geckoView, + FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT + ) + ) } } diff --git a/e2e/android/app/src/main/res/layout/activity_webview.xml b/e2e/android/app/src/main/res/layout/activity_webview.xml index 38f43beb4b..21dd48fd1a 100644 --- a/e2e/android/app/src/main/res/layout/activity_webview.xml +++ b/e2e/android/app/src/main/res/layout/activity_webview.xml @@ -45,30 +45,34 @@ - - From 675457941dcc666e358485cf66a789626667fa79 Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Thu, 26 Mar 2026 19:25:19 -0700 Subject: [PATCH 6/8] suppress warning e2e app --- e2e/android/app/src/main/AndroidManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/e2e/android/app/src/main/AndroidManifest.xml b/e2e/android/app/src/main/AndroidManifest.xml index cec3ae2c59..87d34f6b77 100644 --- a/e2e/android/app/src/main/AndroidManifest.xml +++ b/e2e/android/app/src/main/AndroidManifest.xml @@ -15,6 +15,7 @@ android:supportsRtl="true" android:theme="@style/Theme.AndroidObservability" android:usesCleartextTraffic="true" + android:extractNativeLibs="true" tools:targetApi="31" > Date: Thu, 26 Mar 2026 19:26:36 -0700 Subject: [PATCH 7/8] adjust C library --- .../observability-android/lib/src/main/cpp/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdk/@launchdarkly/observability-android/lib/src/main/cpp/CMakeLists.txt b/sdk/@launchdarkly/observability-android/lib/src/main/cpp/CMakeLists.txt index 89bc22cbd4..9832b63c9f 100644 --- a/sdk/@launchdarkly/observability-android/lib/src/main/cpp/CMakeLists.txt +++ b/sdk/@launchdarkly/observability-android/lib/src/main/cpp/CMakeLists.txt @@ -7,7 +7,8 @@ add_library(tile_hash SHARED tile_hash_jni.c ) -target_compile_options(tile_hash PRIVATE -O2) +target_compile_options(tile_hash PRIVATE -O3) +target_link_options(tile_hash PRIVATE -Wl,-z,max-page-size=16384) find_library(jnigraphics-lib jnigraphics) From 210e71dc73cc5857c2ff98ab1e1243bc62665fb0 Mon Sep 17 00:00:00 2001 From: Andrey Belonogov Date: Thu, 26 Mar 2026 21:03:17 -0700 Subject: [PATCH 8/8] exclude doc from LD SDK (cherry picked from commit 23cf8efd2b1a6791b1d1b728721677c8de6b37f5) --- .../mobile-dotnet/observability/LDObservability.Fat.csproj | 2 +- .../mobile-dotnet/observability/LDObservability.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.Fat.csproj b/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.Fat.csproj index efb601b03b..3f80489dd6 100644 --- a/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.Fat.csproj +++ b/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.Fat.csproj @@ -20,7 +20,7 @@ - + diff --git a/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.csproj b/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.csproj index 428bafb56f..bd8aeb5a16 100644 --- a/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.csproj +++ b/sdk/@launchdarkly/mobile-dotnet/observability/LDObservability.csproj @@ -59,7 +59,7 @@ - +