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

apply plugin: 'com.android.application'

android {
    compileSdkVersion project.compileSdkVersion
    defaultConfig {
        applicationId "com.alibaba.weex"
        minSdkVersion project.minSdkVersion
        targetSdkVersion project.targetSdkVersion
        versionCode 20
        versionName "0.20.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        ndk{
            abiFilters "arm64-v8a", "armeabi-v7a", "x86"
        }
        if(!getBuildConfigFields()?.containsKey('externalLibraryName')) {
            buildConfigField "String", "externalLibraryName", "\"\""
        }
    }
    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 {
            jniDebuggable true
            debuggable true
        }
    }
    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
    }
    aaptOptions {
        noCompress 'wasm'
    }
}


dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation "com.android.support:support-annotations:${project.supportLibVersion}"
    androidTestImplementation 'junit:junit:4.12'
    androidTestImplementation 'org.awaitility:awaitility:3.0.0'
    androidTestImplementation 'org.awaitility:awaitility-proxy:3.0.0'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
    androidTestImplementation('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'
    })
    androidTestImplementation 'com.android.support.test:runner:0.5'
    androidTestImplementation 'com.squareup.picasso:picasso:2.5.2'
    androidTestImplementation 'org.hamcrest:hamcrest-library:1.3'
    androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
    /*source dependency*/

    implementation project(':commons')
 //   implementation project(':HeronAndroid')
    //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
    debugImplementation 'com.taobao.android:weex_analyzer:0.1.0.5'


    implementation 'com.loopj.android:android-async-http:1.4.9@aar'
    implementation 'com.facebook.fresco:fresco:0.12.0+'
    implementation 'com.facebook.fresco:animated-gif:0.12.0'

    implementation 'com.google.zxing:core:3.3.3'

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

    // Bind actions to effects. See https://alibaba.github.io/bindingx/
    implementation 'com.alibaba.android:bindingx-core:1.1.1.2@aar'
    implementation 'com.alibaba.android:bindingx_weex_plugin:1.1.1@aar'

    if(project.implementFromWeex){
        implementation project(':weex_sdk')
    }
    else {
        implementation "com.taobao.android:weex_sdk:${project.weexSdkVersion}@aar"
    }
}

if(file('../license/LICENSE').exists()){
    license {
        header = file('../license/LICENSE')
        excludes(["com/google/zxing/**/*.java","**/*.xml"])
    }
    preBuild.dependsOn licenseFormat
}
