Android
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.
Add the following Github packages credentials to your project dependencies. For more information about declaring dependencies, read the Gradle documentation.
Adding Maven Repository
build.gradle (Project)
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)
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)
repositories {
maven { url "https://jitpack.io" }
}
build.gradle.kts (Project)
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)
repositories {
google()
mavenCentral()
}
build.gradle.kts (Project)
repositories {
google()
mavenCentral()
}
The dependencies should look like the following:
Dependencies Structure
build.gradle (Project)
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)
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)
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
build.gradle.kts (Module)
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)
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)
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, Dynamic Localization, or Runtime Localization |
nfc |
Optional (based on use case) | Required when using the NfcScan SDK module. Additional configuration 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 |
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. 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 page.
BOM Integration
To use the Incode BOM, specify the Incode BOM in the dependencies section of your [module]/build.gradle.
build.gradle (Module)
dependencies {
...
implementation platform('com.incode.sdk:bom:5.49.0')
}
build.gradle.kts (Module)
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
<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
<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.
Once the project successfully builds, it is time to start integration.