// Top level gradle declarations

buildscript {
    repositories {
        jcenter()
        maven { url 'http://repo1.maven.org/maven2' }
        maven { url 'http://download.crashlytics.com/maven' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

// Module level gradle declarations

apply plugin: 'com.android.application'

apply plugin: 'crashlytics'

repositories {
    maven { url 'http://download.crashlytics.com/maven' }
}

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.fairphone.fplauncher3"
        minSdkVersion 17
        targetSdkVersion 22
    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles 'proguard.flags'
        }

        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src', 'protoBufSrc', 'WallpaperPicker/src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                //renderscript.srcDirs = ['src', 'WallpaperPicker/src']
                res.srcDirs = ['res', 'WallpaperPicker/res']
                assets.srcDirs = ['assets']
            }

            // Move the tests to tests/java, tests/res, etc...
            //instrumentTest.setRoot('tests')
            //androidTest.setRoot('tests')

            // Move the build types to build-types/<type>
            // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
            // This moves them out of them default location under src/<type>/... which would
            // conflict with src/ being used by the main source set.
            // Adding new build types or product flavors should be accompanied
            // by a similar customization.
            //debug.setRoot('build-types/debug')
            //release.setRoot('build-types/release')
        }

        dexOptions {
            incremental false
            preDexLibraries = false
        }
    }
}
    dependencies {
        compile 'com.android.support:support-v13:22.+'
        compile 'com.crashlytics.android:crashlytics:1.+'
        compile 'com.googlecode.libphonenumber:libphonenumber:6.+'
    }