apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'

repositories {
    jcenter()
}

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.j256.ormlite:ormlite-core:4.48'
    compile 'com.j256.ormlite:ormlite-android:4.48'
    compile 'com.android.support:support-v13:23.2.+'
    compile 'com.android.support:design:23.2.+'
    compile 'com.android.support:cardview-v7:23.2.+'
    compile 'com.android.support:preference-v14:23.2.+'
    compile 'com.android.support:recyclerview-v7:23.2.+'
    compile 'com.jayway.android.robotium:robotium-solo:5.4.1'
    compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
    compile 'com.googlecode.libphonenumber:libphonenumber:7.0.11'
    compile 'se.emilsjolander:stickylistheaders:2.7.0'
    compile 'com.google.zxing:core:3.2.1'
    compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
    compile 'com.jakewharton:butterknife:8.1.0'
    compile 'com.skyfishjy.ripplebackground:library:1.0.1'
    apt 'com.jakewharton:butterknife-compiler:8.1.0'
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    sourceSets {
        main {
            aidl.srcDirs = ['src/main/java']
            jniLibs.srcDir 'src/main/libs'
            jni.srcDirs = []
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.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')
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    signingConfigs {
        config {
            keyAlias 'ring'
            storeFile file('../keystore.bin')
        }
    }
    lintOptions {
        disable 'MissingTranslation'
    }
    splits {
        abi {
            enable true
            reset()
            def sp = archs.split(',')
            include(sp)
            universalApk true
    }
  }
}
