| apply plugin: 'com.github.ben-manes.versions' |
| |
| buildscript { |
| ext.versions = [ |
| 'minSdk': 14, |
| 'compileSdk': 29, |
| 'errorProne': '2.3.1', |
| // We would like to use Kotlin 1.4 language features but keep Kotlin 1.3 library APIs |
| // The benefit is that depending clients do not have to upgrade to Kotlin 1.4 |
| 'kotlinCompiler': '1.4.10', |
| 'kotlinLib': '1.3.72', |
| ] |
| ext.deps = [ |
| assertj_core: 'org.assertj:assertj-core:3.9.1', |
| // We don't need the latest version of AndroidX (there are no bugs that impact what LeakCanary |
| // relies on), we're sticking a bit older because most apps will be using a more recent version |
| // and they'll automatically resolve to higher version without having to necessarily resort to a |
| // resolution strategy. |
| androidGradlePlugin: "com.android.tools.build:gradle:4.0.0", |
| androidx: [ |
| annotation: 'androidx.annotation:annotation:1.0.2', |
| core: 'androidx.core:core:1.0.1', |
| fragment: 'androidx.fragment:fragment:1.0.0', |
| test: [ |
| core: 'androidx.test:core:1.0.0', |
| espresso: 'androidx.test.espresso:espresso-core:3.1.0', |
| rules: 'androidx.test:rules:1.1.0', |
| runner: 'androidx.test:runner:1.1.0', |
| orchestrator: 'androidx.test:orchestrator:1.1.0', |
| ], |
| ], |
| android_support: 'com.android.support:support-v4:28.0.0', |
| clikt: 'com.github.ajalt:clikt:2.3.0', |
| jline: 'jline:jline:2.14.6', |
| detekt: 'io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.6.0', |
| junit: 'junit:junit:4.12', |
| kotlin: [ |
| binaryCompatibilityValidatorPlugin: "org.jetbrains.kotlinx:binary-compatibility-validator:0.2.3", |
| gradlePlugin: "org.jetbrains.kotlin:kotlin-gradle-plugin:${versions.kotlinCompiler}", |
| stdlib: "org.jetbrains.kotlin:kotlin-stdlib:${versions.kotlinLib}", |
| reflect: "org.jetbrains.kotlin:kotlin-reflect:${versions.kotlinLib}" |
| ], |
| kotlin_statistics: 'org.nield:kotlin-statistics:1.2.1', |
| mockito: 'org.mockito:mockito-core:3.5.10', |
| mockito_kotlin: 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0', |
| okio: 'com.squareup.okio:okio:2.2.2', |
| okio_1x: 'com.squareup.okio:okio:1.14.0', |
| robolectric: 'org.robolectric:robolectric:4.0-alpha-3', |
| ] |
| repositories { |
| google() |
| maven { url 'https://plugins.gradle.org/m2/' } |
| jcenter() |
| // For binary compatibility validator. |
| maven { url "https://kotlin.bintray.com/kotlinx" } |
| } |
| dependencies { |
| classpath deps.kotlin.gradlePlugin |
| classpath deps.androidGradlePlugin |
| classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.16' |
| classpath 'com.github.ben-manes:gradle-versions-plugin:0.20.0' |
| classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.18" |
| classpath deps.detekt |
| classpath deps.kotlin.binaryCompatibilityValidatorPlugin |
| } |
| } |
| |
| // We use JetBrain's Kotlin Binary Compatibility Validator to track changes to our public binary |
| // APIs. |
| // When making a change that results in a public ABI change, the apiCheck task will fail. When this |
| // happens, run ./gradlew apiDump to generate updated *.api files, and add those to your commit. |
| // See https://github.com/Kotlin/binary-compatibility-validator |
| apply plugin: 'binary-compatibility-validator' |
| |
| apiValidation { |
| // Ignore all sample projects, since they're not part of our API. |
| ignoredProjects += ["leakcanary-android-sample"] |
| } |
| |
| subprojects { |
| group = GROUP |
| version = VERSION_NAME |
| |
| repositories { |
| google() |
| // maven { |
| // url 'https://oss.sonatype.org/content/repositories/snapshots/' |
| // } |
| // mavenLocal() |
| jcenter() |
| } |
| |
| apply plugin: 'net.ltgt.errorprone' |
| apply plugin: 'org.jetbrains.dokka' |
| apply plugin: 'io.gitlab.arturbosch.detekt' |
| |
| dokka { |
| reportUndocumented = false |
| // BuildConfig files |
| packageOptions { |
| prefix = "com.squareup.leakcanary" |
| suppress = true |
| } |
| packageOptions { |
| prefix = "shark.internal" |
| suppress = true |
| } |
| packageOptions { |
| prefix = "leakcanary.internal" |
| suppress = true |
| } |
| outputFormat = 'gfm' |
| outputDirectory = "$rootDir/docs/api" |
| } |
| |
| tasks.withType(JavaCompile) { |
| options.compilerArgs += [ |
| '-Xlint:all', |
| '-Xlint:-serial', |
| '-Xlint:-deprecation', |
| // espresso-core classes say they're compiled with 51.0 but contain 52.0 attributes. |
| // warning: [classfile] MethodParameters attribute introduced in version 52.0 class files is ignored in version 51.0 class files |
| // '-Werror' |
| ] |
| } |
| |
| tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { |
| kotlinOptions { |
| // Avoid warnings of using older stdlib version 1.3 than compiler version 1.4 |
| apiVersion = "1.3" |
| } |
| } |
| |
| |
| configurations.all { |
| resolutionStrategy { |
| eachDependency { details -> |
| // Force all the error-prone dependencies to use the same version. |
| if (details.requested.group == 'com.google.errorprone' && |
| details.requested.name.startsWith('error_prone_')) { |
| details.useVersion versions.errorProne |
| } |
| } |
| } |
| } |
| |
| tasks.withType(Test) { |
| testLogging { |
| exceptionFormat 'FULL' |
| showCauses true |
| showExceptions true |
| showStackTraces true |
| } |
| } |
| |
| detekt { |
| config = rootProject.files('detekt-config.yml') |
| parallel = true |
| reports { |
| xml.enabled = false |
| } |
| } |
| |
| afterEvaluate { |
| tasks.getByName('check').dependsOn 'detekt' |
| tasks.getByName('assemble').dependsOn installGitHooks |
| tasks.getByName('clean').dependsOn installGitHooks |
| } |
| |
| dependencies { |
| errorprone "com.google.errorprone:error_prone_core:${versions.errorProne}" |
| } |
| } |
| |
| //Copies git hooks from /hooks folder into .git; currently used to run Detekt during push |
| //Git hook installation |
| task installGitHooks(type: Copy) { |
| from new File(rootProject.rootDir, 'hooks') |
| into { new File(rootProject.rootDir, '.git/hooks') } |
| fileMode 0777 //Make files executable |
| } |