/* * Copyright 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' id 'jacoco' id 'dagger.hilt.android.plugin' } def jacocoTestReport = tasks.create("jacocoTestReport") android { compileSdk buildConfig.compileSdk defaultConfig { applicationId "com.google.samples.apps.nowinandroid" minSdk buildConfig.minSdk targetSdk buildConfig.targetSdk versionCode 1 versionName "0.0.1" // X.Y.Z; X = Major, Y = minor, Z = Patch level // Custom test runner to set up Hilt dependency graph testInstrumentationRunner "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner" vectorDrawables { useSupportLibrary true } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } benchmark { initWith buildTypes.release signingConfig signingConfigs.debug matchingFallbacks = ['release'] proguardFiles 'benchmark-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 coreLibraryDesugaringEnabled true } kotlinOptions { jvmTarget = '1.8' useIR = true } buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion libs.versions.androidxCompose.get() } packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } testOptions { unitTests { includeAndroidResources = true } } androidComponents { def coverageExclusions = [ // Android "**/R.class", "**/R\$*.class", "**/BuildConfig.*", "**/Manifest*.*" ] onVariants( selector().all(), { variant -> def testTaskName = "test${variant.name.capitalize()}UnitTest" def reportTask = tasks.register("jacoco${testTaskName.capitalize()}Report", JacocoReport) { dependsOn(testTaskName) reports { xml.required.set(true) html.required.set(true) } classDirectories.setFrom( fileTree("$buildDir/tmp/kotlin-classes/${variant.name}") { exclude(coverageExclusions) } ) sourceDirectories.setFrom(files("$projectDir/src/main/java", "$projectDir/src/main/kotlin")) executionData.setFrom(file("$buildDir/jacoco/${testTaskName}.exec")) } jacocoTestReport.dependsOn(reportTask) } ) } } dependencies { implementation project(':feature-following') implementation project(':feature-foryou') implementation project(':core-ui') androidTestImplementation project(':core-testing') androidTestImplementation project(':core-datastore-test') coreLibraryDesugaring libs.android.desugarJdkLibs implementation libs.androidx.activity.compose implementation libs.androidx.appcompat implementation libs.androidx.core.ktx implementation libs.androidx.compose.material.window implementation libs.androidx.hilt.navigation.compose implementation libs.androidx.navigation.compose implementation libs.androidx.window.manager implementation libs.material3 implementation libs.androidx.profileinstaller implementation libs.hilt.android kapt libs.hilt.compiler kaptAndroidTest libs.hilt.compiler // androidx.test is forcing JUnit, 4.12. This forces it to use 4.13 configurations.configureEach { resolutionStrategy { force libs.junit4 // Temporary workaround for https://issuetracker.google.com/174733673 force 'org.objenesis:objenesis:2.6' } } } jacoco { toolVersion libs.versions.jacoco.get() } tasks.withType(Test) { jacoco { // Required for JaCoCo + Robolectric // https://github.com/robolectric/robolectric/issues/2230 // TODO: Consider removing if not we don't add Robolectric setIncludeNoLocationClasses(true) // Required for JDK 11+ with the above // https://github.com/gradle/gradle/issues/5184#issuecomment-391982009 excludes = ["jdk.internal.*"] } }