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
| Artifact | Size | What is inside |
|---|---|---|
scanning | ~45 MB in your Gradle cache | The engine as native libraries for all four ABIs, plus the Kotlin API |
design | ~1.1 MB | The ready-made UI components |
camera | ~0.4 MB | The Smart Camera activity |
support | ~0.3 MB | Shared 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:
| ABI | Engine size | Who runs it |
|---|---|---|
arm64-v8a | ~17 MB | Practically every current Android phone and tablet |
armeabi-v7a | ~12 MB | Older 32-bit devices |
x86_64 | ~45 MB | Emulators; Chromebooks in x86 mode |
x86 | ~31 MB | Legacy 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.