apply plugin: 'com.android.library' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-parcelize' apply plugin: 'realm-android' buildscript { repositories { mavenCentral() } dependencies { classpath "io.realm:realm-gradle-plugin:10.8.1" } } android { testOptions.unitTests.includeAndroidResources = true compileSdk versions.compileSdk defaultConfig { minSdk versions.minSdk targetSdk versions.targetSdk // Multidex is useful for tests multiDexEnabled true testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // 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' buildConfigField "String", "SDK_VERSION", "\"1.3.8\"" buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\"" resValue "string", "git_sdk_revision", "\"${gitRevision()}\"" resValue "string", "git_sdk_revision_unix_date", "\"${gitRevisionUnixDate()}\"" resValue "string", "git_sdk_revision_date", "\"${gitRevisionDate()}\"" defaultConfig { consumerProguardFiles 'proguard-rules.pro' } } testOptions { // Comment to run on Android 12 execution 'ANDROIDX_TEST_ORCHESTRATOR' } buildTypes { debug { // Set to true to log privacy or sensible data, such as token buildConfigField "boolean", "LOG_PRIVATE_DATA", project.property("vector.debugPrivateData") // Set to BODY instead of NONE to enable logging buildConfigField "okhttp3.logging.HttpLoggingInterceptor.Level", "OKHTTP_LOGGING_LEVEL", "okhttp3.logging.HttpLoggingInterceptor.Level." + project.property("vector.httpLogLevel") } release { buildConfigField "boolean", "LOG_PRIVATE_DATA", "false" buildConfigField "okhttp3.logging.HttpLoggingInterceptor.Level", "OKHTTP_LOGGING_LEVEL", "okhttp3.logging.HttpLoggingInterceptor.Level.BASIC" } } adbOptions { installOptions "-g" } compileOptions { sourceCompatibility versions.sourceCompat targetCompatibility versions.targetCompat } kotlinOptions { jvmTarget = "11" } sourceSets { androidTest { java.srcDirs += "src/sharedTest/java" } test { java.srcDirs += "src/sharedTest/java" } } } android.libraryVariants.all { variant -> def t = tasks.register("generate${variant.name.capitalize()}UniffiBindings", Exec) { // Runs the bindings generation, note that you must have uniffi-bindgen installed // and in your PATH environment variable commandLine 'uniffi-bindgen', 'generate', '../rust-sdk/src/olm.udl', '--language', 'kotlin', '--out-dir', "${buildDir}/generated/source/uniffi/${variant.name}/java" } variant.javaCompileProvider.get().dependsOn(t) def sourceSet = variant.sourceSets.find { it.name == variant.name } sourceSet.java.srcDir new File(buildDir, "generated/source/uniffi/${variant.name}/java") } static def gitRevision() { def cmd = "git rev-parse --short=8 HEAD" return cmd.execute().text.trim() } static def gitRevisionUnixDate() { def cmd = "git show -s --format=%ct HEAD^{commit}" return cmd.execute().text.trim() } static def gitRevisionDate() { def cmd = "git show -s --format=%ci HEAD^{commit}" return cmd.execute().text.trim() } dependencies { implementation libs.jetbrains.coroutinesCore implementation libs.jetbrains.coroutinesAndroid implementation 'net.java.dev.jna:jna:5.10.0@aar' implementation libs.androidx.appCompat implementation libs.androidx.core // Lifecycle implementation libs.androidx.lifecycleCommon implementation libs.androidx.lifecycleProcess // Network implementation libs.squareup.retrofit implementation libs.squareup.retrofitMoshi implementation(platform("com.squareup.okhttp3:okhttp-bom:4.9.2")) implementation 'com.squareup.okhttp3:okhttp' implementation 'com.squareup.okhttp3:logging-interceptor' implementation 'com.squareup.okhttp3:okhttp-urlconnection' implementation libs.squareup.moshi kapt libs.squareup.moshiKotlin implementation libs.markwon.core // Image implementation libs.androidx.exifinterface // Database implementation 'com.github.Zhuinden:realm-monarchy:0.7.1' kapt 'dk.ilios:realmfieldnameshelper:2.0.0' // Work implementation libs.androidx.work // FP implementation libs.arrow.core implementation libs.arrow.instances // olm lib is now hosted by jitpack: https://jitpack.io/#org.matrix.gitlab.matrix-org/olm implementation 'org.matrix.gitlab.matrix-org:olm:3.2.4' // DI implementation libs.dagger.dagger kapt libs.dagger.daggerCompiler // Logging implementation libs.jakewharton.timber implementation 'com.facebook.stetho:stetho-okhttp3:1.6.0' // Video compression implementation 'com.otaliastudios:transcoder:0.10.4' // Exif data handling implementation libs.apache.commonsImaging // Phone number https://github.com/google/libphonenumber implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.37' testImplementation libs.tests.junit testImplementation 'org.robolectric:robolectric:4.7' //testImplementation 'org.robolectric:shadows-support-v4:3.0' // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 testImplementation libs.mockk.mockk testImplementation libs.tests.kluent implementation libs.jetbrains.coroutinesAndroid // Plant Timber tree for test testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' // Transitively required for mocking realm as monarchy doesn't expose Rx testImplementation libs.rx.rxKotlin kaptAndroidTest libs.dagger.daggerCompiler androidTestImplementation libs.androidx.testCore androidTestImplementation libs.androidx.testRunner androidTestImplementation libs.androidx.testRules androidTestImplementation libs.androidx.junit androidTestImplementation libs.androidx.espressoCore androidTestImplementation libs.tests.kluent androidTestImplementation libs.mockk.mockkAndroid androidTestImplementation libs.androidx.coreTesting androidTestImplementation libs.jetbrains.coroutinesAndroid // Plant Timber tree for test androidTestImplementation libs.tests.timberJunitRule androidTestUtil libs.androidx.orchestrator }