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

207 lines
6.3 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 'kotlinx-serialization'
id 'jacoco'
id 'dagger.hilt.android.plugin'
alias(libs.plugins.protobuf)
alias(libs.plugins.ksp)
}
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
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-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)
}
)
}
}
// Setup protobuf configuration, generating lite Java and Kotlin classes
protobuf {
protoc {
artifact = libs.protobuf.protoc.get()
}
generateProtoTasks {
all().each { task ->
task.builtins {
java {
option "lite"
}
kotlin {
option "lite"
}
}
}
}
}
dependencies {
coreLibraryDesugaring libs.android.desugarJdkLibs
implementation libs.kotlinx.coroutines.android
implementation libs.kotlinx.datetime
implementation libs.kotlinx.serialization.json
implementation libs.androidx.activity.compose
implementation libs.androidx.core.ktx
implementation libs.androidx.dataStore
implementation libs.androidx.appcompat
implementation libs.androidx.hilt.navigation.compose
implementation libs.androidx.lifecycle.viewModelCompose
implementation libs.androidx.navigation.compose
implementation libs.material3
implementation libs.accompanist.flowlayout
implementation libs.androidx.compose.foundation.layout
// TODO (M3): Remove this dependency when all components are available
implementation libs.androidx.compose.material
implementation libs.androidx.compose.material.iconsExtended
implementation libs.androidx.compose.material3
implementation libs.androidx.compose.ui.tooling
implementation libs.androidx.compose.ui.util
implementation libs.androidx.compose.runtime
implementation libs.androidx.compose.runtime.livedata
implementation libs.hilt.android
kapt libs.hilt.compiler
implementation libs.room.runtime
implementation libs.room.ktx
ksp libs.room.compiler
implementation libs.protobuf.kotlin.lite
debugImplementation libs.androidx.compose.ui.testManifest
testImplementation libs.junit4
testImplementation libs.mockk
testImplementation libs.androidx.test.core
testImplementation libs.kotlinx.coroutines.test
testImplementation libs.turbine
androidTestImplementation libs.androidx.test.espresso.core
androidTestImplementation libs.androidx.test.runner
androidTestImplementation libs.androidx.test.rules
androidTestImplementation libs.androidx.compose.ui.test
// androidx.test is forcing JUnit, 4.12. This forces it to use 4.13
configurations.configureEach {
resolutionStrategy {
force libs.junit4
}
}
}
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.*"]
}
}