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