You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nowinandroid/app/build.gradle

169 lines
5.2 KiB

/*
* 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.*"]
}
}