apply plugin: 'com.android.application'

android {
    compileSdkVersion project.compileSdkVersion
    buildToolsVersion project.buildToolsVersion

    defaultConfig {
        applicationId "com.alibaba.weex"
        minSdkVersion project.appMinSdkVersion
        targetSdkVersion project.targetSdkVersion
        versionCode 13
        versionName "0.5.2.5"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        ndk{
            abiFilters "x86"
            abiFilters "armeabi"
        }
    }
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.equals('app-debug.apk')) {
                def fileName = outputFile.name.replace("app-debug.apk", "playground.apk")
                output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }
    signingConfigs {
        debug {
            storeFile file("tools/weex.jks")
            storePassword "123456"
            keyAlias "weex"
            keyPassword "123456"
        }
    }
    buildTypes {
        debug {
            testCoverageEnabled false
        }
    }
    sourceSets {
        main {
            jniLibs.srcDir(['libs'])
            java {
                srcDirs = ["src/main/java", "src/main/java_zxing"];
            }
        }
    }
    lintOptions {
        abortOnError false
    }

    packagingOptions {
        exclude 'LICENSE.txt'
    }
    testOptions {
        reportDir = "$project.buildDir/test/report"
    }
    dexOptions {
        preDexLibraries false
    }
}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile "com.android.support:support-annotations:${project.supportLibVersion}"
    androidTestCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestCompile('com.android.support.test.espresso:espresso-contrib:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
        exclude group: 'com.android.support', module: 'support-v4'
        exclude group: 'com.android.support', module: 'design'
        exclude group: 'com.android.support', module: 'appcompat-v7'
        exclude group: 'com.android.support', module: 'recyclerview-v7'
    })
    androidTestCompile 'com.android.support.test:runner:0.5'
    androidTestCompile 'com.squareup.picasso:picasso:2.5.2'
    androidTestCompile 'org.hamcrest:hamcrest-library:1.3'
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
    /*source dependency*/
    compile project(':weex_sdk')
    debugCompile project(':weex_debug')

    //https://github.com/weexteam/weex-analyzer-android
    //Weex-Analyzer provides several convenient tools such as Memory Monitor
    // to optimize your application. It's not available by default,you can
    // set WXAnalyzerDelegate#DEBUG==true to enable it
    debugCompile 'com.taobao.android:weex_analyzer:0.1.0.5'

    compile project(':commons')
    compile 'com.taobao.android:dexposed:0.1.8'
    compile 'com.loopj.android:android-async-http:1.4.9@aar'
    compile 'com.facebook.fresco:fresco:0.12.0+'
    compile 'com.facebook.fresco:animated-gif:0.12.0'

    compile 'com.squareup.okhttp:okhttp:2.3.0'
    compile 'com.squareup.okhttp:okhttp-ws:2.3.0'
    compile 'com.squareup.okio:okio:1.0.1'
    compile "com.alibaba:fastjson:${project.fastjsonLibVersion}"
    compile "com.android.support:support-v4:${project.supportLibVersion}"
    compile "com.android.support:appcompat-v7:${project.supportLibVersion}"
    compile "com.android.support:design:${project.supportLibVersion}"
    compile "com.android.support:support-annotations:${project.supportLibVersion}"
    compile 'com.jakewharton.scalpel:scalpel:1.1.2'
    compile 'com.taobao.android.weex_inspection:urlconnection_interceptor:1.0.0'
    compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'
    compile 'com.taobao.android:weex_inspector:0.11.0'
}