Skip to main content

Android DevApp v26.3.0

Compatibility

NameVersionImplementation
Compile SDK36compileSdk = q2libs.versions.compileSdk.get()
Target SDK36targetSdk = q2libs.versions.targetSdk.get()
Min SDK29minSdk = q2libs.versions.minSdk.get()
Android Gradle Plugin8.13.0id(q2libs.plugins.android.application)
Kotlin Gradle Plugin2.0.20id(q2libs.plugins.kotlin.android)
Google Services Plugin4.3.15id(q2libs.plugins.google.services)
Kotlin Serialization1.9.0id(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

Library26.2.0 Version26.3.0 VersionImpact
Q2 SDK Interfaces0.3.50.3.8Updated - 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 = "" // NEW — defaults to empty (use default camera)
)

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.

// Explicitly invoke the Q2 camera module
RDCRequest(
first = CheckSide.FRONT,
second = CheckSide.BACK,
cameraModuleName = "Q2mRDCCamera"
)

// Default behavior — backward compatible
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:

{
"foo": "foo value"
}

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 // NEW — optional, defaults to null
) : LoginResponse()

This is backward compatible — existing implementations require no changes.

Version Catalog

AndroidX Libraries

LibraryVersionImplementation
AndroidX Core KTX1.12.0implementation(q2libs.androidx.core.ktx)
AndroidX AppCompat1.6.1implementation(q2libs.androidx.appcompat)
AndroidX Activity KTX1.8.1implementation(q2libs.androidx.activity.ktx)
AndroidX Legacy Support1.0.0implementation(q2libs.androidx.legacy.support)
AndroidX Constraint Layout2.1.4implementation(q2libs.androidx.constraintlayout)
AndroidX CardView1.0.0implementation(q2libs.androidx.cardview)
AndroidX Local Broadcast Manager1.1.0implementation(q2libs.androidx.localbroadcastmanager)
AndroidX Percent Layout1.0.0implementation(q2libs.androidx.percentlayout)
AndroidX Biometric1.1.0implementation(q2libs.androidx.biometric)
AndroidX RecyclerView1.3.2implementation(q2libs.androidx.recyclerview)
AndroidX WebKit1.8.0implementation(q2libs.androidx.webkit)
AndroidX Media1.6.0implementation(q2libs.androidx.media)
AndroidX Browser1.8.0implementation(q2libs.androidx.browser)
AndroidX Grid Layout1.0.0implementation(q2libs.androidx.gridlayout)
AndroidX Preference1.2.1implementation(q2libs.androidx.preference)
AndroidX Security Crypto1.1.0-beta01implementation(q2libs.androidx.security.crypto)

AndroidX Fragment

LibraryVersionImplementation
AndroidX Fragment1.7.0implementation(q2libs.androidx.fragment)
AndroidX Fragment KTX1.7.0implementation(q2libs.androidx.fragment.ktx)

AndroidX Navigation

LibraryVersionImplementation
AndroidX Navigation Fragment KTX2.7.4implementation(q2libs.androidx.navigation.fragment.ktx)
AndroidX Navigation UI KTX2.7.4implementation(q2libs.androidx.navigation.ui.ktx)
AndroidX Navigation Compose2.8.9implementation(q2libs.androidx.navigation.compose)

AndroidX Lifecycle

LibraryVersionImplementation
AndroidX Lifecycle Runtime KTX2.7.0implementation(q2libs.androidx.lifecycle.runtime.ktx)
AndroidX Lifecycle ViewModel KTX2.7.0implementation(q2libs.androidx.lifecycle.viewmodel.ktx)
AndroidX Lifecycle Process2.7.0implementation(q2libs.androidx.lifecycle.process)
AndroidX Lifecycle Compiler2.7.0kapt(q2libs.androidx.lifecycle.compiler)
AndroidX Lifecycle Extensions2.2.0 (Deprecated)implementation(q2libs.androidx.lifecycle.extensions)
AndroidX Lifecycle ViewModel Compose2.7.0implementation(q2libs.androidx.lifecycle.viewmodel.compose)

AndroidX Room

LibraryVersionImplementation
Room Runtime2.6.0implementation(q2libs.androidx.room.runtime)
Room Compiler2.6.0kapt(q2libs.androidx.room.compiler)
Room KTX2.6.0implementation(q2libs.androidx.room.ktx)

AndroidX CameraX

LibraryVersionImplementation
CameraX Camera21.5.0implementation(q2libs.androidx.camera.camera2)
CameraX Lifecycle1.5.0implementation(q2libs.androidx.camera.lifecycle)
Camera View1.0.0-alpha22implementation(q2libs.androidx.camera.view)

AndroidX Compose

LibraryVersionImplementation
Compose BOM2024.09.02implementation(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 Compose1.8.2implementation(q2libs.activity.compose)

Google Libraries

LibraryVersionImplementation
Material1.10.0implementation(q2libs.google.material)
GSON2.10.1implementation(q2libs.google.gson)
Play Services Vision20.1.3 (Deprecated)implementation(q2libs.google.play.services.vision)
ZXing Core3.5.1implementation(q2libs.google.zxing.core)
Age Signals0.0.1-beta02implementation(q2libs.google.age.signals)

Firebase

LibraryVersionImplementation
Firebase Messaging23.3.0implementation(q2libs.google.firebase.messaging)
Firebase Messaging KTX23.3.0implementation(q2libs.google.firebase.messaging.ktx)
Firebase Instance ID21.1.0implementation(q2libs.google.firebase.iid)
Firebase Core21.1.1implementation(q2libs.google.firebase.core)
Firebase Crashlytics Build Tools2.9.9implementation(q2libs.google.firebase.crashlytics.buildtools)

Kotlin & Jetbrains

LibraryVersionImplementation
Kotlinx Coroutines1.7.3implementation(q2libs.jetbrains.kotlinx.coroutines)
Jetbrains Annotations20.1.0implementation(q2libs.jetbrains.annotations)

Networking

LibraryVersionImplementation
Retrofit22.9.0implementation(q2libs.retrofit2.retrofit)
Retrofit2 Converter GSON2.9.0implementation(q2libs.retrofit2.converter.gson)
Retrofit2 RxJava Adapter2.1.0implementation(q2libs.retrofit2.adapter.rxjava)
OkHttp34.10.0implementation(q2libs.okhttp3.okhttp)
OkHttp3 Logging Interceptor4.10.0implementation(q2libs.okhttp3.logging.interceptor)
RxAndroid1.2.0implementation(q2libs.reactivex.rxandroid)
Volley1.2.1implementation(q2libs.volley)

Dependency Injection

LibraryVersionImplementation
Dagger2.52implementation(q2libs.dagger)
Dagger Compiler2.52kapt(q2libs.dagger.compiler)
Hilt2.52implementation(q2libs.hilt)
Hilt Compiler2.52kapt(q2libs.hilt.compiler)
Hilt Navigation Compose1.2.0implementation(q2libs.androidx.hilt.navigation.compose)
Glassfish Annotation10.0-b28implementation(q2libs.glassfish.annotation)

Dependency Injection (Koin)

LibraryVersionImplementation
Koin Android3.4.3implementation(q2libs.koin.android)
Koin Core3.4.3implementation(q2libs.koin.core)
Koin AndroidX Compose3.5.0implementation(q2libs.koin.androidx.compose)

Third-Party Libraries

LibraryVersionImplementation
EventBus3.3.1implementation(q2libs.eventbus)
EventBus Processor3.3.1kapt(q2libs.eventbus.processor)
Commons IO2.6implementation(q2libs.commons.io)
Picasso2.8implementation(q2libs.picasso)
Coil2.7.0implementation(q2libs.coil)
Timber5.0.1implementation(q2libs.timber)
Apache Commons Imaging1.0-alpha2implementation(q2libs.apache.commons.imaging)

Q2 SDK Components

LibraryVersionImplementation
Q2 SDK Interfaces0.3.8implementation(q2libs.q2.sdk.interfaces)
Q2 UI Components0.1.1implementation(q2libs.q2.ui.components)

Plugin Declarations

PluginIDImplementation
Android Applicationcom.android.applicationid(q2libs.plugins.android.application)
Android Librarycom.android.libraryid(q2libs.plugins.android.library)
Kotlin Androidorg.jetbrains.kotlin.androidid(q2libs.plugins.kotlin.android)
Kotlin Kaptorg.jetbrains.kotlin.kaptid(q2libs.plugins.kotlin.kapt)
Compose Compilerorg.jetbrains.kotlin.plugin.composeid(q2libs.plugins.compose.compiler)
Hiltcom.google.dagger.hilt.androidid(q2libs.plugins.hilt)
Kotlin Parcelizeorg.jetbrains.kotlin.plugin.parcelizeid(q2libs.plugins.kotlin.parcelize)
Google Servicescom.google.gms.google-servicesid(q2libs.plugins.google.services)
Artifactorycom.jfrog.artifactoryid(q2libs.plugins.artifactory)
Kotlin Serializationorg.jetbrains.kotlin.plugin.serializationid(q2libs.plugins.kotlin.serialization)

Library Bundles

BundleLibrariesImplementation
Daggerdagger, glassfish-annotationimplementation(q2libs.bundles.dagger)
Retrofit2retrofit2-retrofit, retrofit2-converter-gsonimplementation(q2libs.bundles.retrofit2)
Koinkoin-android, koin-core, koin-androidx-composeimplementation(q2libs.bundles.koin)