# Minimum hardware requirements

**Ram:** 3GB

**Back-facing camera:** 5MP

**Front-facing (selfie) camera:** 2MP

# Installation

> 🚧
>
> **Important**: Support for distribution through Artifactory ended September 19th, 2025. If you are currently using Artifactory in your production integration, you must complete the migration to GitHub Packages to ensure uninterrupted access to the SDK.

The Incode Omni Android SDK is distributed through GitHub Packages. To receive credentials for the SDK, contact your enterprise customer success manager or [help@incode.com](mailto:help@incode.com).

Add the following Github packages credentials to your _project_ dependencies. For more information about declaring dependencies, read the [Gradle documentation](https://docs.gradle.org/current/userguide/declaring_repositories.html).

### Adding Maven Repository

#### build.gradle (Project)
```groovy
repositories {
    maven {
        url "https://maven.pkg.github.com/Incode-Technologies-Example-Repos/android-omni-packages"
        credentials {
            username = "incode-customers"
            password = "GITHUB_TOKEN"
        }
    }
}
```

#### build.gradle.kts (Project)
```kotlin
repositories {
    maven {
        url = uri("https://maven.pkg.github.com/Incode-Technologies-Example-Repos/android-omni-packages")
        credentials {
            username = "incode-customers"
            password = "GITHUB_TOKEN"
        }
    }
}
```

The Android SDK is dependent on jitpack, so you must also add the following maven repository.

### Adding Jitpack Repository

#### build.gradle (Project)
```groovy
repositories {
    maven { url "https://jitpack.io" }
}
```

#### build.gradle.kts (Project)
```kotlin
repositories {
    maven("https://jitpack.io")
}
```

If the Google and Maven Central repositories are not already in your project-level `build.gradle` file, add them.

### Adding Google and Maven Central Repositories

#### build.gradle (Project)
```groovy
repositories {
    google()
    mavenCentral()
}
```

#### build.gradle.kts (Project)
```kotlin
repositories {
    google()
    mavenCentral()
}
```

The dependencies should look like the following:

### Dependencies Structure

#### build.gradle (Project)
```groovy
repositories {
    google()
    mavenCentral()

maven { url "https://jitpack.io" }
    maven {
        url "https://maven.pkg.github.com/Incode-Technologies-Example-Repos/android-omni-packages"
        credentials {
            username = "incode-customers"
            password = "GITHUB_TOKEN"
        }
    }
}
```

#### build.gradle.kts (Project)
```kotlin
repositories {
    google()
    mavenCentral()

maven("https://jitpack.io")
    maven {
        url = uri("https://maven.pkg.github.com/Incode-Technologies-Example-Repos/android-omni-packages")
        credentials {
            username = "incode-customers"
            password = "GITHUB_TOKEN"
        }
    }
}
```

Incode requires a minimum of Java 8 in your module-level `[module]/build.gradle`. This applies to both `sourceCompatibility` and `targetCompatibility`. To enforce this, add the following code inside your `android{}` block:

### Java Compatibility

#### build.gradle (Module)
```groovy
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
```

#### build.gradle.kts (Module)
```kotlin
compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}
```

Next, in your `[module]/build.gradle`, add Incode library dependencies as described below.

## Library dependencies

The Incode Omni Android SDK has several library dependencies. Core dependencies are required. Optional dependencies are based on the use case. See the table following the example code.

### Adding Library Dependencies

#### build.gradle (Module)
```groovy
dependencies {
    ...

// Incode Omni SDK
    implementation 'com.incode.sdk:welcome' // Required core dependency
    implementation 'com.incode.sdk:core-light' // Required core dependency

// The following dependencies are optional and needed only in very specific use cases.
    implementation 'com.incode.sdk:extensions' // Optional dependency
    implementation 'com.incode.sdk:nfc' // Optional dependency
    implementation 'com.incode.sdk:video-streaming' // Optional dependency

implementation 'com.incode.sdk:model-face-recognition' // Optional dependency
    implementation 'com.incode.sdk:model-id-face-detection' // Optional dependency
    implementation 'com.incode.sdk:model-liveness-detection' // Optional dependency
    implementation 'com.incode.sdk:model-face-occlusion' // Optional dependency
    implementation 'com.incode.sdk:model-age-estimation' // Optional dependency
}
```

#### build.gradle.kts (Module)
```kotlin
dependencies {
    ...

// Incode Omni SDK
    implementation("com.incode.sdk:welcome") // Required core dependency
    implementation("com.incode.sdk:core-light") // Required core dependency

// The following dependencies are optional and needed only in very specific use cases.
    implementation("com.incode.sdk:extensions") // Optional dependency
    implementation("com.incode.sdk:nfc") // Optional dependency
    implementation("com.incode.sdk:video-streaming") // Optional dependency

implementation("com.incode.sdk:model-face-recognition") // Optional dependency
    implementation("com.incode.sdk:model-id-face-detection") // Optional dependency
    implementation("com.incode.sdk:model-liveness-detection") // Optional dependency
    implementation("com.incode.sdk:model-face-occlusion") // Optional dependency
    implementation("com.incode.sdk:model-age-estimation") // Optional dependency
}
```

### Dependency Table

| Dependency | Type | Description |
| --- | --- | --- |
| `welcome` | **Core** (required) | Main module; contains all core SDK functionality |
| `core-light` | **Core** (required) | Contains image processing libraries used in the SDK |
| `extensions` | Optional (based on use case) | Add when using a custom [Theme Configuration](https://developer.incode.com/docs/user-guide-customization#2-theme-configuration), [Dynamic Localization](https://developer.incode.com/docs/user-guide-customization#32-dynamic-localization), or [Runtime Localization](https://developer.incode.com/docs/user-guide-customization#33-runtime-localization) |
| `nfc` | Optional (based on use case) | Required when using the `NfcScan` SDK module. [Additional configuration](https://developer.incode.com/docs/user-guide-nfc-scan) is also required. |
| `video-streaming` | Optional (based on use case) | Add when using the `Conference` module or the `streamFrames` feature in the `IdScan` or `SelfieScan` modules |
| `model-face-recognition` | Optional (based on use case) | Required when using the local device face recognition feature. This feature is only available for [Face Login](https://developer.incode.com/docs/user-guide-face-login) |
| `model-id-face-detection` | Optional (based on use case) | Required when using the `IdScan` module to detect the front and back sides of an ID via `IdScan.Builder.setEnable[Front/Back]ShownAs[Back/Front]Check()` |
| `model-liveness-detection` | Optional (based on use case) | Required when using the local device liveness detection feature in the `SelfieScan` module via `SelfieScan.Builder().setFaceAuthMode(SelfieScan.FaceAuthMode.LOCAL)` |
| `model-face-occlusion` | Optional (based on use case) | Required when using the on-device face occlusion feature in the `SelfieScan` module via `SelfieScan.Builder().setFaceOcclusionEnabled(true)` |
| `model-age-estimation` | Optional (based on use case) | Required when using the on-device age estimation feature in the `SelfieScan` module via `SelfieScan.Builder().setOnDeviceFaceResultsSubmissionEnabled(true)` |

## Version Usage and Mapping

The latest and select historical versions of Incode library dependencies can be found in the [Bill of Materials (BOM) Version Mapping](https://developer.incode.com/docs/bom-version-mapping). Incode highly recommends using the latest versions of its library dependencies. This can be made easier by using the Incode Bill of Materials (BOM).

### Incode Bill of Materials (BOM)

You can add Incode library dependencies to your project individually, but using the Incode BOM streamlines version control. With the Incode BOM, you only need to specify the BOM’s version, and it automatically ensures all Incode libraries in your project use compatible versions. The BOM references stable releases of each library that are verified to work well together. When you include the BOM, you don’t need to manually assign versions to each Incode library dependency. Just update the BOM’s version to bring all associated libraries up to date at once. The latest BOM version and the dependencies inside it will always be documented on the [BOM Version Mapping](https://developer.incode.com/docs/bom-version-mapping) page.

### BOM Integration

To use the Incode BOM, specify the Incode BOM in the `dependencies` section of your `[module]/build.gradle`.

#### build.gradle (Module)
```groovy
dependencies {
    ...

implementation platform('com.incode.sdk:bom:5.49.0')
}
```

#### build.gradle.kts (Module)
```kotlin
dependencies {
    ...

implementation(platform("com.incode.sdk:bom:5.49.0"))
}
```

### Required permissions

The Incode Android SDK manifest files declare the permissions shown below:

#### `com.incode.sdk:welcome`
```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
```

#### `com.incode.sdk:nfc`
```xml
<uses-permission android:name="android.permission.NFC" />
```

## Optional permissions

Some SDK functions can be enhanced if additional permissions are given. However, using these permissions will subject your app to additional scrutiny when publishing on Google Play. You should only declare these permissions if your app has an existing use case for them.

## Troubleshooting

This section provides examples of build errors and messages, explains their meaning if the message is unclear, and offers potential solutions.

### Building

Once you've implemented your dependency inclusion method, try building the project. If you encounter issues during the build process, refer to the [troubleshooting section](https://developer.incode.com/docs/setup-android#troubleshooting).

Once the project successfully builds, it is time to start integration.
