Application Size and Packaging Pixelnetica™ Document Scanning SDK for Android

The SDK’s processing engine is native code, compiled separately for each processor architecture — that is where its size comes from, and it is the first thing to know when planning your application’s download size. The numbers below are measured from the release artifacts, so you can budget before integrating rather than discover the size in your first build.

What the Modules Weigh

ArtifactSizeWhat is inside
scanning~45 MB in your Gradle cacheThe engine as native libraries for all four ABIs, plus the Kotlin API
design~1.1 MBThe ready-made UI components
camera~0.4 MBThe Smart Camera activity
support~0.3 MBShared utilities (arrives transitively)

The scanning artifact’s bulk never reaches a user in full: a device needs the engine for its own architecture only. Per architecture, the engine (libscanning.so) weighs:

ABIEngine sizeWho runs it
arm64-v8a~17 MBPractically every current Android phone and tablet
armeabi-v7a~12 MBOlder 32-bit devices
x86_64~45 MBEmulators; Chromebooks in x86 mode
x86~31 MBLegacy 32-bit emulator images

The x86 builds compile larger than the ARM ones — that is a property of the compiled engine, not packaging overhead, and all four libraries ship stripped. In practice the number that reaches your users is the arm64 one.

Keep the Download Small

Publish an App Bundle. With the .aab format, Google Play delivers each device only its own ABI’s library — your users download the ~17 MB arm64 engine, not all four. This needs no configuration; it is how App Bundles behave.

Or split APKs by ABI. If you distribute APKs directly, let Gradle build one per architecture:

android {
  splits {
    abi {
      isEnable = true
      reset()
      include("arm64-v8a", "armeabi-v7a")
      isUniversalApk = false
    }
  }
}

Trim ABIs you do not ship. A release build has no reason to carry emulator architectures:

android {
  defaultConfig {
    ndk {
      abiFilters += listOf("arm64-v8a", "armeabi-v7a")
    }
  }
}

Keep x86_64 in debug builds if your team develops on emulators older than the arm64 images.

What the Optional Assets Add

Text recognition needs language data, and its size is per language — you choose what to bundle or download (see Setup OCR Languages):

  • A typical language file is in the 1–4 MB range: German is about 1.5 MB, Simplified Chinese about 2.5 MB, English about 4 MB.
  • The document orientation detector’s data (osd.pxl) is about 11 MB. Bundle it if you use orientation detection; skip it if you do not.
  • Searchable-PDF export needs TrueType fonts covering your languages, which the SDK does not provide; the demo’s Noto fonts are a few MB per script.

Applications that support many languages usually bundle one or two and let users download the rest — the language manager implements exactly that flow.

Shrinking and ProGuard

The SDK ships its own consumer ProGuard rules inside each artifact, so R8 and minification work without any -keep rules on your side. The rules travel with the library; you do not copy anything into your configuration.

Top