mirror of
https://github.com/nextcloud/android.git
synced 2024-11-29 10:49:04 +03:00
e17e5f6bd7
Added necessary PowerMock dependencies in addition to a JSON dependency which is required in order to unit test with JSON objects. The default JSON library is part of AOSP and would need to be mocked which is not what we want. Signed-off-by: ardevd <edvard.holst@gmail.com>
367 lines
13 KiB
Groovy
367 lines
13 KiB
Groovy
// Gradle build file
|
|
//
|
|
// This project was started in Eclipse and later moved to Android Studio. In the transition, both IDEs were supported.
|
|
// Due to this, the files layout is not the usual in new projects created with Android Studio / gradle. This file
|
|
// merges declarations usually split in two separates build.gradle file, one for global settings of the project in
|
|
// its root folder, another one for the app module in subfolder of root.
|
|
import com.github.spotbugs.SpotBugsTask
|
|
|
|
buildscript {
|
|
repositories {
|
|
google()
|
|
jcenter()
|
|
maven {
|
|
url 'https://oss.sonatype.org/content/repositories/snapshots/'
|
|
}
|
|
maven {
|
|
url 'https://plugins.gradle.org/m2/'
|
|
}
|
|
mavenCentral()
|
|
}
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:3.3.2'
|
|
classpath('com.dicedmelon.gradle:jacoco-android:0.1.4') {
|
|
exclude group: 'org.codehaus.groovy', module: 'groovy-all'
|
|
}
|
|
classpath 'gradle.plugin.com.github.spotbugs:spotbugs-gradle-plugin:1.6.6'
|
|
}
|
|
}
|
|
|
|
apply plugin: 'com.android.application'
|
|
apply plugin: 'checkstyle'
|
|
apply plugin: 'pmd'
|
|
apply plugin: 'findbugs'
|
|
apply plugin: 'jacoco-android'
|
|
apply plugin: "com.github.spotbugs"
|
|
|
|
configurations.all {
|
|
exclude group: 'com.google.firebase', module: 'firebase-core'
|
|
exclude group: 'com.google.firebase', module: 'firebase-analytics'
|
|
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
|
|
|
|
// check for updates every build
|
|
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
|
}
|
|
|
|
ext {
|
|
jacocoVersion = "0.8.2"
|
|
|
|
travisBuild = System.getenv("TRAVIS") == "true"
|
|
|
|
// allows for -Dpre-dex=false to be set
|
|
preDexEnabled = "true".equals(System.getProperty("pre-dex", "true"))
|
|
}
|
|
|
|
repositories {
|
|
google()
|
|
jcenter()
|
|
maven { url "https://jitpack.io" }
|
|
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
|
|
|
|
flatDir {
|
|
dirs 'libs'
|
|
}
|
|
}
|
|
|
|
// semantic versioning for version code
|
|
def versionMajor = 3
|
|
def versionMinor = 7
|
|
def versionPatch = 0
|
|
def versionBuild = 0 // 0-50=Alpha / 51-98=RC / 90-99=stable
|
|
|
|
def taskRequest = getGradle().getStartParameter().getTaskRequests().toString()
|
|
if (taskRequest.contains("Gplay") || taskRequest.contains("findbugs") || taskRequest.contains("lint")) {
|
|
apply from: 'gplay.gradle'
|
|
}
|
|
|
|
spotbugs {
|
|
toolVersion = '3.1.12'
|
|
}
|
|
|
|
android {
|
|
lintOptions {
|
|
abortOnError false
|
|
htmlReport true
|
|
htmlOutput file("$project.buildDir/reports/lint/lint.html")
|
|
disable 'MissingTranslation', 'GradleDependency', 'VectorPath', 'IconMissingDensityFolder', 'IconDensities'
|
|
}
|
|
|
|
dexOptions {
|
|
javaMaxHeapSize "4g"
|
|
}
|
|
|
|
compileSdkVersion 28
|
|
|
|
defaultConfig {
|
|
minSdkVersion 14
|
|
targetSdkVersion 28
|
|
|
|
// arguments to be passed to functional tests
|
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
testInstrumentationRunnerArgument "TEST_SERVER_URL", "${NC_TEST_SERVER_BASEURL}"
|
|
testInstrumentationRunnerArgument "TEST_SERVER_USERNAME", "${NC_TEST_SERVER_USERNAME}"
|
|
testInstrumentationRunnerArgument "TEST_SERVER_PASSWORD", "${NC_TEST_SERVER_PASSWORD}"
|
|
|
|
multiDexEnabled true
|
|
|
|
versionCode versionMajor * 10000000 + versionMinor * 10000 + versionPatch * 100 + versionBuild
|
|
|
|
if (versionBuild > 89) {
|
|
versionName "${versionMajor}.${versionMinor}.${versionPatch}"
|
|
} else if (versionBuild > 50) {
|
|
versionName "${versionMajor}.${versionMinor}.${versionPatch} RC" + (versionBuild - 50)
|
|
} else {
|
|
versionName "${versionMajor}.${versionMinor}.${versionPatch} Alpha" + (versionBuild + 1)
|
|
}
|
|
|
|
// adapt structure from Eclipse to Gradle/Android Studio expectations;
|
|
// see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
|
|
|
|
flavorDimensions "default"
|
|
|
|
buildTypes {
|
|
debug {
|
|
testCoverageEnabled true
|
|
}
|
|
}
|
|
|
|
productFlavors {
|
|
// used for f-droid
|
|
generic {
|
|
applicationId 'com.nextcloud.client'
|
|
dimension "default"
|
|
}
|
|
|
|
gplay {
|
|
applicationId 'com.nextcloud.client'
|
|
dimension "default"
|
|
}
|
|
|
|
versionDev {
|
|
applicationId "com.nextcloud.android.beta"
|
|
dimension "default"
|
|
versionCode 20190409
|
|
versionName "20190409"
|
|
}
|
|
}
|
|
}
|
|
|
|
// adapt structure from Eclipse to Gradle/Android Studio expectations;
|
|
// see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
|
|
|
|
dexOptions {
|
|
// Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false.
|
|
preDexLibraries = preDexEnabled && !travisBuild
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude 'META-INF/LICENSE.txt'
|
|
exclude 'META-INF/LICENSE'
|
|
}
|
|
|
|
tasks.register("checkstyle", Checkstyle) {
|
|
configFile = file("${rootProject.projectDir}/checkstyle.xml")
|
|
configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath
|
|
source 'src'
|
|
include '**/*.java'
|
|
exclude '**/gen/**'
|
|
classpath = files()
|
|
}
|
|
|
|
tasks.register("pmd", Pmd) {
|
|
ruleSetFiles = files("${project.rootDir}/pmd-ruleset.xml")
|
|
ignoreFailures = false
|
|
ruleSets = []
|
|
|
|
source 'src'
|
|
include '**/*.java'
|
|
exclude '**/gen/**'
|
|
|
|
reports {
|
|
xml.enabled = false
|
|
html.enabled = true
|
|
xml {
|
|
destination = file("$project.buildDir/reports/pmd/pmd.xml")
|
|
}
|
|
html {
|
|
destination = file("$project.buildDir/reports/pmd/pmd.html")
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.register("findbugs", FindBugs) {
|
|
ignoreFailures = false
|
|
effort = "max"
|
|
reportLevel = "medium"
|
|
classes = fileTree("$project.buildDir/intermediates/javac/gplayDebug/compileGplayDebugJavaWithJavac/classes/")
|
|
excludeFilter = file("${project.rootDir}/findbugs-filter.xml")
|
|
source = fileTree('src/main/java')
|
|
pluginClasspath = project.configurations.findbugsPlugins
|
|
classpath = files()
|
|
include '**/*.java'
|
|
exclude '**/gen/**'
|
|
|
|
reports {
|
|
xml.enabled = false
|
|
html.enabled = true
|
|
html {
|
|
destination = file("$project.buildDir/reports/findbugs/findbugs.html")
|
|
}
|
|
}
|
|
}
|
|
|
|
android.applicationVariants.all { variant ->
|
|
String variantName = variant.name
|
|
String capVariantName = variantName.substring(0, 1).toUpperCase() + variantName.substring(1);
|
|
tasks.register("spotbugs${capVariantName}", SpotBugsTask) {
|
|
ignoreFailures = false
|
|
effort = "max"
|
|
reportLevel = "medium"
|
|
classes = fileTree("$project.buildDir/intermediates/javac/${variantName}/compile${capVariantName}JavaWithJavac/classes/")
|
|
excludeFilter = file("${project.rootDir}/findbugs-filter.xml")
|
|
pluginClasspath = project.configurations.spotbugsPlugins
|
|
source = fileTree('src/main/java')
|
|
classpath = files()
|
|
include '**/*.java'
|
|
exclude '**/gen/**'
|
|
|
|
reports {
|
|
xml.enabled = false
|
|
html.enabled = true
|
|
html {
|
|
destination = file("$project.buildDir/reports/spotbugs/spotbugs.html")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
check.dependsOn 'checkstyle', 'findbugs', 'pmd', 'lint'
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
// dependencies for app building
|
|
implementation 'androidx.multidex:multidex:2.0.1'
|
|
// implementation project('nextcloud-android-library')
|
|
genericImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'
|
|
gplayImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'
|
|
versionDevImplementation 'com.github.nextcloud:android-library:master-SNAPSHOT'
|
|
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
|
implementation 'com.google.android.material:material:1.0.0'
|
|
implementation 'com.jakewharton:disklrucache:2.0.2'
|
|
implementation 'androidx.appcompat:appcompat:1.0.2'
|
|
implementation 'androidx.cardview:cardview:1.0.0'
|
|
implementation 'androidx.exifinterface:exifinterface:1.0.0'
|
|
implementation 'com.github.albfernandez:juniversalchardet:2.0.3' // need this version for Android <7
|
|
implementation 'com.google.code.findbugs:annotations:2.0.1'
|
|
implementation 'commons-io:commons-io:2.6'
|
|
implementation 'com.github.tobiaskaminsky:android-job:v1.2.6.1' // 'com.github.evernote:android-job:v1.2.5'
|
|
implementation 'com.jakewharton:butterknife:10.1.0'
|
|
annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
|
|
implementation 'org.greenrobot:eventbus:3.1.1'
|
|
implementation 'com.googlecode.ez-vcard:ez-vcard:0.10.5'
|
|
implementation 'org.lukhnos:nnio:0.2'
|
|
implementation 'com.madgag.spongycastle:pkix:1.54.0.0'
|
|
implementation 'com.google.code.gson:gson:2.8.5'
|
|
implementation 'com.afollestad:sectioned-recyclerview:0.5.0'
|
|
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
|
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.15'
|
|
implementation 'com.github.tobiaskaminsky:qrcodescanner:0.1.2.2' // 'com.github.blikoon:QRCodeScanner:0.1.2'
|
|
implementation 'com.google.android:flexbox:1.1.0'
|
|
|
|
implementation 'org.parceler:parceler-api:1.1.12'
|
|
annotationProcessor 'org.parceler:parceler:1.1.12'
|
|
implementation('com.github.bumptech.glide:glide:3.7.0') {
|
|
exclude group: "com.android.support"
|
|
}
|
|
implementation 'com.caverock:androidsvg:1.3'
|
|
implementation 'androidx.annotation:annotation:1.0.2'
|
|
implementation 'com.google.code.gson:gson:2.8.5'
|
|
|
|
// dependencies for local unit tests
|
|
testImplementation 'junit:junit:4.12'
|
|
testImplementation 'org.mockito:mockito-core:2.26.0'
|
|
testImplementation 'androidx.test:core:1.1.0'
|
|
testImplementation 'org.powermock:powermock-core:2.0.0'
|
|
testImplementation 'org.powermock:powermock-module-junit4:2.0.0'
|
|
testImplementation 'org.powermock:powermock-api-mockito2:2.0.0'
|
|
testImplementation 'org.json:json:20180813'
|
|
|
|
// dependencies for instrumented tests
|
|
// JUnit4 Rules
|
|
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
|
|
androidTestImplementation 'androidx.test:rules:1.1.1'
|
|
// Android JUnit Runner
|
|
androidTestImplementation 'androidx.test:runner:1.1.1'
|
|
|
|
// Espresso core
|
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.1.1'
|
|
// UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests
|
|
// androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'
|
|
// fix conflict in dependencies; see http://g.co/androidstudio/app-test-app-conflict for details
|
|
//androidTestImplementation "com.android.support:support-annotations:${supportLibraryVersion}"
|
|
implementation 'org.jetbrains:annotations:17.0.0'
|
|
|
|
compileOnly "org.projectlombok:lombok:1.18.6"
|
|
annotationProcessor "org.projectlombok:lombok:1.18.6"
|
|
|
|
androidTestImplementation 'tools.fastlane:screengrab:1.2.0'
|
|
|
|
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.9.0'
|
|
spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.3'
|
|
|
|
implementation 'com.google.dagger:dagger:2.22.1'
|
|
implementation 'com.google.dagger:dagger-android:2.22.1'
|
|
implementation 'com.google.dagger:dagger-android-support:2.22.1'
|
|
annotationProcessor 'com.google.dagger:dagger-compiler:2.22.1'
|
|
annotationProcessor 'com.google.dagger:dagger-android-processor:2.22.1'
|
|
|
|
// jacocoAnt "org.jacoco:org.jacoco.ant:${jacocoVersion}"
|
|
// jacocoAgent "org.jacoco:org.jacoco.agent:${jacocoVersion}"
|
|
// androidJacocoAgent "org.jacoco:org.jacoco.agent:${jacocoVersion}"
|
|
// androidJacocoAnt "org.jacoco:org.jacoco.ant:${jacocoVersion}"
|
|
// androidJacocoAnt "org.jacoco:org.jacoco.core:${jacocoVersion}"
|
|
// androidJacocoAnt "org.jacoco:org.jacoco.report:${jacocoVersion}"
|
|
// androidJacocoAnt "org.jacoco:org.jacoco.agent:${jacocoVersion}"
|
|
}
|
|
|
|
configurations.all {
|
|
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
|
}
|
|
|
|
tasks.withType(Test) {
|
|
// increased logging for tests
|
|
testLogging {
|
|
events "passed", "skipped", "failed"
|
|
}
|
|
}
|
|
|
|
android.applicationVariants.all { variant ->
|
|
variant.outputs.all { output ->
|
|
outputFileName = "${output.baseName}-${variant.versionCode}.apk"
|
|
}
|
|
}
|
|
|
|
tasks.register("combinedTestReport", JacocoReport) {
|
|
|
|
reports {
|
|
xml.enabled = true
|
|
html.enabled = true
|
|
}
|
|
|
|
def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*Test*.*', 'android/**/*.*']
|
|
def debugTree = fileTree(dir: "$project.buildDir/intermediates/classes/gplay/debug", excludes: fileFilter)
|
|
def mainSrc = "$project.projectDir/src/main/java"
|
|
|
|
sourceDirectories = files([mainSrc])
|
|
classDirectories = files([debugTree])
|
|
executionData = fileTree(dir: project.buildDir, includes: [
|
|
'jacoco/testGplayDebugUnitTest.exec', 'outputs/code-coverage/connected/flavors/GPLAY/*coverage.ec'
|
|
])
|
|
}
|