This HTML page is not optimized for LLM or AI agent consumption. Fetch the Markdown version instead: /guides/android/releases/11-5.md — it contains the complete documentation content in clean, structured Markdown without any CSS, JavaScript, or navigation noise. Nutrient Android SDK 11.5 release notes

Nutrient Android SDK 11.5 release notes

RSS

19 May 2026

Nutrient Android SDK 11.5 is a maintenance release focused on stability and polish across annotation interaction, signing, and progressive rendering. It restores the PdfThumbnailBar.setOnScrollListener and PdfThumbnailBar.setOuterMargin customization hooks that were removed in 11.1.0, removes the ReLinker integration in favor of direct System.loadLibrary calls, and raises the default maximum zoom level from 20x to 40x.

There are no source-breaking API changes in this release. Refer to the migration guide below for notes on the ReLinker dependency change and the new default maximum zoom.

This release contains several additional fixes and enhancements. For the full list of changes, refer to our changelog.

Restored thumbnail bar customization

The PdfThumbnailBar.setOnScrollListener and PdfThumbnailBar.setOuterMargin hooks removed in 11.1.0 are back. Apps that customized scroll behavior or outer margins on the scrollable thumbnail bar can call these APIs again without keeping older SDK versions pinned.

ReLinker removal

The SDK no longer depends on the com.getkeepsafe.relinker:relinker library. Native library loading now uses System.loadLibrary directly, which is reliable across the supported minSdk 23+ range. Apps no longer receive ReLinker as a transitive dependency through Nutrient.

Higher default maximum zoom

The default maximum zoom for documents has been raised from 20x to 40x, alongside a fix for blank pages that could appear at very high zoom levels. Users can now zoom further into detailed pages — for example, technical drawings or floor plans — without rendering glitches.

Bug fixes

This release addresses issues in both the user interface and underlying model layer.

UI

  • Improved hit detection for line, polyline, polygon, ink, square, and circle annotations so that taps clearly outside an annotation no longer select it.
  • Fixed an IllegalStateException crash that could occur after signing a form field and scrolling, triggered by the orientation unlock when the signature picker dialog closes.
  • Fixed a rare rendering issue where, in a narrow timing window after opening a document, selecting an annotation could leave a duplicate copy of it visible on the page until the next scroll or zoom.
  • Fixed a regression where switching from another annotation tool to the signature tool without using the previous tool first would leave the previous tool’s per-page handlers active, so taps after the signature dialog closed kept creating the previous tool’s annotations.
  • Fixed selection handles collapsing to the top-left corner for stamp and free text annotations with a missing or empty stored content size; the content size is now inferred from the bounding box instead.
  • Fixed the measurement scale FAB picker so that changing the scale while a measurement annotation is selected updates that annotation, matching the behavior of the inline annotation inspector. Previously the FAB picker only updated the global default used for newly created annotations.
  • Fixed a regression where the scale calibration inspector did not appear after drawing a calibration line, requiring the user to deselect the tool before the calibration UI was shown.
  • Fixed the redaction action button and annotation note hint icons not updating after a document was reloaded in place (for example, after saving content-editing changes); creating or deleting annotations on the reloaded document now updates the button and note icons as expected.
  • Fixed a recycled-bitmap crash that could occur when navigating between cached pages during progressive rendering.
  • Fixed a rare rendering crash during rapid document transitions.
  • Fixed blank page rendering at high zoom levels and raised the default maximum zoom from 20x to 40x.

Model

  • Improved bitmap pool reuse efficiency for externally-managed bitmaps.
  • Fixed a crash when validating CAdES-detached signatures if the OCSP responder certificate chain cannot be trusted.
  • Fixed a rare crash during progressive page rendering when an image load is resumed without a valid in-flight entry.
  • Fixed a rare crash when tapping or selecting text on PDF pages that contain non-text glyphs.
  • Fixed a rare StaleDataException crash when reading the title or size of a document opened from a content URI whose provider returns an empty cursor.
  • Fixed a sporadic IllegalStateException: Annotation is not valid JSON. from AnnotationProvider.createAnnotationFromInstantJson() when invoked concurrently on the same page.
  • Fixed plain text free text annotations containing emoji rendering clipped emoji.
  • Fixed an issue where removing a note from a markup annotation could be undone after exporting and reimporting XFDF.
  • Fixed an issue where reordering pages in some PDFs could fail to save because of page labels.
  • Fixed measurement snapping on PDF pages with a CropBox offset from the MediaBox.

Migration guide {#migration-guide}

This release has no source-breaking API changes. The notes below cover a dependency change and a behavioral change that may affect your app.

ReLinker dependency removed

The com.getkeepsafe.relinker:relinker transitive dependency has been removed. If your app uses ReLinker directly — for example, to load your own native libraries — declare it explicitly in your build.gradle:

dependencies {
implementation("com.getkeepsafe.relinker:relinker:1.4.5")
}

If your app does not use ReLinker directly, no action is required.

Default maximum zoom raised to 40x

The default maximum zoom is now 40x (previously 20x). If you rely on the previous 20x ceiling — for example, to constrain rendering memory or to keep zoom in sync with another view — set the maximum explicitly:

val configuration = PdfActivityConfiguration.Builder(context)
.maxZoomScale(20f)
.build()