---
title: Knox Capture SDK 1.6.2 без лишних слов
description: Что даёт Knox Capture SDK, чем он отличается от приложения Knox Capture и как встроить сканирование в Android-приложение.
---

# Knox Capture SDK 1.6.2: когда он действительно нужен

SDK — это детали сканера для разработчика Android-приложения. Из них можно сделать собственный экран сканирования: разместить изображение с камеры рядом с карточкой товара, получить несколько кодов за один кадр, показать пользователю нужный код и сразу записать результат в нужную операцию.

Обычный Knox Capture — уже собранный сканер. Он считывает код и передаёт результат в другое приложение: как ввод с клавиатуры либо через Intent.

Самая простая граница выбора:

- нужно считать код в уже существующее поле — используйте готовый Knox Capture;
- нужно изменить само поведение и внешний вид сканера внутри разрабатываемого приложения — рассматривайте SDK;
- своего Android-приложения и разработчика нет — SDK использовать негде.

## Что было разобрано

Проверены два оригинальных архива Samsung:

- `knoxcapture-sdk-1.6.2.zip` — AAR версии 1.6.2;
- `kcapsdk_sampleapp.zip` — официальный Kotlin sample app с тем же AAR.

Архивы прошли `unzip -t`. В sample app есть примеры full screen, split screen, multi-scan, mini scanner, Fragment и экрана с настраиваемыми параметрами.

## Что SDK даёт

| Возможность | Что получает приложение |
|---|---|
| Своя камера внутри Activity или Fragment | `BarcodeScanPreviewView` размещается в обычном XML layout |
| Результат без имитации клавиатуры | callback `PreviewResultHandlingCallback` |
| Данные кода | строка, symbology, raw bytes, ID и положение кода в кадре |
| Данные кадра | разрешение, rotation и frame ID через `EnvironmentData` |
| Один или несколько кодов | список `barcodeResult.barcodes` |
| Ограничение типов | QR, Code 128 и другие symbology выбираются в `PreviewConfig` |
| Инвертированные коды | включаются отдельно для выбранной symbology |
| Своя зона сканирования | ширина и высота задаются в процентах кадра |
| Zoom и focus | задаются из приложения |
| UI поверх камеры | viewfinder, фонарик, смена камеры, logo, цветной overlay |
| Отбор результатов | `BarcodeFilter` оставляет только подходящие кандидаты |
| GS1 | parser возвращает форматированную строку и JSON |
| Mini Scanner | небольшое перемещаемое окно, floating button и hardware keys |
| Звук и вибрация | готовые `BeepFeedback` и `VibrationFeedback` |

Поддерживаемые типы из API 1.6.2: Aztec, Codabar, Code 128, Code 39, Code 93, DataBar 14/Limited/Expanded, Data Matrix, EAN-13, EAN-8, Interleaved 2 of 5, PDF417, QR, UPC-A и UPC-E.

## Что это означает на практике

### Обычная инвентаризация по одному коду

Сотрудник ставит курсор в поле «Штрихкод», нажимает кнопку сканирования и получает строку. Здесь достаточно готового Knox Capture. SDK ничего заметного пользователю не добавит.

### Приёмка коробки с несколькими кодами

В кадре видны код товара, серийный номер и код перевозчика. Приложение должно показать найденные рамки, взять только нужные типы кодов и разложить результаты по разным полям. Здесь SDK оправдан: приложение получает список кодов, их типы и положения в кадре.

### Комплектование заказа

На экране уже показаны заказ, фотография и ожидаемый товар. Камера должна занимать нижнюю часть этого же экрана. После чтения приложение само отмечает строку заказа и сразу предлагает следующий товар. Это задача для SDK.

### Проверка содержимого кода

Приложению нужны не только видимые символы, но также тип кода, исходные байты или разбор GS1 в отдельные поля. Готовый Capture частично решает такую передачу через Intent. SDK нужен, если данные должны обрабатываться прямо в собственном экране камеры до его закрытия.

### Чужая программа без возможности изменить её код

Есть готовая складская, кассовая или браузерная форма. Менять её нельзя. SDK туда встроить невозможно. Используйте готовый Knox Capture и передачу результата как клавиатурный ввод.

## Есть ли выигрыш в скорости и эффективности

### Скорость распознавания одного кода

Заявленного преимущества SDK перед готовым Knox Capture нет. SDK не следует покупать только в надежде, что тот же телефон начнёт быстрее читать один QR или Code 128. Отдельного сравнительного теста приложения и SDK в этом проекте не проводилось.

### Скорость всей рабочей операции

SDK может сократить число действий в специально разработанном процессе:

- несколько кодов забираются из одного кадра;
- результат сразу попадает в нужную строку документа;
- не требуется держать фокус в текстовом поле;
- неподходящий тип или значение можно отбросить до заполнения формы;
- камера остаётся на том же экране, где выполняется работа.

Это выигрыш процесса, а не обещание более быстрого декодера.

### Цена такого выигрыша

Потребуются изменение Android-приложения, лицензия SDK, собственный интерфейс, обработка разрешений и жизненного цикла камеры, тестирование на моделях телефонов и выпуск новых версий приложения. Для простого ввода одного кода эти работы лишние.

## Чего SDK не даёт

- Он не создаёт готовое складское приложение, форму, базу товаров или синхронизацию с сервером.
- Он не заменяет разработку интерфейса, обработку ошибок и жизненный цикл камеры.
- Он не выдаёт лицензию автоматически.
- Он не разворачивает приложение на парк телефонов и не заменяет EMM/UEM.
- Он не добавляет телефону autofocus, OIS или отдельную scan-кнопку.
- Он не гарантирует чтение любого затёртого или перекрытого кода.
- Он не нужен только ради вставки строки в `EditText`.

## Готовое приложение или SDK

| Задача | Что выбрать |
|---|---|
| Вставить код в существующее поле | готовый Knox Capture, keyboard wedge |
| Запускать стандартный сканер своей кнопкой | готовый Knox Capture, soft trigger |
| Получать тип и raw data без собственного preview | готовый Knox Capture, intent output |
| Камера должна быть частью вашего экрана | SDK |
| Показывать сразу несколько найденных кодов | SDK |
| Рисовать разные рамки и фильтровать кандидатов до выдачи результата | SDK |
| Собрать полностью свой интерфейс сканера | SDK |

## Требования из локального sample app

- `minSdkVersion 31` — Android 12 и выше в данном примере;
- `compileSdk 34`, `targetSdk 34` в sample app;
- разрешение `android.permission.CAMERA` и обязательный camera feature;
- AAR подключается локально из `app/libs/`;
- CameraX `1.4.1`: camera2, core, lifecycle, view и extensions;
- лицензия проверяется до открытия экранов сканирования;
- `startPreview()` и `startBarcodeAnalyzing()` запускают работу;
- `stopBarcodeAnalyzing()` и `finishPreview()` вызываются при уходе Activity в pause.

Сам `knoxcapture-sdk-1.6.2.aar` занимает около 15 МБ в архиве. В нём есть нативные библиотеки только для `arm64-v8a`: декодер, OpenCV, TensorFlow Lite и C++ runtime. Итоговый размер APK/AAB нужно измерять после собственной сборки.

## Подключение AAR

Положите файл в `app/libs/knoxcapture-sdk-1.6.2.aar`:

```groovy
dependencies {
    implementation fileTree(dir: "libs", include: ["*.aar"])

    def camerax_version = "1.4.1"
    implementation "androidx.camera:camera-camera2:$camerax_version"
    implementation "androidx.camera:camera-core:$camerax_version"
    implementation "androidx.camera:camera-lifecycle:$camerax_version"
    implementation "androidx.camera:camera-view:$camerax_version"
    implementation "androidx.camera:camera-extensions:$camerax_version"
}
```

Manifest:

```xml
<uses-feature android:name="android.hardware.camera" android:required="true" />
<uses-permission android:name="android.permission.CAMERA" />
```

## Минимальный preview и callback

Layout:

```xml
<com.samsung.android.knox.smartscan.preview.BarcodeScanPreviewView
    android:id="@+id/previewView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
```

Kotlin:

```kotlin
private lateinit var preview: BarcodeScanPreviewView

private val callback = object : PreviewResultHandlingCallback {
    override fun handleBarcodes(
        result: BarcodeResult,
        environment: EnvironmentData
    ) {
        result.barcodes.firstOrNull()?.let { code ->
            val value = code.data
            val type = code.symbology
            val raw = code.rawData
            val position = code.currentPosition
            val frameId = environment.frameId

            saveBarcode(value, type, raw, position, frameId)
            preview.pausePreview()
            preview.stopBarcodeAnalyzing()
        }
    }
}

private fun startScanner() {
    preview = findViewById(R.id.previewView)

    val config = PreviewConfig.Builder()
        .setCameraResolution(SDKConstants.CameraResolutions.RESOLUTION_UHD)
        .setBarcodeScanArea(Size(90, 40))
        .setSymbology(listOf(
            BarcodeInfo.SYMBOLOGY_QR,
            BarcodeInfo.SYMBOLOGY_CODE_128
        ))
        .build()

    preview.init(config, callback)
    preview.startPreview()
    preview.startBarcodeAnalyzing()
}

override fun onPause() {
    preview.stopBarcodeAnalyzing()
    preview.finishPreview()
    super.onPause()
}
```

## Инвертированный QR: включается явно

Обычный выбор `SYMBOLOGY_QR` не означает, что обратная полярность включена. В официальном sample app для этого создаётся отдельный `BarcodeSettings`:

```kotlin
val invertedQr = BarcodeSettings(BarcodeInfo.SYMBOLOGY_QR).apply {
    setSupportInverted(true)
}

val config = PreviewConfig.Builder()
    .setSymbology(listOf(BarcodeInfo.SYMBOLOGY_QR))
    .setSymbologySettings(listOf(invertedQr))
    .build()
```

В sample app список inverted по умолчанию пуст. Пользователь выбирает типы в настройке **Support Inverted Symbologies**. Доступны QR, Data Matrix, PDF417, Codabar, Code 128/39/93, EAN-13/8, Interleaved 2 of 5, UPC-A/E и Aztec.

## Multi-scan и фильтр

Callback уже возвращает список. Можно сохранять уникальные пары `data + symbology` и не останавливать analyzer:

```kotlin
private val seen = linkedMapOf<String, BarcodeInfo>()

override fun handleBarcodes(result: BarcodeResult, environment: EnvironmentData) {
    result.barcodes.forEach { code ->
        seen.putIfAbsent("${code.symbology}:${code.data}", code)
    }
}
```

Фильтр до callback:

```kotlin
preview.addBarcodeFilter(object : BarcodeFilter {
    override fun filter(
        candidates: List<BarcodeInfo>,
        filteredList: MutableSet<BarcodeInfo>
    ) {
        filteredList += candidates.filter { it.data.startsWith("SKU-") }
    }
})
```

## GS1 parser

```kotlin
val parser = Parser.getParser(Parser.ParserFormat.GS1_AI, context)
val parsed = parser.process(code.data)

showText(parsed.formattedString)
sendJson(parsed.jsonString)
```

Нужно обрабатывать `ParserException`: не каждый код содержит корректные GS1 Application Identifiers.

## Mini Scanner

`MiniScannerFrameLayout` создаёт готовое небольшое окно камеры. В sample app ему задаются размер, положение, floating button и комбинация `KEY_TOP | KEY_VOLUME_DOWN`. Можно отключить готовую floating button и вызвать `showMiniScannerView()` собственной кнопкой.

Это удобно, когда форма должна оставаться видимой, а камера открывается только в части экрана.

## Лицензия

Sample app блокирует все варианты сканера, пока `ScanLicenseClient.getScanLicense().isActivatedLicense(context)` возвращает false. Активация:

```kotlin
ScanLicenseClient.getScanLicense().activateLicense(
    context,
    licenseKey,
    object : LicenseActivationCallback {
        override fun onSuccess() = openScanner()
        override fun onFail(errorCode: Int) = showLicenseError(errorCode)
    }
)
```

Для разработки Samsung выдаёт development key через Knox Developer Portal. Для коммерческого ключа Samsung требует привязать пакет приложения через APK. Ключ нельзя хранить открытым в репозитории или статье.

## Что изменилось в 1.6.2

По release notes Samsung от 23 июля 2026 улучшено распознавание кодов при yaw и pitch — то есть при наклоне камеры относительно кода. Других изменений для 1.6.2 на странице release notes не перечислено.

## Практический выбор

Ответьте на вопросы:

1. Нужно только вставить считанный текст в активное поле? **Оставляйте готовый Knox Capture.**
2. Нужно одновременно находить несколько кодов и выбирать среди них? **Используйте SDK.**
3. Нужно видеть форму, карточку товара или заказ одновременно с камерой? **Используйте SDK.**
4. Нужны координаты каждого кода, исходные байты или собственная фильтрация до выдачи результата? **Используйте SDK.**
5. Нужно полностью менять кнопки, рамки, область сканирования и поведение камеры? **Используйте SDK.**
6. Приложение куплено у другого поставщика и его исходного кода нет? **SDK не подойдёт; настраивайте готовый Knox Capture.**

Итог: SDK оправдан не количеством телефонов и не самим фактом сканирования. Он оправдан конкретной функцией, которую нельзя получить настройкой профиля готового Knox Capture. Если такой функции нет, готовое приложение проще.

Не публикуйте AAR и sample archive на открытом сайте без проверки условий Samsung. На `capture2026.ru` публикуются только этот разбор и собственные примеры.

## Ссылки Samsung

- [Knox Capture SDK](https://docs.samsungknox.com/dev/knox-capture-sdk/)
- [Установка SDK](https://docs.samsungknox.com/dev/knox-capture-sdk/get-started/install-knox-capture-sdk/)
- [Sample app tutorial](https://docs.samsungknox.com/dev/knox-capture-sdk/sample-app-tutorials/knox-capture-sample-app-tutorial-overview/)
- [Лицензия SDK](https://docs.samsungknox.com/dev/knox-capture-sdk/get-started/get-the-knox-capture-sdk-license/)
- [API reference 1.6.2](https://docs.samsungknox.com/devref/knox-capture-sdk/reference/index.html)
- [Release notes 1.6.2](https://docs.samsungknox.com/dev/knox-capture-sdk/release-notes/knox-capture-sdk-1-6-2/)
