buildscript {
    repositories {
        mavenCentral()
        maven {
            url 'http://maven.v.io/'
        }
    }
    dependencies {
        // This introduces the Android plugin to make building Android
        // applications easier.
        classpath 'com.android.tools.build:gradle:1.3.0'
        // We are going to define a custom VDL service. The Vanadium
        // Gradle plugin makes that easier, so let's use that.
        classpath 'io.v:gradle-plugin:0.1-SNAPSHOT'
        // Use the Android SDK manager, which will automatically download
        // the required Android SDK.
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
    }
}

// Make our lives easier by automatically downloading the appropriate Android SDK.
apply plugin: 'android-sdk-manager'
// It's an Android application.
apply plugin: 'com.android.application'

// It's going to use VDL.
apply plugin: 'io.v.vdl'

repositories {
    mavenCentral()
    maven {
        url 'https://maven.v.io/'
    }
}

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    defaultConfig {
        applicationId "io.v.android.apps.reader"
        minSdkVersion 22
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    // Vanadium android-lib only supports armeabi-v7a.
    // The following block prevents this app from running in arm64-v8a mode.
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a'
            universalApk false
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:design:22.2.1'
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:cardview-v7:22.2.1'
    compile 'com.android.support:recyclerview-v7:22.2.1'
    compile 'com.joanzapata.pdfview:android-pdfview:1.0.4@aar'
    compile 'io.v:vanadium-android:0.1-SNAPSHOT'
}

vdl {
    inputPaths += new File(projectDir, '../../common').canonicalPath
    packageTranslations += 'vdl->io/v/android/apps/reader/vdl'
}
