buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-beta03'
    }
}

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.0'

    // Required if using classes in android.test.runner
    useLibrary 'android.test.runner'

    // Required if using classes in android.test.base
    useLibrary 'android.test.base'

    // Required if using classes in android.test.mock
    useLibrary 'android.test.mock'

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 28
        versionName "1.0"

        applicationId 'com.android.inputmethod.latin'
        testApplicationId 'com.android.inputmethod.latin.tests'
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = false

        signingConfig signingConfigs.debug
    }

    signingConfigs {
        debug {
            storeFile file("java/shared.keystore")
        }
    }

    buildTypes {
        debug {
            minifyEnabled false
        }
        release {
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.flags'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    flavorDimensions "default"

    sourceSets {
        main {
            res.srcDirs = ['java/res']
            java.srcDirs = ['common/src', 'java/src']
            manifest.srcFile 'java/AndroidManifest.xml'
        }

        androidTest {
            res.srcDirs = ['tests/res']
            java.srcDirs = ['tests/src']
            manifest.srcFile "tests/AndroidManifest.xml"
        }
    }

    lintOptions {
        checkReleaseBuilds false
    }

    aaptOptions {
        noCompress 'dict'
    }

    externalNativeBuild {
        ndkBuild {
            path 'native/jni/Android.mk'
        }
    }
}

repositories {
    maven { url "../../../prebuilts/fullsdk-darwin/extras/android/m2repository" }
    maven { url "../../../prebuilts/fullsdk-linux/extras/android/m2repository" }
    mavenCentral()
    google()
    jcenter()
}

dependencies {
    implementation 'androidx.legacy:legacy-support-v4:+'
    implementation 'com.google.code.findbugs:jsr305:3.0.2'

    testImplementation 'junit:junit:4.12'
    androidTestImplementation "org.mockito:mockito-core:1.9.5"
    androidTestImplementation 'com.google.dexmaker:dexmaker:1.2'
    androidTestImplementation 'com.google.dexmaker:dexmaker-mockito:1.2'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test:rules:1.0.2'
    androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.3'
    androidTestImplementation "com.android.support:support-annotations:27.1.1"
}
