// NOTE: The only changes that belong in this file are the definitions
// of tool versions (gradle plugin, compile SDK, build tools), so that
// Volley can be built via gradle as a standalone project.
//
// Any other changes to the build config belong in rules.gradle, which
// is used by projects that depend on Volley but define their own
// tools versions across all dependencies to ensure a consistent build.
//
// Most users should just add this line to settings.gradle:
//     include(":volley")
//
// If you have a more complicated Gradle setup you can choose to use
// this instead:
//     include(":volley")
//     project(':volley').buildFileName = 'rules.gradle'

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

plugins {
    id "com.github.sherter.google-java-format" version "0.6"
    id "net.ltgt.errorprone" version "0.0.13"
}

googleJavaFormat {
    toolVersion = '1.5'
    options style: 'AOSP'
}

apply plugin: 'com.android.library'

repositories {
    jcenter()
    google()
}

group = 'com.android.volley'
version = '1.2.0-SNAPSHOT'

android {
    compileSdkVersion 28
    buildToolsVersion = '28.0.3'

    defaultConfig {
        // Keep in sync with src/main/AndroidManifest.xml
        minSdkVersion 8
    }
}

tasks.withType(JavaCompile) {
    options.compilerArgs << "-Xep:ParameterComment:ERROR"
}

apply from: 'rules.gradle'
apply from: 'bintray.gradle'
