plugins {
  id("com.android.application")
  id("org.jetbrains.kotlin.android")
  // Required to run obfuscated instrumentation tests:
  // ./gradlew leakcanary-android-sample:connectedCheck -Pminify
  id("com.slack.keeper")
}

keeper {
  variantFilter {
    setIgnore(!project.hasProperty('minify'))
  }
}

dependencies {
  debugImplementation projects.leakcanary.leakcanaryAndroid
  debugImplementation projects.leakcanary.leakcanaryAppService
  // debugImplementation projects.leakcanary.leakcanaryAndroidStartup

  // Uncomment to use the :leakcanary process
  // debugImplementation projects.leakcanary.leakcanaryAndroidProcess
  releaseImplementation projects.leakcanary.leakcanaryAndroidRelease
  // Optional
  releaseImplementation projects.objectWatcher.objectWatcherAndroid

  implementation libs.kotlin.stdlib
  // Uncomment to use WorkManager
  // implementation libs.androidX.work.runtime

  testImplementation libs.junit
  testImplementation libs.robolectric

  androidTestImplementation projects.leakcanary.leakcanaryAndroidInstrumentation
  androidTestImplementation libs.androidX.test.espresso
  androidTestImplementation libs.androidX.test.rules
  androidTestImplementation libs.androidX.test.runner
  androidTestImplementation libs.androidX.test.junit
  androidTestImplementation libs.androidX.test.junitKtx
  androidTestUtil libs.androidX.test.orchestrator
}

android {
  compileSdk versions.compileSdk

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }

  defaultConfig {
    applicationId "com.example.leakcanary"
    minSdk 16
    targetSdk versions.compileSdk

    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    // Run ./gradlew leakcanary-android-sample:connectedCheck -Porchestrator
    if (project.hasProperty('orchestrator')) {
      testInstrumentationRunnerArguments clearPackageData: 'true'
      testOptions {
        execution 'ANDROIDX_TEST_ORCHESTRATOR'
      }
    }
  }

  buildTypes {
    // Build with ./gradlew leakcanary-android-sample:installDebug -Pminify
    if (project.hasProperty('minify')) {
      debug {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
      }
    } else {
      debug
    }
    release {
      signingConfig signingConfigs.debug
    }
  }

  dexOptions {
    dexInProcess false
  }

  testOptions {
    unitTests {
      includeAndroidResources = true
    }
  }
  namespace 'com.example.leakcanary'
  testNamespace 'com.squareup.leakcanary.instrumentation.test'
  lint {
    disable 'GoogleAppIndexingWarning'
  }
}
