Compatibility
| Name | Version | Implementation |
|---|
| Compile SDK | 36 | compileSdk = q2libs.versions.compileSdk.get() |
| Target SDK | 36 | targetSdk = q2libs.versions.targetSdk.get() |
| Min SDK | 29 | minSdk = q2libs.versions.minSdk.get() |
| Android Gradle Plugin | 8.13.0 | id(q2libs.plugins.android.application) |
| Kotlin Gradle Plugin | 2.0.20 | id(q2libs.plugins.kotlin.android) |
| Google Services Plugin | 4.3.15 | id(q2libs.plugins.google.services) |
| Kotlin Serialization | 1.9.0 | id(q2libs.plugins.kotlin.serialization) |
Migration from 26.2.0 to 26.3.0
Version Updates
This release updates the Q2 SDK Interfaces library to version 0.3.8, which includes several changes
to the SDK interfaces. See the Q2 SDK Interfaces Changes section below
for details.
Library Version Changes
| Library | 26.2.0 Version | 26.3.0 Version | Impact |
|---|
| Q2 SDK Interfaces | 0.3.5 | 0.3.8 | Updated - See SDK interfaces section |
| All other deps | - | - | Stable - No version changes |
Q2 SDK Interfaces Changes
RDCRequest — Dynamic Camera Module Selection
A new optional cameraModuleName field has been added to RDCRequest to support dynamic
camera module selection:
data class RDCRequest(
val first: CheckSide,
val second: CheckSide? = null,
val cameraModuleName: String = ""
)
If cameraModuleName is empty (the default), the existing default camera module is used — no
changes required for existing integrations. If a value is provided, the corresponding camera
module will be invoked.
RDCRequest(
first = CheckSide.FRONT,
second = CheckSide.BACK,
cameraModuleName = "Q2mRDCCamera"
)
RDCRequest(
first = CheckSide.FRONT,
second = CheckSide.BACK
)
Note: When using RDCContract/RDCRequest, currently only the Q2Camera module is
supported. Third party cameras need to be updated to conform to the new CameraModule to use this.
MethodModule — Method Requests
MethodModule now supports an optional request function that allows modules to respond to
typed requests from core and return structured JSON data:
suspend fun request(request: MethodRequest): JSONObject? = null
The default implementation returns null — existing MethodModule implementations require no changes.
Rather than introducing a new interface for each one-off client requirement, a new MethodRequest
enum value is added instead. The shape of the returned JSONObject is defined per request type.
Core collects responses via SdkUtils.callMethodModule(request: MethodRequest): JSONArray,
aggregating the return values from every module that handles the given request into a single
JSONArray. Example response when two modules handle a request:
[
{
"moduleIdentifier": "module one",
"data": {
"session_id": "abc123",
"device_id": "xyz789"
}
},
{
"moduleIdentifier": "module two",
"data": {
"custom_param": "some_value"
}
}
]
MethodRequest: OAUTH_AUTHORIZATION_PARAMS
Appends key-value pairs to the following OAuth 2.0 operations in Q2's InboundSSO authentication
module. All data is URL encoded by InboundSSO before being added.
/authorization — key-value pairs are appended to the authorization URL as query parameters
/refresh — key-value pairs are added to the body of the refresh token request
Expected return format:
Module implementation example:
class MyMethodModule : MethodModule {
override suspend fun request(request: MethodRequest): JSONObject? {
return if (request == MethodRequest.OAUTH_AUTHORIZATION_PARAMS) {
JSONObject().apply {
put("foo", "foo value")
}
} else {
null
}
}
}
LoginResponse.OAuthTokenResponse — New username Field
A new optional username field has been added to OAuthTokenResponse:
class OAuthTokenResponse(
val q2Token: String,
val idToken: String?,
val username: String? = null
) : LoginResponse()
This is backward compatible — existing implementations require no changes.
Version Catalog
AndroidX Libraries
| Library | Version | Implementation |
|---|
| AndroidX Core KTX | 1.12.0 | implementation(q2libs.androidx.core.ktx) |
| AndroidX AppCompat | 1.6.1 | implementation(q2libs.androidx.appcompat) |
| AndroidX Activity KTX | 1.8.1 | implementation(q2libs.androidx.activity.ktx) |
| AndroidX Legacy Support | 1.0.0 | implementation(q2libs.androidx.legacy.support) |
| AndroidX Constraint Layout | 2.1.4 | implementation(q2libs.androidx.constraintlayout) |
| AndroidX CardView | 1.0.0 | implementation(q2libs.androidx.cardview) |
| AndroidX Local Broadcast Manager | 1.1.0 | implementation(q2libs.androidx.localbroadcastmanager) |
| AndroidX Percent Layout | 1.0.0 | implementation(q2libs.androidx.percentlayout) |
| AndroidX Biometric | 1.1.0 | implementation(q2libs.androidx.biometric) |
| AndroidX RecyclerView | 1.3.2 | implementation(q2libs.androidx.recyclerview) |
| AndroidX WebKit | 1.8.0 | implementation(q2libs.androidx.webkit) |
| AndroidX Media | 1.6.0 | implementation(q2libs.androidx.media) |
| AndroidX Browser | 1.8.0 | implementation(q2libs.androidx.browser) |
| AndroidX Grid Layout | 1.0.0 | implementation(q2libs.androidx.gridlayout) |
| AndroidX Preference | 1.2.1 | implementation(q2libs.androidx.preference) |
| AndroidX Security Crypto | 1.1.0-beta01 | implementation(q2libs.androidx.security.crypto) |
AndroidX Fragment
| Library | Version | Implementation |
|---|
| AndroidX Fragment | 1.7.0 | implementation(q2libs.androidx.fragment) |
| AndroidX Fragment KTX | 1.7.0 | implementation(q2libs.androidx.fragment.ktx) |
AndroidX Navigation
| Library | Version | Implementation |
|---|
| AndroidX Navigation Fragment KTX | 2.7.4 | implementation(q2libs.androidx.navigation.fragment.ktx) |
| AndroidX Navigation UI KTX | 2.7.4 | implementation(q2libs.androidx.navigation.ui.ktx) |
| AndroidX Navigation Compose | 2.8.9 | implementation(q2libs.androidx.navigation.compose) |
AndroidX Lifecycle
| Library | Version | Implementation |
|---|
| AndroidX Lifecycle Runtime KTX | 2.7.0 | implementation(q2libs.androidx.lifecycle.runtime.ktx) |
| AndroidX Lifecycle ViewModel KTX | 2.7.0 | implementation(q2libs.androidx.lifecycle.viewmodel.ktx) |
| AndroidX Lifecycle Process | 2.7.0 | implementation(q2libs.androidx.lifecycle.process) |
| AndroidX Lifecycle Compiler | 2.7.0 | kapt(q2libs.androidx.lifecycle.compiler) |
| AndroidX Lifecycle Extensions | 2.2.0 (Deprecated) | implementation(q2libs.androidx.lifecycle.extensions) |
| AndroidX Lifecycle ViewModel Compose | 2.7.0 | implementation(q2libs.androidx.lifecycle.viewmodel.compose) |
AndroidX Room
| Library | Version | Implementation |
|---|
| Room Runtime | 2.6.0 | implementation(q2libs.androidx.room.runtime) |
| Room Compiler | 2.6.0 | kapt(q2libs.androidx.room.compiler) |
| Room KTX | 2.6.0 | implementation(q2libs.androidx.room.ktx) |
AndroidX CameraX
| Library | Version | Implementation |
|---|
| CameraX Camera2 | 1.5.0 | implementation(q2libs.androidx.camera.camera2) |
| CameraX Lifecycle | 1.5.0 | implementation(q2libs.androidx.camera.lifecycle) |
| Camera View | 1.0.0-alpha22 | implementation(q2libs.androidx.camera.view) |
AndroidX Compose
| Library | Version | Implementation |
|---|
| Compose BOM | 2024.09.02 | implementation(platform(q2libs.androidx.compose.bom)) |
| Compose Foundation | - | implementation(q2libs.androidx.compose.foundation) |
| Compose UI | - | implementation(q2libs.androidx.compose.ui) |
| Compose UI Graphics | - | implementation(q2libs.androix.compose.ui.graphics) |
| Compose UI Tooling | - | implementation(q2libs.androix.compose.ui.tooling) |
| Compose UI Tooling Preview | - | implementation(q2libs.androix.compose.ui.tooling.preview) |
| Compose UI Test Manifest | - | implementation(q2libs.androix.compose.ui.test.manifest) |
| Compose UI Test JUnit4 | - | implementation(q2libs.androix.compose.ui.test.junit4) |
| Compose Runtime LiveData | - | implementation(q2libs.androidx.compose.runtime.livedata) |
| Material3 | - | implementation(q2libs.material3) |
| Material3 Adaptive | - | implementation(q2libs.androidx.compose.material3.adpative) |
| Activity Compose | 1.8.2 | implementation(q2libs.activity.compose) |
Google Libraries
| Library | Version | Implementation |
|---|
| Material | 1.10.0 | implementation(q2libs.google.material) |
| GSON | 2.10.1 | implementation(q2libs.google.gson) |
| Play Services Vision | 20.1.3 (Deprecated) | implementation(q2libs.google.play.services.vision) |
| ZXing Core | 3.5.1 | implementation(q2libs.google.zxing.core) |
| Age Signals | 0.0.1-beta02 | implementation(q2libs.google.age.signals) |
Firebase
| Library | Version | Implementation |
|---|
| Firebase Messaging | 23.3.0 | implementation(q2libs.google.firebase.messaging) |
| Firebase Messaging KTX | 23.3.0 | implementation(q2libs.google.firebase.messaging.ktx) |
| Firebase Instance ID | 21.1.0 | implementation(q2libs.google.firebase.iid) |
| Firebase Core | 21.1.1 | implementation(q2libs.google.firebase.core) |
| Firebase Crashlytics Build Tools | 2.9.9 | implementation(q2libs.google.firebase.crashlytics.buildtools) |
Kotlin & Jetbrains
| Library | Version | Implementation |
|---|
| Kotlinx Coroutines | 1.7.3 | implementation(q2libs.jetbrains.kotlinx.coroutines) |
| Jetbrains Annotations | 20.1.0 | implementation(q2libs.jetbrains.annotations) |
Networking
| Library | Version | Implementation |
|---|
| Retrofit2 | 2.9.0 | implementation(q2libs.retrofit2.retrofit) |
| Retrofit2 Converter GSON | 2.9.0 | implementation(q2libs.retrofit2.converter.gson) |
| Retrofit2 RxJava Adapter | 2.1.0 | implementation(q2libs.retrofit2.adapter.rxjava) |
| OkHttp3 | 4.10.0 | implementation(q2libs.okhttp3.okhttp) |
| OkHttp3 Logging Interceptor | 4.10.0 | implementation(q2libs.okhttp3.logging.interceptor) |
| RxAndroid | 1.2.0 | implementation(q2libs.reactivex.rxandroid) |
| Volley | 1.2.1 | implementation(q2libs.volley) |
Dependency Injection
| Library | Version | Implementation |
|---|
| Dagger | 2.52 | implementation(q2libs.dagger) |
| Dagger Compiler | 2.52 | kapt(q2libs.dagger.compiler) |
| Hilt | 2.52 | implementation(q2libs.hilt) |
| Hilt Compiler | 2.52 | kapt(q2libs.hilt.compiler) |
| Hilt Navigation Compose | 1.2.0 | implementation(q2libs.androidx.hilt.navigation.compose) |
| Glassfish Annotation | 10.0-b28 | implementation(q2libs.glassfish.annotation) |
Dependency Injection (Koin)
| Library | Version | Implementation |
|---|
| Koin Android | 3.4.3 | implementation(q2libs.koin.android) |
| Koin Core | 3.4.3 | implementation(q2libs.koin.core) |
| Koin AndroidX Compose | 3.5.0 | implementation(q2libs.koin.androidx.compose) |
Third-Party Libraries
| Library | Version | Implementation |
|---|
| EventBus | 3.3.1 | implementation(q2libs.eventbus) |
| EventBus Processor | 3.3.1 | kapt(q2libs.eventbus.processor) |
| Commons IO | 2.6 | implementation(q2libs.commons.io) |
| Picasso | 2.8 | implementation(q2libs.picasso) |
| Coil | 2.7.0 | implementation(q2libs.coil) |
| Timber | 5.0.1 | implementation(q2libs.timber) |
| Apache Commons Imaging | 1.0-alpha2 | implementation(q2libs.apache.commons.imaging) |
Q2 SDK Components
| Library | Version | Implementation |
|---|
| Q2 SDK Interfaces | 0.3.8 | implementation(q2libs.q2.sdk.interfaces) |
| Q2 UI Components | 0.1.1 | implementation(q2libs.q2.ui.components) |
Plugin Declarations
| Plugin | ID | Implementation |
|---|
| Android Application | com.android.application | id(q2libs.plugins.android.application) |
| Android Library | com.android.library | id(q2libs.plugins.android.library) |
| Kotlin Android | org.jetbrains.kotlin.android | id(q2libs.plugins.kotlin.android) |
| Kotlin Kapt | org.jetbrains.kotlin.kapt | id(q2libs.plugins.kotlin.kapt) |
| Compose Compiler | org.jetbrains.kotlin.plugin.compose | id(q2libs.plugins.compose.compiler) |
| Hilt | com.google.dagger.hilt.android | id(q2libs.plugins.hilt) |
| Kotlin Parcelize | org.jetbrains.kotlin.plugin.parcelize | id(q2libs.plugins.kotlin.parcelize) |
| Google Services | com.google.gms.google-services | id(q2libs.plugins.google.services) |
| Artifactory | com.jfrog.artifactory | id(q2libs.plugins.artifactory) |
| Kotlin Serialization | org.jetbrains.kotlin.plugin.serialization | id(q2libs.plugins.kotlin.serialization) |
Library Bundles
| Bundle | Libraries | Implementation |
|---|
| Dagger | dagger, glassfish-annotation | implementation(q2libs.bundles.dagger) |
| Retrofit2 | retrofit2-retrofit, retrofit2-converter-gson | implementation(q2libs.bundles.retrofit2) |
| Koin | koin-android, koin-core, koin-androidx-compose | implementation(q2libs.bundles.koin) |