apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-parcelize' apply plugin: 'kotlin-kapt' apply plugin: 'com.google.devtools.ksp' apply plugin: 'dagger.hilt.android.plugin' if (project.hasProperty("coverage")) { apply plugin: 'jacoco' } kapt { correctErrorTypes = true } static def gitRevision() { def cmd = "git rev-parse --short=8 HEAD" return cmd.execute().text.trim() } project.android.buildTypes.all { buildType -> buildType.javaCompileOptions.annotationProcessorOptions.arguments = [ validateEpoxyModelUsage: String.valueOf(buildType.name == 'debug') ] } initScreenshotTests(project) android { namespace "im.vector.app" // Due to a bug introduced in Android gradle plugin 3.6.0, we have to specify the ndk version to use // Ref: https://issuetracker.google.com/issues/144111441 ndkVersion "21.3.6528147" compileSdk versions.compileSdk defaultConfig { // Set to API 21: see #405 minSdk versions.minSdk targetSdk versions.targetSdk testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // Keep abiFilter for the universalApk ndk { abiFilters "armeabi-v7a", "x86", 'arm64-v8a', 'x86_64' } // Generate a random app task affinity manifestPlaceholders = [appTaskAffinitySuffix: "H_${gitRevision()}"] // The following argument makes the Android Test Orchestrator run its // "pm clear" command after each test invocation. This command ensures // that the app's state is completely cleared between tests. testInstrumentationRunnerArguments clearPackageData: 'true' vectorDrawables.useSupportLibrary = true } testOptions { // Disables animations during instrumented tests you run from the command line… // This property does not affect tests that you run using Android Studio.” animationsDisabled = true // Comment to run on Android 12 // execution 'ANDROIDX_TEST_ORCHESTRATOR' } buildTypes { debug { if (project.hasProperty("coverage")) { testCoverageEnabled = coverage == "true" } } } compileOptions { sourceCompatibility versions.sourceCompat targetCompatibility versions.targetCompat } kotlinOptions { jvmTarget = "11" freeCompilerArgs += [ "-opt-in=kotlin.RequiresOptIn", // Fixes false positive "This is an internal Mavericks API. It is not intended for external use." // of MvRx `by viewModel()` calls. Maybe due to the inlining of code... This is a temporary fix... "-opt-in=com.airbnb.mvrx.InternalMavericksApi", // Opt in for kotlinx.coroutines.FlowPreview too "-opt-in=kotlinx.coroutines.FlowPreview", // Opt in for kotlinx.coroutines.ExperimentalCoroutinesApi too "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", ] } sourceSets { androidTest { java.srcDirs += "src/sharedTest/java" } test { java.srcDirs += "src/sharedTest/java" } } buildFeatures { viewBinding true } } dependencies { implementation project(":vector-config") api project(":matrix-sdk-android") implementation project(":matrix-sdk-android-flow") implementation project(":library:external:jsonviewer") implementation project(":library:external:diff-match-patch") implementation project(":library:external:textdrawable") implementation project(":library:external:autocomplete") implementation project(":library:ui-strings") implementation project(":library:ui-styles") implementation project(":library:core-utils") implementation project(":library:attachment-viewer") implementation project(":library:multipicker") implementation libs.jetbrains.coroutinesCore implementation libs.jetbrains.coroutinesAndroid implementation libs.androidx.recyclerview implementation libs.androidx.appCompat implementation libs.androidx.fragmentKtx implementation libs.androidx.constraintLayout implementation libs.androidx.core implementation "androidx.media:media:1.6.0" implementation "androidx.transition:transition:1.4.1" implementation libs.androidx.biometric api "org.threeten:threetenbp:1.4.0:no-tzdb" api "com.gabrielittner.threetenbp:lazythreetenbp:0.16.0" implementation libs.squareup.moshi kapt libs.squareup.moshiKotlin // Lifecycle implementation libs.androidx.lifecycleLivedata api libs.androidx.lifecycleProcess implementation libs.androidx.lifecycleRuntimeKtx api libs.androidx.datastorepreferences // Opus Encoder implementation libs.element.opusencoder // WYSIWYG Editor implementation libs.element.wysiwyg // Log api libs.jakewharton.timber // Debug api 'com.facebook.stetho:stetho:1.6.0' // Analytics api 'com.github.matrix-org:matrix-analytics-events:0.22.0' api libs.google.phonenumber // FlowBinding implementation libs.github.flowBinding implementation libs.github.flowBindingAppcompat api libs.airbnb.epoxy implementation libs.airbnb.epoxyGlide ksp libs.airbnb.epoxyProcessor implementation libs.airbnb.epoxyPaging api libs.airbnb.mavericks // Snap Helper https://github.com/rubensousa/GravitySnapHelper api 'com.github.rubensousa:gravitysnaphelper:2.2.2' // Work api libs.androidx.work // Paging implementation libs.androidx.pagingRuntimeKtx // Pref api libs.androidx.preferenceKtx // UI implementation libs.google.material implementation project(":library:external:span") implementation libs.markwon.core implementation libs.markwon.extLatex implementation libs.markwon.imageGlide implementation libs.markwon.inlineParser implementation libs.markwon.html implementation 'com.googlecode.htmlcompressor:htmlcompressor:1.5.2' implementation 'me.saket:better-link-movement-method:2.2.0' implementation 'com.google.android.flexbox:flexbox:3.0.0' implementation libs.androidx.autoFill implementation 'jp.wasabeef:glide-transformations:4.3.0' implementation 'com.github.hyuwah:DraggableView:1.0.0' // Custom Tab implementation 'androidx.browser:browser:1.5.0' // Passphrase strength helper implementation 'com.nulab-inc:zxcvbn:1.7.0' // Alerter implementation 'com.github.tapadoo:alerter:7.2.4' // Shake detection implementation 'com.squareup:seismic:1.0.3' // Image Loading implementation libs.github.bigImageViewer implementation libs.github.glideImageLoader implementation libs.github.glideImageViewFactory // implementation 'com.github.MikeOrtiz:TouchImageView:3.0.2' implementation 'com.github.chrisbanes:PhotoView:2.3.0' implementation libs.github.glide kapt libs.github.glideCompiler implementation 'com.github.yalantis:ucrop:2.2.8' // Chat effects implementation 'nl.dionsegijn:konfetti-xml:2.0.2' implementation 'com.github.jetradarmobile:android-snowfall:1.2.1' // DI implementation libs.dagger.hilt kapt libs.dagger.hiltCompiler // Analytics implementation 'com.posthog:posthog-android:3.2.0' implementation libs.sentry.sentryAndroid // UnifiedPush implementation 'com.github.UnifiedPush:android-connector:2.1.1' implementation "androidx.emoji2:emoji2:1.3.0" // Jitsi api('org.jitsi.react:jitsi-meet-sdk:8.1.1') { exclude group: 'com.google.firebase' exclude group: 'com.google.android.gms' exclude group: 'com.android.installreferrer' // Exclude jitsi's android-scalablevideoview fork's support library // The library exports a jetified artifact but doesn't remove the support library dependency // https://github.com/MatrixFrog/Android-ScalableVideoView/blob/master/gradle.properties#L1 exclude group: 'com.android.support', module: 'appcompat-v7' } // QR-code // Stick to 3.3.3 because of https://github.com/zxing/zxing/issues/1170 implementation 'com.google.zxing:core:3.3.3' implementation project(":library:external:barcodescanner:zxing") // Emoji Keyboard api libs.vanniktech.emojiMaterial api libs.vanniktech.emojiGoogle implementation project(":library:external:dialpad") // JWT api libs.jsonwebtoken.jjwtApi runtimeOnly libs.jsonwebtoken.jjwtImpl runtimeOnly(libs.jsonwebtoken.jjwtOrgjson) { exclude group: 'org.json', module: 'json' //provided by Android natively } testImplementation(libs.jsonwebtoken.jjwtOrgjson) implementation 'commons-codec:commons-codec:1.15' // MapTiler api(libs.maplibre.androidSdk) { exclude group: 'com.google.android.gms', module: 'play-services-location' } api(libs.maplibre.pluginAnnotation) { exclude group: 'com.google.android.gms', module: 'play-services-location' } // TESTS testImplementation libs.tests.junit testImplementation libs.tests.kluent testImplementation libs.mockk.mockk testImplementation libs.androidx.coreTesting testImplementation libs.tests.robolectric // Plant Timber tree for test testImplementation libs.tests.timberJunitRule testImplementation libs.airbnb.mavericksTesting testImplementation libs.androidx.coreTesting testImplementation(libs.jetbrains.coroutinesTest) { exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug" } // Fix issue with Jitsi. Inspired from https://github.com/android/android-test/issues/861#issuecomment-872067868 // Error was lots of `Duplicate class org.checkerframework.common.reflection.qual.MethodVal found in modules jetified-checker-3.1 (org.checkerframework:checker:3.1.1) and jetified-checker-qual-3.12.0 (org.checkerframework:checker-qual:3.12.0) //noinspection GradleDependency Cannot use latest 3.15.0 since it required min API 26. implementation "org.checkerframework:checker:3.35.0" androidTestImplementation libs.androidx.testCore androidTestImplementation libs.androidx.testRunner androidTestImplementation libs.androidx.testRules androidTestImplementation libs.androidx.junit androidTestImplementation libs.androidx.espressoCore androidTestImplementation libs.androidx.espressoContrib androidTestImplementation libs.androidx.espressoIntents androidTestImplementation libs.tests.kluent androidTestImplementation libs.androidx.coreTesting androidTestImplementation(libs.jetbrains.coroutinesTest) { exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug" } // Plant Timber tree for test androidTestImplementation libs.tests.timberJunitRule // "The one who serves a great Espresso" androidTestImplementation('com.adevinta.android:barista:4.3.0') { exclude group: 'org.jetbrains.kotlin' } androidTestImplementation libs.mockk.mockkAndroid androidTestUtil libs.androidx.orchestrator debugImplementation libs.androidx.fragmentTestingManifest androidTestImplementation libs.androidx.fragmentTesting androidTestImplementation "org.jetbrains.kotlin:kotlin-reflect:1.8.21" }