Skip to main content

Android v26.6.0

Compatibility

NameVersionImplementation
Compile SDK36compileSdk = q2libs.versions.compileSdk.get()
Target SDK36targetSdk = q2libs.versions.targetSdk.get()
Min SDK29minSdk = q2libs.versions.minSdk.get()
Java / JVM21javaVersion = q2libs.versions.javaVersion
Gradle9.4.1gradle-wrapper.properties
Android Gradle Plugin9.1.0id(q2libs.plugins.android.application)
Kotlin Gradle Plugin2.3.20(built into AGP 9; no explicit plugin alias)
KSP2.3.6id(q2libs.plugins.ksp)
Google Services Plugin4.4.2id(q2libs.plugins.google.services)
Kotlin Serialization2.3.20id(q2libs.plugins.kotlin.serialization)

Migration from 26.5.0 to 26.6.0

Doing a multi-version migration?

If you're jumping more than 2–3 versions at once, walking each version's migration notes individually can be tedious and error-prone. Consider the Large Version Migrations guide instead — it walks you through replacing your local DevApp with a fresh copy at the target tag and dropping your module back in, which atomically picks up every scaffolding change at once.

This release is a major toolchain upgrade. JVM target moves from 17 to 21, Gradle goes from 8.14.4 to 9.4.1, the Android Gradle Plugin jumps from 8.13.0 to 9.1.0, and Kotlin advances from 2.0.20 to 2.3.20. The annotation-processing pipeline migrates from KAPT to KSP, and the standalone kotlin-android plugin alias is no longer applied (Kotlin is integrated into AGP 9). Every DevApp and every Q2 module must be rebuilt against this release.

The Q2 SDK Interfaces additions in this release (OAuthUtils.accessToken and the new accessToken parameter on LoginResponse.OAuthTokenResponse) are additive and backward compatible at the source level — but combined with the toolchain bump, all modules must be republished against sdk_interfaces 0.3.13.

Module rebuild required

Modules built prior to 26.6.0 are not compatible with a 26.6.0 Q2 Mobile App. Every module must update its build configuration as described below and republish against the 26.6.0 toolchain.

Required DevApp build configuration updates

The DevApp template was updated alongside this release. Apply the same changes to your DevApp and to every module project.

1. Bump the JVM target to 21

Your environment must run on JDK 21. Update compileOptions in default_config.gradle (or wherever your shared Android config lives) to source the version from the catalog:

android {
compileOptions {
def jv = JavaVersion.toVersion(q2libs.versions.javaVersion.get())
sourceCompatibility jv
targetCompatibility jv
}
}

Remove any explicit kotlinOptions { jvmTarget = "17" } block — jvmTarget is now derived automatically from compileOptions by Kotlin 2.3 / AGP 9.

In the root build.gradle, the allprojects { ext { ... } } block should reference 21:

allprojects {
ext {
javaVersion = JavaVersion.VERSION_21
jvmTarget = "21"
}
}

2. Migrate from KAPT to KSP

Hilt's compiler now runs through KSP. In every module that uses Hilt:

  • Remove the alias q2libs.plugins.kotlin.kapt plugin entry.
  • Add alias q2libs.plugins.ksp.
  • Replace every kapt q2libs.hilt.compiler dependency with ksp q2libs.hilt.compiler.
plugins {
alias q2libs.plugins.android.application
alias q2libs.plugins.google.services
alias q2libs.plugins.ksp // was: alias q2libs.plugins.kotlin.kapt
alias q2libs.plugins.hilt
}

dependencies {
implementation q2libs.hilt
ksp q2libs.hilt.compiler // was: kapt q2libs.hilt.compiler
}

The kotlin-kapt plugin alias has been removed from the version catalog entirely. Any remaining kapt(...) dependency entries elsewhere in your module must also migrate to ksp(...).

3. Drop the kotlin-android plugin alias

AGP 9 integrates Kotlin compilation directly. The standalone org.jetbrains.kotlin.android plugin should no longer be applied. Remove every line that looks like:

alias q2libs.plugins.kotlin.android      // remove this
apply plugin: 'kotlin-android' // remove this from default_config.gradle

The catalog entry for kotlin-android has been removed in 26.6.0.

4. Remove android.enableJetifier=true

Jetifier is no longer needed. Delete this line from gradle.properties:

android.enableJetifier=true   # remove

5. Bump the Gradle wrapper

Update gradle/wrapper/gradle-wrapper.properties:

distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip

6. Update q2Version

q2Version=26.6.0

7. Drop the stale kotlin_version ext

If your root build.gradle still pins a kotlin_version in project.ext, remove it. Kotlin versions are managed exclusively through the version catalog now.

project.ext {
kotlin_version = '1.7.20' // remove this line
sdkVersionCode = 1
}

Version Updates

This release updates the Q2 SDK Interfaces library from 0.3.11 to 0.3.13 and bumps the entire core build toolchain. Highlights:

Library Version Changes

Library26.5.0 Version26.6.0 VersionImpact
Q2 SDK Interfaces0.3.110.3.13Updated — See SDK Interfaces section
Java / JVM Target1721Breaking — JDK 21 required to build
Gradle8.14.49.4.1Breaking — Wrapper update required
Android Gradle Plugin8.13.09.1.0Breaking — Kotlin now integrated into AGP
Kotlin Gradle Plugin2.0.202.3.20Breaking — Bundled with AGP 9; no standalone alias
Hilt2.572.59.2Breaking — Module rebuild required, KSP-only compiler
KSP(not present)2.3.6New — Replaces KAPT for annotation processing
Google Services Plugin4.3.154.4.2Updated
Compose BOM2024.09.022025.12.01Updated — Pulls in newer Compose libraries
Kotlin Serialization Plugin2.0.202.3.20Updated — Tracks Kotlin
kotlinx-serialization-json1.7.31.11.0Updated
Room2.6.02.8.4Updated
AndroidX CameraX View1.0.0-alpha221.5.0Updated — Now follows the shared camerax ref
Compose Material Icons Core(not present)(BOM-managed)Newmaterial-icons-core library available via the catalog
JetifierenableddisabledBreakingandroid.enableJetifier=true removed
KAPT plugin aliaspresentremovedBreaking — Migrate annotation processors to KSP
Kotlin Android plugin aliaspresentremovedBreaking — AGP 9 applies Kotlin automatically

Q2 SDK Interfaces Changes

The q2-sdk-interfaces artifact moves from 0.3.11 to 0.3.13 in this release.

OAuthUtils — Access token now exposed

OAuthUtils now exposes the OAuth accessToken alongside the existing idToken. Modules that need to call OAuth-protected APIs as the authenticated user should use this new property.

interface OAuthUtils {
/**
* the id token provided by the authorization server.
*/
val idToken: String

/**
* the access token provided by the authorization server.
*/
val accessToken: String
}

Usage:

val oauthAccessToken: String = sdkUtils.oAuthUtils.accessToken

LoginResponse.OAuthTokenResponse — Access token parameter

LoginResponse.OAuthTokenResponse gained a new accessToken: String? constructor parameter. The parameter is nullable, so existing callers compile unchanged when invoked via named arguments — but positional callers must add the new argument.

Before:

class OAuthTokenResponse(
val q2Token: String,
val idToken: String?,
val username: String? = null
) : LoginResponse()

After:

class OAuthTokenResponse(
val q2Token: String,
val idToken: String?,
val accessToken: String?,
val username: String? = null
) : LoginResponse()
note

accessToken is positional and therefore not source-compatible for positional callers. If your module instantiates OAuthTokenResponse directly with positional arguments, add accessToken between idToken and username.


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 ExifInterface1.4.2implementation(q2libs.androidx.exifinterface)

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.0ksp(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.8.4implementation(q2libs.androidx.room.runtime)
Room Compiler2.8.4ksp(q2libs.androidx.room.compiler)
Room KTX2.8.4implementation(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.5.0implementation(q2libs.androidx.camera.view)

AndroidX Compose

LibraryVersionImplementation
Compose BOM2025.12.01implementation(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)
Material Icons Core-implementation(q2libs.material.icons.core)
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)
Kotlinx Serialization JSON1.11.0implementation(q2libs.kotlinx.serialization)
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.59.2implementation(q2libs.dagger)
Dagger Compiler2.59.2ksp(q2libs.dagger.compiler)
Hilt2.59.2implementation(q2libs.hilt)
Hilt Compiler2.59.2ksp(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.1ksp(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.13implementation(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)
KSPcom.google.devtools.kspid(q2libs.plugins.ksp)
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)
Dokkaorg.jetbrains.dokkaid(q2libs.plugins.dokka)

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)