buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'io.v:gradle-plugin:1.4'
    }
}

apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.application'
apply plugin: 'io.v.vdl'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"
    testOptions {
        unitTests.returnDefaultValues = true
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    defaultConfig {
        applicationId "io.v.moments"
        minSdkVersion 23
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        // Enabling multidex support.
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.9.5'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
    compile 'com.android.support:multidex:1.0.0'
    compile 'io.v:vanadium-android:1.9+'
}

vdl {
    // Where the VDL tool will look for VDL definitions.
    inputPaths += 'src/main/java'
}

