1238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas/* 2526389b5eb93f99eaf4dba0b0c75b0b7df9a0f65Aurimas Liutikas * Copyright 2018 The Android Open Source Project 3238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * 4238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * Licensed under the Apache License, Version 2.0 (the "License"); 5238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * you may not use this file except in compliance with the License. 6238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * You may obtain a copy of the License at 7238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * 8238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * http://www.apache.org/licenses/LICENSE-2.0 9238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * 10238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * Unless required by applicable law or agreed to in writing, software 11238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * distributed under the License is distributed on an "AS IS" BASIS, 12238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * See the License for the specific language governing permissions and 14238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * limitations under the License. 15238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas */ 16238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 17526389b5eb93f99eaf4dba0b0c75b0b7df9a0f65Aurimas Liutikaspackage androidx.build 18238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 19526389b5eb93f99eaf4dba0b0c75b0b7df9a0f65Aurimas Liutikasimport androidx.build.SupportConfig.INSTRUMENTATION_RUNNER 20526389b5eb93f99eaf4dba0b0c75b0b7df9a0f65Aurimas Liutikasimport androidx.build.license.CheckExternalDependencyLicensesTask 21238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikasimport com.android.build.gradle.AppExtension 22a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyarimport net.ltgt.gradle.errorprone.ErrorProneBasePlugin 23a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyarimport net.ltgt.gradle.errorprone.ErrorProneToolChain 24238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikasimport org.gradle.api.JavaVersion 25238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikasimport org.gradle.api.Plugin 26238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikasimport org.gradle.api.Project 27a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyarimport org.gradle.api.tasks.compile.JavaCompile 28238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 29238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas/** 30238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * Support library specific com.android.application plugin that sets common configurations needed 31238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas * for support library test apps. 32238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas */ 33238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikasclass SupportAndroidTestAppPlugin : Plugin<Project> { 34238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas override fun apply(project: Project) { 35238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas val testAppExtension = project.extensions.create("supportTestApp", 36238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas SupportAndroidTestAppExtension::class.java, project) 37c62cb5335923b041b7cd64cc879f9b0b889f457cYigit Boyar CheckExternalDependencyLicensesTask.configure(project) 38238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas project.afterEvaluate { 39238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas val application = project.extensions.findByType(AppExtension::class.java) 40238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas ?: throw Exception("Failed to find Android extension") 41238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.defaultConfig.minSdkVersion(testAppExtension.minSdkVersion) 42238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas } 43238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 44238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas project.apply(mapOf("plugin" to "com.android.application")) 45a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar project.apply(mapOf("plugin" to ErrorProneBasePlugin::class.java)) 46238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 47238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas val application = project.extensions.findByType(AppExtension::class.java) 48238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas ?: throw Exception("Failed to find Android extension") 49238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 503196ef11607745931934a61db2a53e081479c546Aurimas Liutikas application.compileSdkVersion(SupportConfig.CURRENT_SDK_VERSION) 513196ef11607745931934a61db2a53e081479c546Aurimas Liutikas application.defaultConfig.targetSdkVersion(SupportConfig.CURRENT_SDK_VERSION) 52238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 533196ef11607745931934a61db2a53e081479c546Aurimas Liutikas application.buildToolsVersion = SupportConfig.BUILD_TOOLS_VERSION 54238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 55238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.defaultConfig.versionCode = 1 56238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.defaultConfig.versionName = "1.0" 57238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 58238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.compileOptions.setSourceCompatibility(JavaVersion.VERSION_1_8) 59238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.compileOptions.setTargetCompatibility(JavaVersion.VERSION_1_8) 60238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 61238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.defaultConfig.testInstrumentationRunner = INSTRUMENTATION_RUNNER 62238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.testOptions.unitTests.isReturnDefaultValues = true 63238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 64238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas // Use a local debug keystore to avoid build server issues. 65238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.signingConfigs.findByName("debug")?.storeFile = 66238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas SupportConfig.getKeystore(project) 67238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas 68238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.lintOptions.isAbortOnError = true 69238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas val baseline = SupportConfig.getLintBaseline(project) 70238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas if (baseline.exists()) { 71238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas application.lintOptions.baseline(baseline) 72238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas } 73a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar 74a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar val toolChain = ErrorProneToolChain.create(project) 757fb397e5700a91aba458df7f45b047ec00495b66Jake Wharton project.dependencies.add("errorprone", ERROR_PRONE_VERSION) 76a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar 77a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar project.afterEvaluate { 78a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar if (testAppExtension.enableErrorProne) { 79a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar project.tasks.forEach { 80a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar (it as? JavaCompile)?.configureWithErrorProne(toolChain) 81a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar } 82a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar } 83a1094b313baec4bfc36554b644c362fa5708fdc6Yigit Boyar } 84238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas } 85238e480cfb27b1afd3755dbeae4a084197cc0559Aurimas Liutikas}