plugins {
    id "com.github.hierynomus.license" version "0.14.0"
}

apply plugin: 'com.android.library'

android {

    publishNonDefault  true
    compileSdkVersion project.compileSdkVersion
    buildToolsVersion project.buildToolsVersion
    resourcePrefix "weexcomm"

    defaultConfig {
        minSdkVersion project.minSdkVersion
        targetSdkVersion project.targetSdkVersion
        versionCode 1
        versionName "1.0"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    lintOptions {
          abortOnError false
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

        debug {
            jniDebuggable true
            debuggable true

        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "com.android.support:support-v4:${project.supportLibVersion}"
    compile "com.android.support:appcompat-v7:${project.supportLibVersion}"
    // compile project(':weex_sdk')
    debugCompile project(path: ':weex_sdk', configuration: 'debug')
    releaseCompile project(path: ':weex_sdk', configuration: 'release')
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.facebook.fresco:fresco:0.10.0'
    compile 'com.taobao.android.weex_inspection:protocol:1.1.4.1'

    provided 'com.taobao.android:weex_analyzer:0.1.0.5'
    provided 'com.squareup.okhttp:okhttp:2.3.0'
    provided 'com.squareup.okhttp:okhttp-ws:2.3.0'
    provided "com.alibaba:fastjson:${project.fastjsonLibVersion}"

    testCompile 'junit:junit:4.12'
    testCompile 'org.hamcrest:hamcrest-core:1.3'
    testCompile 'org.javassist:javassist:3.20.0-GA'
    testCompile 'org.mockito:mockito-core:1.10.19'
    testCompile 'org.objenesis:objenesis:2.1'
    testCompile 'org.powermock:powermock-core:1.6.4'
    testCompile 'org.powermock:powermock-api-mockito:1.6.4'
    testCompile 'org.powermock:powermock-module-junit4-common:1.6.4'
    testCompile 'org.powermock:powermock-module-junit4:1.6.4'
    testCompile 'org.powermock:powermock-module-junit4-legacy:1.6.4'
    testCompile 'org.powermock:powermock-module-testng:1.6.4'
    testCompile 'org.robolectric:robolectric:3.0-rc3'
}

if(file('../license/LICENSE').exists()){
    license {
        header = file('../license/LICENSE')
    }
    preBuild.dependsOn licenseFormat
}