Android Changelog

All notable changes to Heap Android libraries will be documented in this file. For steps to install Heap on Android, see the installation docs for the desired library:

The format is based on Keep a Changelog and this project adheres to
Semantic Versioning.

Android Core Changelog

[0.5.2] - 2024-03-21

Fixed

  • Fixed a bug introduced in 0.5.0 that prevented Mobile Library Version from being properly captured.
    • Customers should skip versions 0.5.0 and 0.5.1 in favor of 0.5.2 to prevent gaps in Mobile Library Version capture.

[0.5.1] - 2024-02-23

Fixed

  • Fixed a bug where switching between environment IDs could prevent events from being stored properly.
  • Fixed a bug where native events would set the session expiration back to five minutes after a WebView event extended it to 30 minutes.

Added

  • Added support for tracking pageviews across a JavaScript bridge.
  • Added support for tracking interactions across a JavaScript bridge.

[0.5.0] - 2024-01-08

Added

  • Added an option to capture vendor ID from Google App Set ID.
  • Added an option to configure the number of messages sent in each upload batch.
  • Added an option to configure whether event properties should be cleared when the current user changes.
  • Added new artifacts to enable non-core functionality.
    • io.heap.core.identifier:ad-id-google
    • io.heap.core.identifier:ad-id-amazon
    • io.heap.core.identifier:vendor-id-google
    • io.heap.core.web:webview-heapjs

Changed

  • Android Core no longer includes dependencies for advertiser ID and WebView sessionization behaviors. If attempting to capture advertiser ID, you must add one of the above advertiser ID capture artifacts. You must also include the WebView artifact to enable WebView session sharing.
  • Updated the networking layer to continue sending events when receiving a 400 response code from Heap to allow data replay capabilities.
  • Event properties are no longer cleared when switching the active user. To retain the old behavior and clear event properties when changing users, set the clearEventPropertiesOnNewUser initialization option.

[0.4.0] - 2023-09-25

Added

  • Added an option to disable accessibility label capture.
  • Added a builder to Options to make setting options easier in Java apps.

Changed

  • Heap.addEventProperties no longer attaches properties to session messages.
  • Target text is now trimmed of leading and trailing whitespace.
  • Messages are now limited to 0.78 MB in size.

[0.3.0] - 2023-06-23

Added

  • Added support for AndroidX Fragment transition events.
  • Added support to track app version changes.

[0.2.0] - 2023-05-15

Fixed

  • Fixed a race condition that could prevent capture of the Android Advertiser ID property.

Changed

  • Changed the default behavior of Heap.startRecording to delay the start of a session until an event or pageview occurs. In order to override the default behavior and start a session immediately, initialize an Options instance with startSessionImmediately set to true and invoke Heap.startRecording with that Options instance. NOTE: If you are using the Heap Android View Autocapture SDK, you must also upgrade that dependency's version to 0.2.0.
  • Kotlin dependencies updated to version 1.8.x. Implementing apps will need to update their Kotlin plugin version to 1.8.0 or higher.

[0.1.1] - 2023-03-14

Changed

  • Event and user properties with empty string keys or values will no longer be persisted or sent to the server.

[0.1.0] - 2023-03-09

Added

  • Initial release of Heap Android Core SDK.

Android View Autocapture Changelog

[0.5.1] - 2024-02-26

Added

  • Added support for API changes made in Android Core 0.5.1.

[0.5.0] - 2024-01-10

Added

  • Added support for configuration options added in Android Core 0.5.0.

[0.4.0] - 2023-09-29

Added

  • Added support for option to disable accessibility label capture added in Android Core 0.4.0.

[0.3.0] - 2023-06-23

Added

  • Added support for AndroidX Fragment transition events. Requires Heap Android Core 0.3.0 or higher.

[0.2.0] - 2023-05-15

Changed

  • Updated the SDK to be compatible with the new session start behavior in Heap Android Core 0.2.0.

[0.1.0] - 2023-03-10

Added

  • Initial release of Heap Android View Autocapture SDK.

Classic Android Changelog

[1.10.6] - 2023-01-04

Fixed

  • Fixed a build failure for builds involving multiple inputs to AAB/APK packaging tasks.

[1.10.5] - 2022-09-15

Fixed

  • Fixed a bug where a programmatic call to toggle a compound or radio button would be captured as a user-initiated event.
  • Fixed a bug where BuildConfig class would sometimes not be found.

[1.10.4] - 2022-05-26

Fixed

  • Fixed a build failure on AGP 7.2 that occurred during Gradle project configuration (java.lang.IllegalStateException: Cannot query the value of property 'namespace' because configuration of project has not completed yet.)

[1.10.3] - 2022-04-28

Fixed

  • Fixed a crash that occurred during initialization if the context that was obtained in HeapContentProvider was not of type Application (java.lang.AssertionError: HeapAssert.fail() with throwable: java.lang.ClassCastException: {type} cannot be cast to android.app.Application)

[1.10.2] - 2022-03-31

Fixed

  • Fixed a build failure that occurred when building with dependencies that contained classes with case-insensitive naming collisions (e.g. com.example.myClass and com.example.MyClass)

[1.10.1] - 2022-02-16

Fixed

  • Fixed a build failure that occurred with dependencies built with Java 16 (java.lang.IllegalArgumentException: Unsupported class file major version 60)

[1.10.0] - 2022-01-31

Added

Added new Heap.getSessionId API method to retrieve session ID: sessionId (Android)

[1.9.4] - 2021-12-15

Fixed

  • Fixed an assertion error that would occur if a user interacted with a UI element in an app while the app was in the background.
  • Fixed a Bluetooth SecurityException that would occur in Android 12 in apps that did not have the BLUETOOTH_CONNECT permission.

[1.9.3] - 2021-08-30

Fixed

  • Fixed a NPE that would occur in the library if a FragmentActivity was created outside of the main app process.
  • Fixed a duplicate resource issue that would prevent apps from rebuilding without an intermediate clean step.
  • Fixed a bug that caused the Gradle plugin not to inject build config information into the app with AGP 7.

[1.9.2] - 2021-06-07

Fixed

  • Fixed an issue where the Gradle plugin would fail with AGP 4.2 due to an IllegalStateException ("The value for property 'resValues' cannot be changed any further.")

[1.9.1] - 2021-04-14

Fixed

  • Fixed an issue where the library would leak memory due to stale TabView and ItemView instances not being garbage-collected.
  • Fixed an issue where hierarchies provided by Heap's React Native SDK would be truncated on Android devices.

[1.9.0] - 2021-03-11

Added

  • Added API methods to disable and enable tracking for individual users. See Disable Tracking for more information.

Fixed

  • Fixed an issue where app builds would fail if duplicate protobuf file names existed in dependencies.

[1.8.3] - 2021-04-14

Fixed

  • Fixed an issue where the library would leak memory due to stale TabView and ItemView instances not being garbage-collected.

[1.8.2] - 2021-03-11

Fixed

  • Fixed an issue where app builds would fail if duplicate protobuf file names existed in dependencies.

[1.8.1] - 2020-12-07

Fixed

  • Fixed an issue where the library would bail if TabLayouts were rendered prior to Heap initialization

[1.8.0] - 2020-09-14

Added

  • Added property to track whether an event occurred while the app was in
    the foreground or background
  • Added target resource ID property to clicks on Androidx and Support
    Library menu items

Fixed

  • Fixed an issue where automatic item selection in Spinner UI elements
    would result in a click event
  • Fixed an issue where TLSv1.2 encryption was not being enabled for SSL
    connections on API levels below 21
  • Fixed an issue where library would bail on API levels below 21 when
    events were sent to the Event Visualizer

[1.7.2] - 2020-12-07

Fixed

  • Fixed an issue where the library would bail if TabLayouts were rendered prior to Heap initialization

[1.7.1] - 2020-07-22

Fixed

  • Heap correctly instruments events that are handled by Java 8 lambdas
  • Heap's Gradle plugin is now compatible with Android Gradle Plugin 4.0.0

[1.7.0] - 2020-05-10

Changed

  • It is now possible to initialize Heap at any point in the app's lifecycle, enabling selective initialization based on feature flags
  • Added Mobile Library Version session property.

[1.6.0] - 2020-03-20

Added

  • Heap now includes the Android ID (SSAID) and Android Advertiser ID as event and user properties
  • Target views for events and their ancestors now include bounding box data for better event definitions in the Android Event Visualizer

Fixed

  • Fixed an issue where a duplicate page view event was sent when coming back to the app after the session timeout
  • Fixed a potential null pointer exception in Heap's fragment lifecycle tracking
  • Fixed some incompatibilities with Android API levels 16-18
  • Fixed an issue where page view events would appear out of order in the Android Event Visualizer after a session refresh
  • Fixed an issue where events would be populated with stale page view information after a session refresh

[1.5.0] - 2020-02-05

Added

  • Added the capability to capture events without capturing the text content of views; this can be enabled by setting ext.heapDisableTextCapture to true on a build type or flavor in the Gradle config

[1.4.1] - 2020-01-29

Fixed

  • Fixed a bug where builds were failing on Windows due to the inability to modify a resource jar file

[1.4.0] - 2019-12-05

Added

  • Added logic to send ancestors of target views for better event definition in the Event Visualizer

Fixed

  • Added logic to deobfuscate obfuscated View and Fragment classes

[1.3.0] - 2019-11-14

Added

  • Heap Gradle plugin now supports building under Windows

Changed

  • Gradle plugin now works on JVM bytecode instead of DEX, replacing Redex and resolving a host of related build and capture issues
  • Shaded all dependencies of the Gradle plugin to fix various dependency issues
  • Implemented temporary workaround for using the redex instrumentor: set heapUseLegacyRedexInstrumentor = true in the ext block alongside heapEnabled

[1.2.0] - 2019-09-27

Added

  • Added getUserId and getIdentity methods to retrieve numeric user ID and
    identity respectively

Fixed

  • Fixed a runtime failure where Heap would immediately shut down upon initialization
    for obfuscated builds
  • Fixed a build-time failure for apps that contained Firebase or other dependencies that
    used protobuf-lite
  • Fixed a runtime crash that occurred on API levels older than 24

[1.1.1] - 2019-08-16

Changed

  • Heap client library now depends on protobuf-javalite 3.9.0; apps that depend on the full protobuf-java library can now build without duplicate class conflicts by excluding the dependency on protobuf-javalite

Fixed

  • Fixed build failure for AAB builds if there was no signing config
  • Fixed and issue where Heap plugin would fail for AAB builds if the bundle task depended on the package task
  • Fixed an issue where Heap never resumes sending events after a fragment-based app's process is terminated while it is backgrounded; this often happened on Samsung devices, as the Optimize feature of Device Care will terminate processes for all backgrounded apps.

[1.1.0] - 2019-06-29

Changed

  • Sessions now last for five minutes since the last interaction, instead of restarting whenever the app reenters the foreground

[1.0.1] - 2019-06-29

Fixed

  • Fixed an issue building an AAB when there are spaces in the path to jarsigner
  • Fixed an issue where building an AAB could hang for a long time on subsequent builds

[1.0.0] - 2019-06-13

Added

  • Android Event Visualizer to make defining events easier.
  • Autocapture app install and upgrade events.

Changed

  • When changing between activities, Heap now captures a single fragment transition event instead of one for each of the stopping and starting activities.

Fixed

  • Fix an issue where proguard throws a build error because it cannot find sun.misc.Unsafe class referenced by protobuf.
  • Fix an issue where gradle builds fail when Heap is disabled due to a missing manifest placeholder.
  • Fix an issue where null fragments would cause Heap to shut down.
  • Fix an issue where the Gradle plugin would throw a NullPointerException if there were any files() dependencies.
  • Fix an issue where the Gradle plugin could result in attempting to create a dex with over 64k method references.

[0.9.1] - 2019-03-25

Fixed

  • Fix issue where null fragments would cause apps to crash.

[0.9.0] - 2019-03-21

Added

  • Allow ignoring events from parts of the view hierarchy, both declaratively
    via XML view tags, and programmatically by calling Heap.ignore() on the
    view.
  • Capture page transition events for changes to the visible page in a
    ViewPager.
  • Heap now captures events for androidx equivalents of support library
    elements.

Changed

  • Heap is now enabled by the setting ext.heapEnabled instead of the the
    enabled key in the ext.heap map. Both locations are consulted for
    compatibility, but the ext.heap map location is deprecated.
  • The Heap Gradle plugin can now also be applied before the Android Gradle
    plugin if using Gradle >= 4.8.
  • The Heap Gradle plugin attempts to reduce configuration overhead by using
    the task configuration avoidance APIs when used with Android Gradle Plugin
    versions 3.3 and higher.

Deprecated

  • Enabling Heap via ext.heap = ["enabled": true] is deprecated and will be
    removed in a future version; use ext.heapEnabled instead.
  • Support for Android Gradle Plugin versions earlier than 3.0.0 is deprecated
    and will be removed in a future release.

Fixed

  • Fix an issue with EditText change events sometimes having incorrect
    timestamps, leading to dropped events.
  • Fix potential issue with tracking changes to set of visible fragments.

[0.8.3] - 2019-01-23

Added

  • Text changes in EditText fields are now captured if they have at least one
    TextWatcher added
  • The user identity can now be reset to an anonymous state with
    Heap.resetIdentity()
  • The Heap library now specifies a minimum SDK version of 14 to match our
    actual use of platform libraries

Changed

  • Request bodies are now compressed with gzip for size efficiency

Fixed

  • Heap no longer captures duplicate events for certain app architecture patterns

[0.8.2] - 2019-01-05

Added

  • Heap client library now specifies a target SDK version, which prevents the
    manifest merger from automatically adding the implicit system permissions
    READ_PHONE_STATE, READ_EXTERNAL_STORAGE, and WRITE_EXTERNAL_STORAGE to
    users' apps

[0.8.1] - 2018-12-17

Fixed

  • Heap plugin works for Android Gradle Plugin version 3.2.1.
  • Heap plugin instruments Android App Bundles (note: dynamic modules are not supported).

[0.8.0] - 2018-12-05

Added

  • Heap now autocaptures when fragments are added or removed from view, and
    includes visible fragments as an event property on all events

Changed

  • Heap plugin looks for the heap extension on flavors and default config as
    well as build types
  • The Gradle plugin will error out if used with Android Gradle Plugin 3.2.0 or
    higher. This is a temporary measure as we add compatibility for AGP 3.2+ and
    app bundles.

Removed

  • Heap no longer sends session and pageview events if the build plugin did not
    apply Heap properly, or if the app is running under instant run. This was
    confusing when troubleshooting, as seeing some events could make it look like
    Heap was installed properly when it was not.

Fixed

  • Fixed an issue with the included proguard rules that could result in a
    NoSuchMethodError at runtime

[0.7.5] - 2018-10-15

Added

  • Proguard rules are now bundled in the client library, removing the need to
    add them manually when integrating
  • Heap plugin now instruments clicks on ActionMenuViews
  • Heap plugin now instruments clicks on links in TextViews
  • Heap plugin checks the minSdkVersion before building to avoid confusing dex
    magic errors

Changed

  • Heap plugin logs a warning if the variant being built doesn't have Heap
    enabled
  • Heap Android artifacts are now available on jcenter

Fixed

  • Removed some blocking IO from the Heap.init() call path

[0.7.4] - 2018-09-06

Added

  • Heap plugin now instruments BottomNavigationView clicks

Changed

  • Custom events can now be sent from the background

[0.7.3] - 2018-08-27

Fixed

  • Heap library now shades its well-known protobuf types, preventing clashes
    with other libraries, eg Firebase Firestore and Firebase In-App Messaging.

[0.7.2] - 2018-08-17

Added

  • Heap plugin now instruments TabHost clicks.

Changed

  • Heap library now includes device form factor with event data.

[0.7.1] - 2018-07-17

Changed

  • Read the complete response body from the Heap endpoint, and close the
    response stream. This should reduce the number of 'socket not closed' warnings

Fixed

  • Heap.identify triggers as expected when called immediately after Heap.init.

[0.7.0] - 2018-05-11

Added

  • Include gradle tasks to print individual licenses used by library. For a list
    of tasks, run ./gradlew tasks and refer to the "Heap tasks" section.
  • Include this changelog in the released JAR files
  • Support Linux build environments

Fixed

  • Properly fail build if instrumentation fails
  • Fix an issue where dexes numbered above 99 were not included in the
    instrumented APK
  • Fix issue with 400 response codes from track endpoint

[0.6.0] - 2018-03-26

Changed

  • Heap plugin now immediately aborts with clear exception message on non-macOS
    platforms

Removed

  • Heap.setEnvId and Heap.setInterval methods

Fixed

  • Fix typo in Heap Build Log Warning message about enabling Heap (comma should
    have been a colon).
  • Fix bug that prevented apps from building in Android Studio 3 when Instant
    Run was enabled.

[0.5.2] - 2018-03-08

Fixed

  • Fix BuildConfig error that occurs in Gradle versions 4.1 and higher by
    removing resource value injection out of variant prebuild doFirst action block
    and into general afterEvaluate block of HeapPlugin.apply method
  • Fix add user properties
  • Fix socket resource StrictMode violation

[0.5.1] - 2018-03-01

Added

  • Debug information on BuildConfig error

[0.5.0] - 2018-02-13

Added

  • Capture Android toggle switches
  • Capture Android radio buttons

Fixed

  • Fix uncaught exceptions