---
source_url: https://www.pubnub.com/docs/sdks/kotlin/faq
title: FAQ for Kotlin SDK
updated_at: 2026-06-02T11:34:10.555Z
sdk_name: PubNub Kotlin SDK
sdk_version: 13.4.0
---

> Documentation Index
> For a curated overview of PubNub documentation, see: https://www.pubnub.com/docs/llms.txt
> For the full list of all documentation pages, see: https://www.pubnub.com/docs/llms-full.txt


# FAQ for Kotlin SDK

PubNub Kotlin SDK, use the latest version: 13.4.0

Install:

```bash
Add PubNub dependency to your build@13.4.0
```

## Why are there two subscribe methods?

The Kotlin SDK supports a modern, entity-based flow and retains a legacy `subscribe()` for backward compatibility.

Use the modern flow documented in [Subscribe](https://www.pubnub.com/docs/sdks/kotlin/api-reference/publish-and-subscribe#subscribe). It creates a `Subscription` or a `SubscriptionSet`, uses an event listener, and can resume from a timetoken with `SubscriptionCursor`. The legacy builder `pubnub.subscribe(...)` is documented in [Subscribe (old)](https://www.pubnub.com/docs/sdks/kotlin/api-reference/publish-and-subscribe#subscribe-old) and remains for existing applications.

## Why does my Android release build crash on startup but my debug build works fine?

Release builds enable ProGuard or R8 code shrinking by default, which debug builds typically skip. The PubNub Kotlin SDK has a transitive dependency on `org.json` — a library that is also bundled with the Android framework. When R8/ProGuard shrinks your APK, it renames `org.json` methods (for example, `nextValue()` → `e()`), but at runtime Android loads its own original version from the framework, causing a `NoSuchMethodError` crash.

The fix is to add a `-keepnames` rule for `org.json` in your ProGuard configuration. See [Android crashes with org.json classes](https://www.pubnub.com/docs/sdks/kotlin/troubleshoot#android-crashes-with-orgjson-classes) for the full details and rule.

## Why does encryption use AES-128 when cryptoModule is configured?

If a call supplies a `cipherKey` (for `encrypt`/`decrypt` or stream helpers), that argument overrides the configured `cryptoModule` for that operation and uses legacy Advanced Encryption Standard (AES) with 128-bit keys. Remove the `cipherKey` argument to use the `cryptoModule` configuration (AES‑256‑CBC), or configure a separate `cryptoModule` instance for partial encryption scenarios.

For details, refer to [CryptoModule configuration](https://www.pubnub.com/docs/sdks/kotlin/api-reference/configuration#cryptomodule).

## Terms in this document

* **Entity** - A subscribable object within a PubNub SDK that allows you to perform context-specific operations.
* **Listener** - A function or objectthat reacts to events or messages, like new chat messages or connection updates, letting your app respond in real-time.
* **Timetoken** - A unique identifier for each message that represents the number of 100-nanosecond intervals since January 1, 1970, for example, 16200000000000000.