/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import static android.support.dependencies.DependenciesKt.*

plugins {
    id("SupportAndroidTestAppPlugin")
}

project.ext.noDocs = true

android {
    buildTypes {
        getByName("release") {
            minifyEnabled = true
            proguardFiles("proguard-rules.pro")
        }
    }
}

dependencies {
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    compile project(':arch:runtime')
    compile project(':arch:common')
    compile project(':work:work-runtime')
    compile project(':work:work-firebase')
    compile project(':lifecycle:extensions')
    compile project(':lifecycle:runtime')
    compile project(':lifecycle:common')
    compile project(':room:runtime')
    annotationProcessor project(":room:compiler")
    compile(MULTIDEX)
    compile(SUPPORT_RECYCLERVIEW, libs.support_exclude_config)
    compile(SUPPORT_APPCOMPAT, libs.support_exclude_config)
    compile(SUPPORT_DESIGN, libs.support_exclude_config)
}

tasks['check'].dependsOn(tasks['connectedCheck'])

uploadArchives.enabled = false
