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}