import io.deepmedia.tools.publisher.common.License import io.deepmedia.tools.publisher.common.Release import io.deepmedia.tools.publisher.common.GithubScm plugins { id("com.android.library") id("kotlin-android") id("io.deepmedia.tools.publisher") id("jacoco") } android { compileSdk = property("compileSdkVersion") as Int defaultConfig { minSdk = property("minSdkVersion") as Int targetSdk = property("targetSdkVersion") as Int testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments["filter"] = "" + "com.otaliastudios.cameraview.tools.SdkExcludeFilter," + "com.otaliastudios.cameraview.tools.SdkIncludeFilter" } buildTypes["debug"].isTestCoverageEnabled = true buildTypes["release"].isMinifyEnabled = false } dependencies { testImplementation("junit:junit:4.13.1") testImplementation("org.mockito:mockito-inline:2.28.2") androidTestImplementation("androidx.test:runner:1.4.0") androidTestImplementation("androidx.test:rules:1.4.0") androidTestImplementation("androidx.test.ext:junit:1.1.3") androidTestImplementation("org.mockito:mockito-android:2.28.2") androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") api("androidx.exifinterface:exifinterface:1.3.3") api("androidx.lifecycle:lifecycle-common:2.3.1") api("com.google.android.gms:play-services-tasks:17.2.1") implementation("androidx.annotation:annotation:1.2.0") implementation("com.otaliastudios.opengl:egloo:0.6.1") } // Publishing publisher { project.description = "A well documented, high-level Android interface that makes capturing " + "pictures and videos easy, addressing all of the common issues and needs. " + "Real-time filters, gestures, watermarks, frame processing, RAW, output of any size." project.artifact = "cameraview" project.group = "com.otaliastudios" project.url = "https://github.com/natario1/CameraView" project.scm = GithubScm("natario1", "CameraView") project.addLicense(License.APACHE_2_0) project.addDeveloper("natario1", "mat.iavarone@gmail.com") release.sources = Release.SOURCES_AUTO release.docs = Release.DOCS_AUTO release.version = "2.7.2" directory() sonatype { auth.user = "SONATYPE_USER" auth.password = "SONATYPE_PASSWORD" signing.key = "SIGNING_KEY" signing.password = "SIGNING_PASSWORD" } sonatype("snapshot") { repository = io.deepmedia.tools.publisher.sonatype.Sonatype.OSSRH_SNAPSHOT_1 release.version = "latest-SNAPSHOT" auth.user = "SONATYPE_USER" auth.password = "SONATYPE_PASSWORD" signing.key = "SIGNING_KEY" signing.password = "SIGNING_PASSWORD" } } // Code Coverage val buildDir = project.buildDir.absolutePath val coverageInputDir = "$buildDir/coverage_input" // changing? change github workflow val coverageOutputDir = "$buildDir/coverage_output" // changing? change github workflow // Run unit tests, with coverage enabled in the android { } configuration. // Output will be an .exec file in build/jacoco. tasks.register("runUnitTests") { // changing name? change github workflow dependsOn("testDebugUnitTest") doLast { copy { from("$buildDir/outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec") into("$coverageInputDir/unit_tests") // changing? change github workflow } } } // Run android tests with coverage. tasks.register("runAndroidTests") { // changing name? change github workflow dependsOn("connectedDebugAndroidTest") doLast { copy { from("$buildDir/outputs/code_coverage/debugAndroidTest/connected") include("*coverage.ec") into("$coverageInputDir/android_tests") // changing? change github workflow } } } // Merge the two with a jacoco task. jacoco { toolVersion = "0.8.5" } tasks.register("computeCoverage", JacocoReport::class) { dependsOn("compileDebugSources") // Compile sources, needed below executionData.from(fileTree(coverageInputDir)) sourceDirectories.from(android.sourceSets["main"].java.srcDirs) additionalSourceDirs.from("$buildDir/generated/source/buildConfig/debug") additionalSourceDirs.from("$buildDir/generated/source/r/debug") classDirectories.from(fileTree("$buildDir/intermediates/javac/debug") { // Not everything here is relevant for CameraView, but let's keep it generic exclude( "**/R.class", "**/R$*.class", "**/BuildConfig.*", "**/Manifest*.*", "android/**", "androidx/**", "com/google/**", "**/*\$ViewInjector*.*", "**/Dagger*Component.class", "**/Dagger*Component\$Builder.class", "**/*Module_*Factory.class", // We don"t test OpenGL filters. "**/com/otaliastudios/cameraview/filters/**.*" ) }) reports.html.required.set(true) reports.xml.required.set(true) reports.html.outputLocation.set(file("$coverageOutputDir/html")) reports.xml.outputLocation.set(file("$coverageOutputDir/xml/report.xml")) }