|
|
|
import com.otaliastudios.tools.publisher.common.License
|
|
|
|
import com.otaliastudios.tools.publisher.common.Release
|
|
|
|
|
|
|
|
plugins {
|
|
|
|
id("com.android.library")
|
|
|
|
id("kotlin-android")
|
|
|
|
id("com.otaliastudios.tools.publisher")
|
|
|
|
id("jacoco")
|
|
|
|
}
|
|
|
|
|
|
|
|
android {
|
|
|
|
setCompileSdkVersion(rootProject.property("compileSdkVersion") as Int)
|
|
|
|
defaultConfig {
|
|
|
|
setMinSdkVersion(rootProject.property("minSdkVersion") as Int)
|
|
|
|
setTargetSdkVersion(rootProject.property("targetSdkVersion") as Int)
|
|
|
|
versionCode = 1
|
|
|
|
versionName = "2.6.3"
|
|
|
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
|
|
testInstrumentationRunnerArgument("filter", "" +
|
|
|
|
"com.otaliastudios.cameraview.tools.SdkExcludeFilter," +
|
|
|
|
"com.otaliastudios.cameraview.tools.SdkIncludeFilter")
|
|
|
|
}
|
|
|
|
buildTypes["debug"].isTestCoverageEnabled = true
|
|
|
|
buildTypes["release"].isMinifyEnabled = true
|
|
|
|
}
|
|
|
|
|
|
|
|
dependencies {
|
|
|
|
testImplementation("junit:junit:4.12")
|
|
|
|
testImplementation("org.mockito:mockito-inline:2.28.2")
|
|
|
|
|
|
|
|
androidTestImplementation("androidx.test:runner:1.2.0")
|
|
|
|
androidTestImplementation("androidx.test:rules:1.2.0")
|
|
|
|
androidTestImplementation("androidx.test.ext:junit:1.1.1")
|
|
|
|
androidTestImplementation("org.mockito:mockito-android:2.28.2")
|
|
|
|
androidTestImplementation("androidx.test.espresso:espresso-core:3.2.0")
|
|
|
|
|
|
|
|
api("androidx.exifinterface:exifinterface:1.1.0")
|
|
|
|
api("androidx.lifecycle:lifecycle-common:2.1.0")
|
|
|
|
api("com.google.android.gms:play-services-tasks:17.0.0")
|
|
|
|
implementation("androidx.annotation:annotation:1.1.0")
|
|
|
|
implementation("com.otaliastudios.opengl:egloo:0.5.2")
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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.addLicense(License.APACHE_2_0)
|
|
|
|
release.setSources(Release.SOURCES_AUTO)
|
|
|
|
release.setDocs(Release.DOCS_AUTO)
|
|
|
|
bintray {
|
|
|
|
auth.user = "BINTRAY_USER"
|
|
|
|
auth.key = "BINTRAY_KEY"
|
|
|
|
auth.repo = "BINTRAY_REPO"
|
|
|
|
}
|
|
|
|
directory {
|
|
|
|
directory = "build/local"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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/jacoco/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.1" }
|
|
|
|
tasks.register("computeCoverage", JacocoReport::class) {
|
|
|
|
dependsOn("compileDebugSources") // Compile sources, needed below
|
|
|
|
executionData.from(fileTree(coverageInputDir))
|
|
|
|
sourceDirectories.from(android.sourceSets["main"].java.sourceFiles)
|
|
|
|
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.isEnabled = true
|
|
|
|
reports.xml.isEnabled = true
|
|
|
|
reports.html.destination = file("$coverageOutputDir/html")
|
|
|
|
reports.xml.destination = file("$coverageOutputDir/xml/report.xml")
|
|
|
|
}
|