Skip to content
Snippets Groups Projects
build.gradle 7.53 KiB
Newer Older
Benoit Marty's avatar
Benoit Marty committed
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
Benoit Marty's avatar
Benoit Marty committed
apply plugin: 'kotlin-parcelize'
Benoit Marty's avatar
Benoit Marty committed
apply plugin: 'realm-android'
Taras's avatar
Taras committed
apply plugin: 'maven-publish'
Benoit Marty's avatar
Benoit Marty committed

if (project.hasProperty("coverage")) {
    apply plugin: 'jacoco'
}

Benoit Marty's avatar
Benoit Marty committed
buildscript {
    repositories {
        // Do not use `mavenCentral()`, it prevents Dependabot from working properly
        maven {
            url 'https://repo1.maven.org/maven2'
        }
Benoit Marty's avatar
Benoit Marty committed
    }
    dependencies {
Taras's avatar
Taras committed
        classpath "io.realm:realm-gradle-plugin:10.16.0"
Benoit Marty's avatar
Benoit Marty committed
    }
}

android {
    namespace "org.matrix.android.sdk"

Benoit Marty's avatar
Benoit Marty committed
    testOptions.unitTests.includeAndroidResources = true

    compileSdk versions.compileSdk

Benoit Marty's avatar
Benoit Marty committed
    defaultConfig {
        minSdk versions.minSdk
        targetSdk versions.targetSdk

Benoit Marty's avatar
Benoit Marty committed
        // 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'

        // WARNING: always restore this line after importing code from Element Android (2/2)
        buildConfigField "String", "SDK_VERSION", "\"${project.getProperties().getOrDefault("VERSION_NAME", "0.0.0")}\""
Benoit Marty's avatar
Benoit Marty committed
        buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
        buildConfigField "String", "GIT_SDK_REVISION_UNIX_DATE", "\"${gitRevisionUnixDate()}\""
        buildConfigField "String", "GIT_SDK_REVISION_DATE", "\"${gitRevisionDate()}\""
Benoit Marty's avatar
Benoit Marty committed

        defaultConfig {
            consumerProguardFiles 'proguard-rules.pro'
        }
    }

    testOptions {
        // Comment to run on Android 12
//        execution 'ANDROIDX_TEST_ORCHESTRATOR'
Benoit Marty's avatar
Benoit Marty committed
    }

    buildTypes {
        debug {
            if (project.hasProperty("coverage")) {
Taras's avatar
Taras committed
                testCoverageEnabled = coverage == "true"
Benoit Marty's avatar
Benoit Marty committed
            // 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"
Benoit Marty's avatar
Benoit Marty committed
        }
    }

    adbOptions {
        installOptions "-g"
//        timeOutInMs 350 * 1000
Benoit Marty's avatar
Benoit Marty committed
    }

    compileOptions {
        sourceCompatibility versions.sourceCompat
        targetCompatibility versions.targetCompat
Benoit Marty's avatar
Benoit Marty committed
    }

    kotlinOptions {
Benoit Marty's avatar
Benoit Marty committed
        jvmTarget = "11"
        freeCompilerArgs += [
                // Disabled for now, there are too many errors. Could be handled in another dedicated PR
                // '-Xexplicit-api=strict', // or warning
                "-opt-in=kotlin.RequiresOptIn",
                // Opt in for kotlinx.coroutines.FlowPreview
                "-opt-in=kotlinx.coroutines.FlowPreview",
Benoit Marty's avatar
Benoit Marty committed
    }

    sourceSets {
        androidTest {
            java.srcDirs += "src/sharedTest/java"
        }
        test {
            java.srcDirs += "src/sharedTest/java"
        }
    }
Taras's avatar
Taras committed

    publishing {
        singleVariant("release") {
            withSourcesJar()
            withJavadocJar()
        }
    }
static def gitRevision() {
Benoit Marty's avatar
Benoit Marty committed
    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()
}

Taras's avatar
Taras committed
configurations.all {
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

Benoit Marty's avatar
Benoit Marty committed
dependencies {
Taras's avatar
Taras committed
    api libs.jetbrains.coroutinesCore
    api libs.jetbrains.coroutinesAndroid
Benoit Marty's avatar
Benoit Marty committed

Taras's avatar
Taras committed

//    implementation(name: 'crypto-android-release', ext: 'aar')
Taras's avatar
Taras committed
    //implementation 'net.java.dev.jna:jna:5.13.0@aar'
Taras's avatar
Taras committed

Taras's avatar
Taras committed
    //   implementation libs.androidx.appCompat
Taras's avatar
Taras committed
    api libs.androidx.core
Benoit Marty's avatar
Benoit Marty committed

Taras's avatar
Taras committed
    api libs.androidx.lifecycleLivedata
Taras's avatar
Taras committed

    // Lifecycle
Taras's avatar
Taras committed
    api libs.androidx.lifecycleCommon
    api libs.androidx.lifecycleProcess
Benoit Marty's avatar
Benoit Marty committed

    // Network
Taras's avatar
Taras committed
    api libs.squareup.retrofit
    api libs.squareup.retrofitMoshi
    // When version of okhttp is updated (current is 4.9.3), consider removing the workaround
    // to force usage of Protocol.HTTP_1_1. Check the status of:
    // - https://github.com/square/okhttp/issues/3278
    // - https://github.com/square/okhttp/issues/4455
    // - https://github.com/square/okhttp/issues/3146
    //Do not use bom for publishing
    def okhttp_version = "4.12.0"
Taras's avatar
Taras committed
    api "com.squareup.okhttp3:okhttp:$okhttp_version"
    api "com.squareup.okhttp3:logging-interceptor:$okhttp_version"
Taras's avatar
Taras committed
    api libs.squareup.moshi
    api libs.squareup.moshiAdapters
    kapt libs.squareup.moshiKotlin
Benoit Marty's avatar
Benoit Marty committed

    api "com.atlassian.commonmark:commonmark:0.13.0"
Benoit Marty's avatar
Benoit Marty committed

    // Image
Taras's avatar
Taras committed
    api libs.androidx.exifinterface
Benoit Marty's avatar
Benoit Marty committed

    // Database
Taras's avatar
Taras committed
    api 'com.github.Zhuinden:realm-monarchy:0.7.1'
Benoit Marty's avatar
Benoit Marty committed
    kapt 'dk.ilios:realmfieldnameshelper:2.0.0'
Benoit Marty's avatar
Benoit Marty committed

    // Shared Preferences
Taras's avatar
Taras committed
    api libs.androidx.preferenceKtx
Benoit Marty's avatar
Benoit Marty committed
    // Work
Taras's avatar
Taras committed
    api libs.androidx.work
Benoit Marty's avatar
Benoit Marty committed

    // olm lib is now hosted in MavenCentral
Taras's avatar
Taras committed
    api 'org.matrix.android:olm-sdk:3.2.12'
Benoit Marty's avatar
Benoit Marty committed

    // DI
Taras's avatar
Taras committed
    api libs.dagger.dagger
    kapt libs.dagger.daggerCompiler
Benoit Marty's avatar
Benoit Marty committed

    // Logging
Taras's avatar
Taras committed
    api libs.jakewharton.timber
Benoit Marty's avatar
Benoit Marty committed

    // Video compression
Taras's avatar
Taras committed
    api 'com.otaliastudios:transcoder:0.10.5'
    // Exif data handling
Taras's avatar
Taras committed
    api libs.apache.commonsImaging
Taras's avatar
Taras committed
    api libs.google.phonenumber
Benoit Marty's avatar
Benoit Marty committed

Taras's avatar
Taras committed
    //Bcrypt
Taras's avatar
Taras committed
    api 'at.favre.lib:bcrypt:0.9.0'
Taras's avatar
Taras committed

Taras's avatar
Taras committed
    api("org.futo.gitlab.circles:circles-rust-components-kotlin:v0.3.15.6@aar") {
        transitive = true
    }
    //rustCryptoApi project(":library:rustCrypto")
Taras's avatar
Taras committed

    testImplementation libs.tests.junit
Benoit Marty's avatar
Benoit Marty committed
    // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281
    testImplementation libs.mockk.mockk
    testImplementation libs.tests.kluent
    testImplementation libs.jetbrains.coroutinesTest
Benoit Marty's avatar
Benoit Marty committed
    // 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
Benoit Marty's avatar
Benoit Marty committed

    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
    androidTestImplementation libs.jetbrains.coroutinesTest

Benoit Marty's avatar
Benoit Marty committed
    // Plant Timber tree for test
    androidTestImplementation libs.tests.timberJunitRule
Benoit Marty's avatar
Benoit Marty committed

    androidTestUtil libs.androidx.orchestrator
Taras's avatar
Taras committed

publishing {
    publications {
        release(MavenPublication) {
            groupId = "org.futo.gitlab.circles"
            artifactId = "matrix-android-sdk"
Taras's avatar
Taras committed
            version = "1.6.10.25"
Taras's avatar
Taras committed

            afterEvaluate {
                from components.release
            }
        }
    }
}