November 27, 2023: V5.0.13 Changing core dependency to Java 1.8
-
rox-java-core
dependency now built with Java 1.8.
September 29, 2022: V5.0.8 Loading local storage and embedded configurations synchronously
-
Rox.Setup
is now aware of new configurations fetched from network. Local storage configurations and embedded configurations are now loaded synchronously before the network call withinSetup
. Now the later one is used, guaranteeing that by the time the code after setup runs, flags are using the latest local configurations. Before this update, local configurations were loaded asynchronously.Refer to Flag update flow for more information.
January 21, 2022: V5.0.6 Shadowed network library update
-
Updated the version of OkHttp to 3.12.13 to solve an Android 11 compatibility issue.
2021-08-19: V5.0.5
-
Added a proxy that supports servers or clients using CloudBees Feature Management SDKs with the following connection issues:
-
No internet access
-
Trouble connecting to CloudBees Feature Management services
-
Blocked by a firewall
-
Client does not have CORS permissions
-
Needing full control over network requests
Refer to A proxy for CloudBees Feature Management for more information.
-
2021-07-19: V5.0.4
-
Fixed push notification bug
-
Adding EU hosting support
2021-04-01: V5.0.1
-
Few internal bug fixes.
2021-03-28: V5.0.0
Breaking changes:
-
RoxVariant
changed toRoxString
-
new RoxVariant("defaultStr", new String[] {"str1", "str2"})
⇒new RoxString("defaultStr", new String[] {"str1", "str2"})
.
-
-
RoxEnumVariant
renamed toRoxEnum
.-
new RoxEnumVariant<>(MyEnumType.Value)
⇒new RoxEnum<>(MyEnumType.Value)
.
-
-
Functions input validations
-
Some trivial parameters (mostly type) validations were added to
dynamicApi
and flags constructions. For example:new RoxString(null)
will raise anIllegalArgumentException
as default cannot be null (default value ofRoxString
should be a string).Rox.dynamicApi.value(null, "defaultStr", ["str2", "str3"])
will raise anIllegalArgumentException
because of null flag name (name should always be a string).
-
Fixes and Additions:
-
Can use register without a namespace:
-
register(container)
will register the container under an empty string namespace (multiple register calls with the same namespaces are still not allowed!).
-
-
Added a User Space Error handling
-
It is recommended to wrap all handlers used in Rox platform (all
CustomPropertyGenerator.generateProperty
,ImpressionHandler.onImpression
,ConfigurationFetchedHandler.onConfigurationFetched
,DynamicPropertyRule.invoke
) with try-catch in order to be in the right context. In case there will be an uncaught error, it will reach theRox.setUserspaceUnhandledErrorHandler
handler. You can use this handler for debugging, or for further error handling. AThrowable
thrown within this handler will be written to log. If nosetUserspaceUnhandledErrorHandler
was set, errors will be written to the log.
-
-
Analytics / impressions
-
Starting with SDK 5, flags will always send impressions after setup (not only when targeting is enabled on the dashboard).
-
-
Impression handler parameters change
-
As experiments were removed, impressions handler signature was changed from (
reportingValue
,experiment
,context
) to (ImpressionEvent event
). Besidesname
,value
, andcontext
properties,event
also providestargeting
(boolean) property, indicating the flag was evaluated by using the dashboard configurations.
-
-
New Flag Types Int/Double
-
In addition to
RoxFlag
andRoxString
, we also addedRoxInt
andRoxDouble
-
DynamicApi
was also updated with matchinggetInt
andgetDouble
methods.
-
-
Added a graceful
Rox.shutdown
-
In order to clean all background tasks.
-
multiple
Rox.setup
calls will be ignored if Rox wasn’t shutdown in between.
-
-
Added
RoxOptions.Builder.withDynamicPropertyRule
-
Default Freeze level was changed to 'none'
-
In order to maintain the old behavior please add to your setup options
RoxOptions.Builder.withFreeze(Freeze.UntilLaunch)
. If there’s no options object currently, add it to your setup call:Rox.setup(app, new RoxOptions.Builder().withFreeze(Freeze.UntilLaunch).build())
-
-
Remote configurations were eliminated, please use flags instead:
-
new RoxConfigurationString ⇒ new RoxString
-
new RoxConfigurationInt ⇒ new RoxInt
-
new RoxConfigurationDouble ⇒ new RoxDouble
-
new RoxConfigurationBool ⇒ new RoxFlag
-
-
Both static and dynamic APIs now support
context
parameter.-
Custom properties can now use
context
too via the overloadedRox.setCustomXXXProperty
methods acceptingCustomPropertyGeneratorWithContext<>
argument.
-
2020-04-30: V4.9.1
-
Self-managed support added
2019-09-16: V4.8.0
-
API version 1.8.0
-
Values are base64 - fixing " and () bug
-
Changes to API calls, using Cloudfront
2019-06-12: V4.6.4
-
Removed the need for proguard
-
Fixed concat bug
2019-03-21: V4.6.1
-
Rox.setup accepts rollout key as a parameter (overriding the manifest one)
2019-01-17: V4.6.0
-
Non-public fields are also registered inside the container (for Scala compatibility)
-
Rox.reset() function was added (See documentation for details)
2018-11-28: V4.3.0
-
Added push updates support
2018-11-08: V4.2.0
-
Added a search bar to the flags view
2018-08-20: V4.1.0
-
Encrypted in operator - you can now use in operator and the data will be passed to the clients encrypted
-
API version 1.7.0
2018-07-22: V4.0.0 - Impression analytics
-
Adding overrides API
-
Android/Fire TV support for flags view
-
Allow users to overrides
rox
. custom properties -
Impression visibility
2018-05-09: V3.0.0 - Flag Dependencies
-
flag dependency support
-
add isArchive to flag impression handler
-
fixed org.json build warnings
-
fixed unsafeUrl lint warning
-
fixed error in failed debug log messages
2018-02-21: V2.0.2
-
Allow setting custom platform via
withPlatform
toRoxOptions.Builder
2018-02-21: V1.2.6
-
Allow setting custom platform via
withPlatform
toRoxOptions.Builder
2018-02-15: V2.0.1
-
Fixed critical bug - crash on API 23 and lower
2018-01-03: V2.0.0
-
Added impression Handler on
RoxOptions
- allowing to hook custom action (e.g. analytic reporting) when a flag value is evaluated -
Added
withSyncCompletionHandler
onRoxOptions
- get an update once configuration is processes on the device -
Flag freeze level - allow specifying the freezing level of a flag, till this version the flag value remained consistent from the time it was evaluated till the application goes into the foreground or a
unfreeze
was called. Now have three different freeze level:-
.none
- The flag is constantly evaluated every time it is called -
.untilForeground
(default) - Once the flag is evaluated its value is persistent until the next foreground/ unfreeze event -
.untilLaunch
- Once the flag is evaluated its value is persistent till the app is terminated You can control the value of a specific flag via its constructor or globally by usingRoxOptions.withFreeze
method
-
-
Namespace is moved to register - instead of registering the container and placing the namespace inside the container object we move the container to the register function
-
Embedded configuration - uses a gradle plugin to pull the experiment configuration on build time, the experiment configuration is packed inside the APK and released as part of the app. This allows zero time experiment correctness (without waiting for the network)
2017-10-26: V1.1.6
-
Fix - flags view with many flags issues
-
Removed sync function
-
Just in time flags evaluation
-
Added Rox Logger for Android platform
-
Added unfreeze when activating reset all
-
Dynamic API Improvements
-
Supply a custom Logger
-
Migrate usage from HashMap to ConcurrentHash
-
Removed Optional which is not supported in old android versions
2017-09-28: V1.1.3
-
Removed os_name from android device properties
-
Introducing thread pools with names and configured amount of threads
-
Added support for server context
-
Poll fetch config and fetch
-
Adding dynamic API