app/build.gradle
apply plugin: 'com.android.application'
apply plugin: 'jacoco'
jacoco {
toolVersion = "0.8.0"
}
android {
compileSdkVersion 28
defaultConfig {
applicationId "ch.epfl.sweng.erpa"
minSdkVersion 22
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = ['toothpick_registry_package_name': 'ch.epfl.sweng.erpa.smoothie']
}
}
}
buildTypes {
debug {
testCoverageEnabled true
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
disable 'InvalidPackage' // Toothpick runtime includes references to javax.inject which have
// runtime retention even if they're not used since we use registries
// for injection instead of reflection.
}
dataBinding {
enabled = true
}
}
allprojects {
tasks.withType(Test) {
testLogging {
exceptionFormat "full"
showCauses true
showExceptions true
showStackTraces true
showStandardStreams true
events = ["passed", "skipped", "failed", "standardOut", "standardError"]
}
}
}
configurations {
implementation.exclude module: 'com.android.tools.external.lombok'
all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '28.0.0'
}
}
}
}
}
repositories {
jcenter()
}
ext {
depVersionAndroidTest = "1.0.2"
depVersionAndroidWearable = "2.1.0" // needed to fix the version for processing
depVersionAnnimonStream = "1.1.4"
depVersionAppcompat = "28.0.0"
depVersionBcrypt = "0.5.0"
depVersionButterknife = "8.8.1"
depVersionCryptoEddsa = "0.3.0"
depVersionDexmaker = "2.19.1"
depVersionEspresso = "3.0.2"
depVersionGuava = "27.0.1-android"
depVersionJargon2 = "1.1.1"
depVersionJhash = "2.1.0"
depVersionJunit = "4.12"
depVersionLombok = "1.16.20" // github.com/rzwitserloot/lombok/issues/1727
depVersionMockito = "2.22.0"
depVersionPowermock = "1.7.4"
depVersionRetroLambda = "3.2.5"
depVersionRetrofit = "2.4.0"
depVersionRetrolambdaLombokAst = "0.2.3.a2"
depVersionSnakeYaml = "1.23"
depVersionToothpick = "1.1.3"
depVersionProcessing = "4.0.3"
}
dependencies {
implementation "com.android.support:appcompat-v7:${depVersionAppcompat}"
implementation "com.android.support:cardview-v7:${depVersionAppcompat}"
implementation "com.android.support:design:${depVersionAppcompat}"
implementation "com.android.support:recyclerview-v7:${depVersionAppcompat}"
compileOnly "com.google.android.wearable:wearable:${depVersionAndroidWearable}"
androidTestAnnotationProcessor "org.projectlombok:lombok:${depVersionLombok}"
androidTestCompileOnly "org.projectlombok:lombok:${depVersionLombok}"
androidTestImplementation "com.android.support.test.espresso:espresso-contrib:${depVersionEspresso}"
androidTestImplementation "com.android.support.test.espresso:espresso-core:${depVersionEspresso}"
androidTestImplementation "com.android.support.test.espresso:espresso-intents:${depVersionEspresso}"
androidTestImplementation "com.android.support.test:rules:${depVersionAndroidTest}"
androidTestImplementation "com.android.support.test:runner:${depVersionAndroidTest}"
androidTestImplementation "org.mockito:mockito-android:${depVersionMockito}"
annotationProcessor "com.github.stephanenicolas.toothpick:toothpick-compiler:${depVersionToothpick}"
annotationProcessor "com.jakewharton:butterknife-compiler:${depVersionButterknife}"
annotationProcessor "org.projectlombok:lombok:${depVersionLombok}"
compileOnly "org.projectlombok:lombok:${depVersionLombok}"
implementation "at.favre.lib:bcrypt:${depVersionBcrypt}"
implementation "com.amdelamar:jhash:${depVersionJhash}"
implementation "com.android.support.constraint:constraint-layout:${depVersionToothpick}"
implementation "com.annimon:stream:${depVersionAnnimonStream}"
implementation "com.github.stephanenicolas.toothpick:smoothie:${depVersionToothpick}"
implementation "com.github.stephanenicolas.toothpick:toothpick-runtime:${depVersionToothpick}"
implementation "com.google.guava:guava:${depVersionGuava}"
implementation "com.jakewharton:butterknife:${depVersionButterknife}"
implementation "com.kosprov.jargon2:jargon2-api:${depVersionJargon2}"
implementation "com.kosprov.jargon2:jargon2-api:${depVersionJargon2}"
implementation "com.kosprov.jargon2:jargon2-native-ri-backend:${depVersionJargon2}"
implementation "com.kosprov.jargon2:jargon2-native-ri-backend:${depVersionJargon2}"
implementation "com.linkedin.dexmaker:dexmaker:${depVersionDexmaker}"
implementation "com.squareup.retrofit2:converter-scalars:${depVersionRetrofit}"
implementation "com.squareup.retrofit2:converter-gson:${depVersionRetrofit}"
implementation "com.squareup.retrofit2:retrofit:${depVersionRetrofit}"
implementation "net.i2p.crypto:eddsa:${depVersionCryptoEddsa}"
implementation "me.tatarka.retrolambda.projectlombok:lombok.ast:${depVersionRetrolambdaLombokAst}"
implementation "me.tatarka:gradle-retrolambda:${depVersionRetroLambda}"
implementation "org.p5android:processing-core:${depVersionProcessing}"
implementation "org.yaml:snakeyaml:${depVersionSnakeYaml}"
testAnnotationProcessor "com.github.stephanenicolas.toothpick:toothpick-compiler:${depVersionToothpick}"
testImplementation "com.github.stephanenicolas.toothpick:toothpick-testing:${depVersionToothpick}"
testImplementation "junit:junit:${depVersionJunit}"
testImplementation "org.powermock:powermock-api-mockito2:${depVersionPowermock}"
testImplementation("org.powermock:powermock-core:${depVersionPowermock}"){
exclude group: 'org.hamcrest'
}
testImplementation "org.powermock:powermock-module-junit4:${depVersionPowermock}"
}
tasks.withType(Test) {
jacoco.includeNoLocationClasses = true
}
task jacocoTestReport(type: JacocoReport, dependsOn: ['testDebugUnitTest', 'createDebugCoverageReport']) {
reports {
xml.enabled = true
html.enabled = true
}
def jacocoExcludedClasses = [
// Tests classes
'**/*Test*.*',
// Android autogenerated classes
'**/BuildConfig.*', '**/Manifest*.*', '**/R$*.class', '**/R.class', 'android/**/*.*',
// Toothpick autogenerated classes
'**/*$$Factory.class', '**/*$$MemberInjector.class', '**/smoothie/*.class',
// Butterknife autogenerated classes
'**/*_ViewBinding*.class',
// Jargon autogenerated classes
'**/BR.class', '**/databinding/*.class', '**/DataBinder*.class',
// Processing sketches, OpenGL activities
'**/sketches/*.class', '**/DiceActivity*.class'
]
def debugClassesPath = "$project.buildDir/intermediates/javac/debug/compileDebugJavaWithJavac/classes/ch/epfl/sweng/erpa"
def debugTree = fileTree(dir: debugClassesPath, excludes: jacocoExcludedClasses)
def mainSrc = "$project.projectDir/src/main/java"
sourceDirectories = files([mainSrc])
classDirectories = files([debugTree])
executionData = fileTree(dir: project.buildDir, includes: [
'jacoco/testDebugUnitTest.exec', 'outputs/code-coverage/connected/*coverage.ec'
])
}