Skip to content
The mobile SDKs are available on request. Email support@grona.ai to get access.

Android SDK changelog

This page lists releases of the Grona Android SDK, newest first. Check it before you change the SDK version in your app.

The first version of the Grona Android SDK. Your app places slots once and ships one release. After that, Grona configuration decides what fills each slot, for whom, and against which control group. The SDK is written in Kotlin for Android Views, and its only dependencies are the Kotlin standard library and coroutines. Errors end in an empty slot, never a crash or a blocked order.

Requires Android 7.0 (API 24) or later. See Install the Android SDK.

New Placements and native components

Add GronaSlotView to the fixed set of named placements, on screens such as home, listing, product, cart, checkout and order confirmation. The SDK renders banner, progress, offer and message components inside the slot, styled through GronaTheme, and an empty slot stays laid out at zero height. See Render components.

New Host-rendered decisions

Product decisions (rail, bundle, substitute and product card) reach your app through Grona.decision(anchor, placement, screen, listener), and your app renders them with its own product cells, prices and stock. Your GronaHost supplies product facts and handles add, replace and typed navigation, always on the main thread. See Host-rendered decisions.

New Signed remote configuration with rollback protection

Each workspace has one ES256-signed configuration with a version, an expiry and a minimum SDK version. A bundled copy applies at launch, and the SDK refreshes the remote copy at cold start and in the foreground, at most every 5 minutes, rejecting bad signatures, older versions and expired configurations while it keeps the last good one. See Signed configuration.

New Kill switch and refresh

A disabled campaign or an expired configuration hides the campaign. Grona.refresh(listener) runs a refresh and reports when it completes.

New Consent states

Grona.setConsent takes UNKNOWN, GRANTED or DENIED, and the default is UNKNOWN, which keeps events in memory only and sends nothing. GRANTED persists and sends events, and DENIED deletes the event queue and any preview pins. See Consent.

New Events and assignment

eligible and anchor_visible fire the same way for every arm, exposure fires when half the content has been visible for one second and is for diagnostics, and commerce events cover views, cart changes, checkout and purchase with minimised payloads. Bucketing is deterministic per install or per customer, with separate draws for holdout and variant. See Track events.

New Server-signed grants for offers

An offer that carries a treatment, such as a discount, renders only with a Grona-signed grant for that customer. Grona.activeTreatments() hands the grant token to your order backend, which verifies it, and without a valid token the order proceeds without the treatment. See Offers and grants.

New Preview links

Grona.handleLink(uri) accepts preview links, each carrying a one-time pairing code that the SDK exchanges for a signed pin bound to that install, so a tester sees one variant on their own device without changing anyone else’s experience. Previewed events are flagged and excluded from analysis. See Preview links.

New Debug view

The separate grona-debug artifact, added with debugImplementation for debug builds only, shows the configuration, slots, campaigns, arms, events and local preview pins. Grona.openDebugView(context) opens it, and the screen blocks screenshots and is not exported. See Test and debug.