From 3b2e4aba6ef3188212d8bc7fe0fbff811de1b0d3 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Thu, 28 May 2026 15:20:08 -0700 Subject: [PATCH 1/6] [release] update CHANGELOG for android-sdk v5.2.1 Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c424663..c74ee50d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Optimizely Android X SDK Changelog +## 5.2.1 +May 28, 2026 + +### Fixes + ## 5.2.0 May 8, 2026 From 153c40e9945c7a5aae98caa2e1ef67052ac0b602 Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Thu, 28 May 2026 15:20:37 -0700 Subject: [PATCH 2/6] [release] bump version to 5.2.1 Co-Authored-By: Claude Opus 4.6 --- README.md | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 78ee9b48..de01f853 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ repositories { } dependencies { - implementation 'com.optimizely.ab:android-sdk:5.2.0' + implementation 'com.optimizely.ab:android-sdk:5.2.1' } ``` diff --git a/build.gradle b/build.gradle index b8f8b720..dc15f2ee 100644 --- a/build.gradle +++ b/build.gradle @@ -97,7 +97,7 @@ ext { build_tools_version = "35.0.0" min_sdk_version = 21 target_sdk_version = 35 - java_core_ver = "4.4.0" + java_core_ver = "4.4.1" android_logger_ver = "1.3.6" jacksonversion= "2.11.2" annotations_ver = "1.2.0" From 9fc4dd85c6ba9e058c7a0ede86a7a736ac1b86ae Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Thu, 28 May 2026 15:21:45 -0700 Subject: [PATCH 3/6] [release] update CHANGELOG with java-core 4.4.1 upgrade Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c74ee50d..37abb91f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,9 @@ May 28, 2026 ### Fixes +- Upgrade dependency to [Java SDK 4.4.1](https://github.com/optimizely/java-sdk/releases/tag/v4.4.1) + - Block ODP identify event for single identifier + ## 5.2.0 May 8, 2026 From 70784fa2fc694d3e0bf2b5db28fba494f972a68f Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Fri, 29 May 2026 11:48:12 -0700 Subject: [PATCH 4/6] [release] update java-sdk dependency to 4.4.2 Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 37abb91f..bd8749d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ May 28, 2026 ### Fixes -- Upgrade dependency to [Java SDK 4.4.1](https://github.com/optimizely/java-sdk/releases/tag/v4.4.1) +- Upgrade dependency to [Java SDK 4.4.2](https://github.com/optimizely/java-sdk/releases/tag/v4.4.2) - Block ODP identify event for single identifier ## 5.2.0 diff --git a/build.gradle b/build.gradle index dc15f2ee..1ae067c8 100644 --- a/build.gradle +++ b/build.gradle @@ -97,7 +97,7 @@ ext { build_tools_version = "35.0.0" min_sdk_version = 21 target_sdk_version = 35 - java_core_ver = "4.4.1" + java_core_ver = "4.4.2" android_logger_ver = "1.3.6" jacksonversion= "2.11.2" annotations_ver = "1.2.0" From cf119cfe60e6b4395074494c294e947c94d3962a Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Fri, 29 May 2026 11:51:03 -0700 Subject: [PATCH 5/6] [release] update release date to May 29 Co-Authored-By: Claude Opus 4.6 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd8749d1..dd246f5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Optimizely Android X SDK Changelog ## 5.2.1 -May 28, 2026 +May 29, 2026 ### Fixes From 549966c0be997f40843c7dc83037415065caef7c Mon Sep 17 00:00:00 2001 From: Jae Kim Date: Fri, 29 May 2026 13:49:05 -0700 Subject: [PATCH 6/6] [release] fix ODP integration tests and increase Gradle heap - Fix identifyOdpEventSentWhenVuidUserContextCreated: vuid-only context sends only client_initialized (no identified event with single identifier) - Add identifyOdpEventNotSentWhenUserContextCreatedWithoutVuid test - Clarify comment on identifyOdpEventSentWhenUserContextCreated - Increase Gradle JVM heap from 1g to 4g to fix D8 dex merge OOM Co-Authored-By: Claude Opus 4.6 --- .../ab/android/sdk/ODPIntegrationTest.java | 40 ++++++++++++++----- gradle.properties | 2 +- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java index b9c37f3c..ab2f2ede 100644 --- a/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java +++ b/android-sdk/src/androidTest/java/com/optimizely/ab/android/sdk/ODPIntegrationTest.java @@ -118,7 +118,7 @@ public void identifyOdpEventSentWhenUserContextCreated() throws InterruptedExcep verify(odpApiManager, times(1)).sendEvents(eq("p-1"), eq("h-1/v3/events"), captor.capture()); String eventStr = captor.getValue(); - // 2 events (client_initialized, identified) will be batched in a single sendEvents() call. + // 2 events batched: client_initialized + identified (identified sent because there are 2 identifiers: vuid + fs_user_id). JsonArray jsonArray = JsonParser.parseString(eventStr).getAsJsonArray(); assertEquals(jsonArray.size(), 2); @@ -146,7 +146,7 @@ public void identifyOdpEventSentWhenUserContextCreated() throws InterruptedExcep } @Test - public void identifyOdpEventSentWhenVuidUserContextCreated() throws InterruptedException { + public void identifyOdpEventNotSentWhenVuidUserContextCreated() throws InterruptedException { optimizelyClient.createUserContext(); // empty userId. vuid will be used. Thread.sleep(2000); // wait for batch timeout (1sec) @@ -155,25 +155,43 @@ public void identifyOdpEventSentWhenVuidUserContextCreated() throws InterruptedE verify(odpApiManager, times(1)).sendEvents(eq("p-1"), eq("h-1/v3/events"), captor.capture()); String eventStr = captor.getValue(); - // 2 events (client_initialized, identified) will be batched in a single sendEvents() call. + // only 1 event (client_initialized) since vuid-only context does not send identified event. JsonArray jsonArray = JsonParser.parseString(eventStr).getAsJsonArray(); - assertEquals(jsonArray.size(), 2); + assertEquals(jsonArray.size(), 1); // "client_initialized" event (vuid only) JsonObject firstEvt = jsonArray.get(0).getAsJsonObject(); JsonObject firstIdentifiers = firstEvt.get("identifiers").getAsJsonObject(); - // "identified" event (vuid only) - JsonObject secondEvt = jsonArray.get(1).getAsJsonObject(); - JsonObject secondIdentifiers = secondEvt.get("identifiers").getAsJsonObject(); - assertEquals(firstEvt.get("action").getAsString(), "client_initialized"); assertEquals(firstIdentifiers.size(), 1); assertEquals(firstIdentifiers.get("vuid").getAsString(), testVuid); + } - assertEquals(secondEvt.get("action").getAsString(), "identified"); - assertEquals(secondIdentifiers.size(), 1); - assertEquals(secondIdentifiers.get("vuid").getAsString(), testVuid); + @Test + public void identifyOdpEventNotSentWhenUserContextCreatedWithoutVuid() throws Exception { + // build a separate manager without vuid + ODPApiManager noVuidOdpApiManager = mock(ODPApiManager.class); + when(noVuidOdpApiManager.sendEvents(anyString(), anyString(), anyString())).thenReturn(200); + + ODPEventManager noVuidEventManager = new ODPEventManager(noVuidOdpApiManager); + ODPSegmentManager noVuidSegmentManager = new ODPSegmentManager(noVuidOdpApiManager); + + OptimizelyManager noVuidManager = OptimizelyManager.builder() + .withSDKKey(testSdkKey) + .withODPEventManager(noVuidEventManager) + .withODPSegmentManager(noVuidSegmentManager) + .build(context); + + noVuidManager.initialize(context, odpDatafile); + OptimizelyClient noVuidClient = noVuidManager.getOptimizely(); + + noVuidClient.createUserContext(testUser); // userId only, no vuid + + Thread.sleep(2000); // wait for batch timeout (1sec) + + // no ODP events sent without vuid + verify(noVuidOdpApiManager, times(0)).sendEvents(anyString(), anyString(), anyString()); } @Test diff --git a/gradle.properties b/gradle.properties index 70250523..309fbe0b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,4 +4,4 @@ version = 0.0.0-SNAPSHOT android.enableJetifier=true android.useAndroidX=true -org.gradle.jvmargs=-Xmx1g +org.gradle.jvmargs=-Xmx4g