mirror of
https://github.com/nextcloud/android.git
synced 2024-11-24 14:15:44 +03:00
01c480f01f
272f6203b
Drone: update FindBugs results to reflect reduced error/warning count [skip ci]75dd657ba
Merge pull request #3905 from jmue/storageprovider8a3ea78a5
Merge pull request #4701 from nextcloud/markdownPreview_SyntaxHighlightingd5ff4f9a4
Fix spotbugs filter7f0e6beb8
try to correct regex for spotbugs ignore0e90952b5
increase spotbugs due to unfixable warning669ad540e
minor refactoring due to codacy93f384817
proper spotbugs exclusionf5ebba9ef
use consistent dependency referencing style587c8f74a
Merge pull request #4716 from nextcloud/davX5loginFlow9eb77178e
Merge pull request #4726 from nextcloud/npeNote1ef6f5820
ignore library code of markdown render dependenciesbf43a798d
add syntax highlighting to markdown rendering * bump gradle memory due to GC mem limit during code generation (gradle.properties)622cc45e7
use new login flow only when we have a server urlccd6dfaec
NPE in setting note71bb3124f
Merge pull request #4724 from nextcloud/dependabot/gradle/daggerVersion-2.25.299368fa3f
[tx-robot] updated from transifex1afb02567
daily dev 20191024
433 lines
16 KiB
Groovy
433 lines
16 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 {
|
|
ext.kotlin_version = '1.3.50'
|
|
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.5.1'
|
|
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'
|
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.1.1"
|
|
}
|
|
}
|
|
|
|
apply plugin: 'com.android.application'
|
|
|
|
apply plugin: 'kotlin-android'
|
|
apply plugin: 'kotlin-android-extensions'
|
|
apply plugin: 'kotlin-kapt'
|
|
apply plugin: 'checkstyle'
|
|
apply plugin: 'pmd'
|
|
apply plugin: 'jacoco-android'
|
|
apply plugin: "com.github.spotbugs"
|
|
apply plugin: "io.gitlab.arturbosch.detekt"
|
|
|
|
configurations {
|
|
ktlint
|
|
|
|
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'
|
|
exclude group: 'org.jetbrains', module: 'annotations-java5' // via prism4j, already using annotations explicitely
|
|
|
|
// check for updates every build
|
|
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
|
}
|
|
}
|
|
|
|
ext {
|
|
jacocoVersion = "0.8.2"
|
|
daggerVersion = "2.25.2"
|
|
markwonVersion = "4.1.2"
|
|
prismVersion = "2.0.0"
|
|
androidLibraryVersion = "master-SNAPSHOT"
|
|
|
|
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 = 9
|
|
def versionPatch = 0
|
|
def versionBuild = 0 // 0-50=Alpha / 51-98=RC / 90-99=stable
|
|
|
|
for (TaskExecutionRequest tr : getGradle().getStartParameter().getTaskRequests()) {
|
|
for (String arg : tr.args) {
|
|
// any gplay, but only exact "build", as e.g. buildGeneric shall not apply gplay.grade
|
|
if (arg.contains("Gplay") || arg.contains("lint") || arg == "build") {
|
|
apply from: 'gplay.gradle'
|
|
System.console().println("Applying gplay.gradle")
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
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 (project.hasProperty('coverage'))
|
|
}
|
|
}
|
|
|
|
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 20191025
|
|
versionName "20191025"
|
|
}
|
|
|
|
qa {
|
|
applicationId "com.nextcloud.android.qa"
|
|
dimension "default"
|
|
versionCode 1
|
|
versionName "1"
|
|
}
|
|
}
|
|
|
|
testOptions {
|
|
unitTests.returnDefaultValues = true
|
|
}
|
|
}
|
|
|
|
// 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}/ruleset.xml")
|
|
ignoreFailures = true // should continue checking
|
|
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")
|
|
}
|
|
}
|
|
}
|
|
|
|
android.applicationVariants.all { variant ->
|
|
String variantName = variant.name
|
|
String capVariantName = variantName.substring(0, 1).toUpperCase() + variantName.substring(1)
|
|
tasks.register("spotbugs${capVariantName}", SpotBugsTask) {
|
|
ignoreFailures = true // should continue checking
|
|
effort = "max"
|
|
reportLevel = "medium"
|
|
classes = fileTree("$project.buildDir/intermediates/javac/${variantName}/classes/")
|
|
excludeFilter = file("${project.rootDir}/spotbugs-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', 'spotbugsGplayDebug', 'pmd', 'lint', 'ktlint', 'detekt'
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
dataBinding {
|
|
enabled true
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
// dependencies for app building
|
|
implementation 'androidx.multidex:multidex:2.0.1'
|
|
// implementation project('nextcloud-android-library')
|
|
genericImplementation "com.github.nextcloud:android-library:$androidLibraryVersion"
|
|
gplayImplementation "com.github.nextcloud:android-library:$androidLibraryVersion"
|
|
versionDevImplementation "com.github.nextcloud:android-library:$androidLibraryVersion"
|
|
qaImplementation "com.github.nextcloud:android-library:$androidLibraryVersion"
|
|
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.1.0'
|
|
implementation 'androidx.cardview:cardview:1.0.0'
|
|
implementation 'androidx.exifinterface:exifinterface:1.0.0'
|
|
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0"
|
|
implementation "androidx.work:work-runtime:2.2.0"
|
|
implementation "androidx.work:work-runtime-ktx:2.2.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.2.0'
|
|
kapt 'com.jakewharton:butterknife-compiler:10.2.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.6'
|
|
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.1'
|
|
implementation 'org.parceler:parceler-api:1.1.12'
|
|
kapt 'org.parceler:parceler:1.1.12'
|
|
implementation('com.github.bumptech.glide:glide:3.8.0') {
|
|
exclude group: "com.android.support"
|
|
}
|
|
implementation 'com.caverock:androidsvg:1.4'
|
|
implementation 'androidx.annotation:annotation:1.1.0'
|
|
implementation 'com.google.code.gson:gson:2.8.6'
|
|
implementation 'org.jetbrains:annotations:17.0.0'
|
|
|
|
implementation 'com.github.cotechde.hwsecurity:hwsecurity-fido:2.5.1'
|
|
|
|
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.10.0'
|
|
spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.7'
|
|
|
|
implementation "com.google.dagger:dagger:$daggerVersion"
|
|
implementation "com.google.dagger:dagger-android:$daggerVersion"
|
|
implementation "com.google.dagger:dagger-android-support:$daggerVersion"
|
|
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
|
|
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"
|
|
|
|
compileOnly "org.projectlombok:lombok:1.18.10"
|
|
annotationProcessor "org.projectlombok:lombok:1.18.10"
|
|
|
|
ktlint "com.pinterest:ktlint:0.35.0"
|
|
implementation 'org.conscrypt:conscrypt-android:2.2.1'
|
|
|
|
// dependencies for markdown rendering
|
|
implementation "io.noties.markwon:core:$markwonVersion"
|
|
implementation "io.noties.markwon:ext-latex:$markwonVersion"
|
|
implementation "io.noties.markwon:ext-strikethrough:$markwonVersion"
|
|
implementation "io.noties.markwon:ext-tables:$markwonVersion"
|
|
implementation "io.noties.markwon:ext-tasklist:$markwonVersion"
|
|
implementation "io.noties.markwon:html:$markwonVersion"
|
|
implementation "io.noties.markwon:linkify:$markwonVersion"
|
|
|
|
implementation "io.noties.markwon:syntax-highlight:$markwonVersion"
|
|
implementation "io.noties:prism4j:$prismVersion"
|
|
kapt "io.noties:prism4j-bundler:$prismVersion"
|
|
|
|
// dependencies for local unit tests
|
|
testImplementation 'junit:junit:4.12'
|
|
testImplementation 'org.mockito:mockito-core:3.1.0'
|
|
testImplementation 'androidx.test:core:1.2.0'
|
|
testImplementation 'org.powermock:powermock-core:2.0.4'
|
|
testImplementation 'org.powermock:powermock-module-junit4:2.0.4'
|
|
testImplementation 'org.powermock:powermock-api-mockito2:2.0.4'
|
|
testImplementation 'org.json:json:20190722'
|
|
testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
|
|
testImplementation "androidx.arch.core:core-testing:2.1.0"
|
|
|
|
// dependencies for instrumented tests
|
|
// JUnit4 Rules
|
|
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
|
androidTestImplementation 'androidx.test:rules:1.2.0'
|
|
// Android JUnit Runner
|
|
androidTestImplementation 'androidx.test:runner:1.2.0'
|
|
|
|
// Espresso core
|
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
|
|
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.2.0'
|
|
androidTestImplementation 'org.mockito:mockito-core:3.1.0'
|
|
// 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}"
|
|
androidTestImplementation 'tools.fastlane:screengrab:1.2.0'
|
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
|
|
// 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}"
|
|
|
|
implementation "com.github.stateless4j:stateless4j:2.6.0"
|
|
}
|
|
|
|
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'
|
|
])
|
|
}
|
|
|
|
task ktlint(type: JavaExec, group: "verification") {
|
|
description = "Check Kotlin code style."
|
|
main = "com.pinterest.ktlint.Main"
|
|
classpath = configurations.ktlint
|
|
args "--reporter=plain", "--reporter=plain,output=${buildDir}/ktlint.txt,src/**/*.kt"
|
|
}
|
|
|
|
task ktlintFormat(type: JavaExec, group: "formatting") {
|
|
description = "Fix Kotlin code style deviations."
|
|
main = "com.pinterest.ktlint.Main"
|
|
classpath = configurations.ktlint
|
|
args "-F", "src/**/*.kt"
|
|
}
|
|
|
|
detekt {
|
|
reports {
|
|
xml {
|
|
enabled = false
|
|
}
|
|
}
|
|
config = files("detekt.yml")
|
|
input = files("src/")
|
|
}
|