mirror of
https://github.com/nextcloud/android.git
synced 2024-12-19 15:33:00 +03:00
5822746010
Bump appcompat from 1.4.2 to 1.5.1 Bump webkit from 1.4.0 to 1.5.0 Bump material from 1.6.1 to 1.7.0 Bump junit from 1.1.3 to 1.1.4 Bump espressoVersion from 3.4.0 to 3.5.0 Bump kotlin_version from 1.7.20 to 1.7.21 Update Nextcloud Android library Update 3rd-party dependencies
436 lines
16 KiB
Groovy
436 lines
16 KiB
Groovy
import com.github.spotbugs.snom.SpotBugsTask
|
|
import org.gradle.internal.jvm.Jvm
|
|
|
|
buildscript {
|
|
dependencies {
|
|
classpath 'com.android.tools.build:gradle:7.3.1'
|
|
classpath 'com.hiya:jacoco-android:0.2'
|
|
classpath 'com.github.spotbugs.snom:spotbugs-gradle-plugin:5.0.13'
|
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.21.0"
|
|
classpath "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2
|
|
classpath 'com.karumi:shot:5.14.1'
|
|
classpath "org.jacoco:org.jacoco.core:$jacoco_version"
|
|
classpath "org.jacoco:org.jacoco.report:$jacoco_version"
|
|
classpath "org.jacoco:org.jacoco.agent:$jacoco_version"
|
|
}
|
|
}
|
|
|
|
plugins {
|
|
id "com.diffplug.spotless" version "6.11.0"
|
|
}
|
|
|
|
apply plugin: 'com.android.application'
|
|
|
|
apply plugin: 'kotlin-android'
|
|
apply plugin: 'kotlin-kapt'
|
|
apply plugin: 'kotlin-parcelize'
|
|
apply plugin: 'checkstyle'
|
|
apply plugin: 'pmd'
|
|
apply plugin: 'com.hiya.jacoco-android'
|
|
apply plugin: 'com.github.spotbugs'
|
|
apply plugin: 'io.gitlab.arturbosch.detekt'
|
|
apply plugin: 'shot'
|
|
|
|
println "Gradle uses Java ${Jvm.current()}"
|
|
|
|
configurations {
|
|
all {
|
|
exclude group: 'org.jetbrains', module: 'annotations-java5' // via prism4j, already using annotations explicitly
|
|
|
|
// check for updates every build
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, 'seconds'
|
|
exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-debug"
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
configurations.configureEach {
|
|
resolutionStrategy.eachDependency {
|
|
if (requested.group == "org.checkerframework" && requested.name != "checker-compat-qual") {
|
|
useVersion(checkerVersion)
|
|
because("https://github.com/google/ExoPlayer/issues/10007")
|
|
}
|
|
}
|
|
}
|
|
|
|
// semantic versioning for version code
|
|
def versionMajor = 3
|
|
def versionMinor = 23
|
|
def versionPatch = 0
|
|
def versionBuild = 0 // 0-50=Alpha / 51-98=RC / 90-99=stable
|
|
|
|
|
|
def ndkEnv = new HashMap<String, String>()
|
|
file("$project.rootDir/ndk.env").readLines().each() {
|
|
def (key, value) = it.tokenize('=')
|
|
ndkEnv.put(key, value)
|
|
}
|
|
|
|
android {
|
|
|
|
compileSdkVersion 32
|
|
// install this NDK version and Cmake to produce smaller APKs. Build will still work if not installed
|
|
ndkVersion "${ndkEnv.get("NDK_VERSION")}"
|
|
|
|
|
|
namespace 'com.owncloud.android'
|
|
testNamespace "${namespace}.test"
|
|
|
|
|
|
defaultConfig {
|
|
minSdkVersion 23
|
|
targetSdkVersion 31
|
|
|
|
buildConfigField 'boolean', 'CI', ciBuild.toString()
|
|
|
|
// arguments to be passed to functional tests
|
|
testInstrumentationRunner "com.nextcloud.client.ScreenshotTestRunner"
|
|
testInstrumentationRunnerArgument "TEST_SERVER_URL", "${NC_TEST_SERVER_BASEURL}"
|
|
testInstrumentationRunnerArgument "TEST_SERVER_USERNAME", "${NC_TEST_SERVER_USERNAME}"
|
|
testInstrumentationRunnerArgument "TEST_SERVER_PASSWORD", "${NC_TEST_SERVER_PASSWORD}"
|
|
testInstrumentationRunnerArguments disableAnalytics: 'true'
|
|
|
|
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"
|
|
}
|
|
|
|
huawei {
|
|
applicationId 'com.nextcloud.client'
|
|
dimension "default"
|
|
}
|
|
|
|
versionDev {
|
|
applicationId "com.nextcloud.android.beta"
|
|
dimension "default"
|
|
versionCode 20221112
|
|
versionName "20221112"
|
|
}
|
|
|
|
qa {
|
|
applicationId "com.nextcloud.android.qa"
|
|
dimension "default"
|
|
versionCode 1
|
|
versionName "1"
|
|
}
|
|
}
|
|
|
|
testOptions {
|
|
unitTests.returnDefaultValues = true
|
|
animationsDisabled 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
|
|
packagingOptions {
|
|
resources {
|
|
excludes += 'META-INF/LICENSE*'
|
|
pickFirst 'MANIFEST.MF' // workaround for duplicated manifest on some dependencies
|
|
}
|
|
}
|
|
|
|
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")
|
|
}
|
|
}
|
|
}
|
|
|
|
check.dependsOn 'checkstyle', 'spotbugsGplayDebug', 'pmd', 'lint', 'spotlessKotlinCheck', 'detekt'
|
|
|
|
buildFeatures {
|
|
dataBinding true
|
|
viewBinding true
|
|
}
|
|
|
|
kotlinOptions {
|
|
jvmTarget = "1.8"
|
|
}
|
|
|
|
lint {
|
|
abortOnError false
|
|
checkGeneratedSources true
|
|
disable 'MissingTranslation', 'GradleDependency', 'VectorPath', 'IconMissingDensityFolder', 'IconDensities', 'GoogleAppIndexingWarning', 'MissingDefaultResource', 'InvalidPeriodicWorkRequestInterval', 'StringFormatInvalid', 'MissingQuantity'
|
|
htmlOutput file("$project.buildDir/reports/lint/lint.html")
|
|
htmlReport true
|
|
}
|
|
|
|
}
|
|
|
|
dependencies {
|
|
// dependencies for app building
|
|
implementation 'androidx.multidex:multidex:2.0.1'
|
|
// implementation project('nextcloud-android-library')
|
|
implementation("com.github.nextcloud:android-library:$androidLibraryVersion") {
|
|
exclude group: 'org.ogce', module: 'xpp3' // unused in Android and brings wrong Junit version
|
|
}
|
|
|
|
compileOnly 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2' // remove after entire switch to lib v2
|
|
implementation "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2
|
|
implementation 'org.apache.jackrabbit:jackrabbit-webdav:2.13.5' // remove after entire switch to lib v2
|
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
|
implementation 'com.google.android.material:material:1.7.0'
|
|
implementation 'com.jakewharton:disklrucache:2.0.2'
|
|
implementation 'androidx.appcompat:appcompat:1.5.1'
|
|
implementation 'androidx.webkit:webkit:1.5.0'
|
|
implementation 'androidx.cardview:cardview:1.0.0'
|
|
implementation 'androidx.exifinterface:exifinterface:1.3.5'
|
|
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1"
|
|
implementation "androidx.work:work-runtime:$workRuntime"
|
|
implementation "androidx.work:work-runtime-ktx:$workRuntime"
|
|
implementation "androidx.fragment:fragment-ktx:1.5.4"
|
|
implementation 'com.github.albfernandez:juniversalchardet:2.0.3' // need this version for Android <7
|
|
compileOnly 'com.google.code.findbugs:annotations:3.0.1u2'
|
|
implementation 'commons-io:commons-io:2.11.0'
|
|
implementation 'org.greenrobot:eventbus:3.3.1'
|
|
implementation 'com.googlecode.ez-vcard:ez-vcard:0.11.3'
|
|
implementation 'org.lukhnos:nnio:0.2'
|
|
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.72'
|
|
implementation 'com.google.code.gson:gson:2.10'
|
|
implementation 'com.github.nextcloud-deps:sectioned-recyclerview:0.6.1'
|
|
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
|
|
implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.25'
|
|
implementation 'com.github.nextcloud-deps:qrcodescanner:0.1.2.4' // 'com.github.blikoon:QRCodeScanner:0.1.2'
|
|
implementation 'com.google.android.flexbox:flexbox:3.0.0'
|
|
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.5.0'
|
|
implementation 'com.vanniktech:emoji-google:0.9.0'
|
|
|
|
implementation "com.github.nextcloud-deps.hwsecurity:hwsecurity-fido:$fidoVersion"
|
|
implementation "com.github.nextcloud-deps.hwsecurity:hwsecurity-fido2:$fidoVersion"
|
|
|
|
// document scanner not available on FDroid (generic) due to OpenCV binaries
|
|
gplayImplementation "com.github.zynkware:Document-Scanning-Android-SDK:$documentScannerVersion"
|
|
huaweiImplementation "com.github.zynkware:Document-Scanning-Android-SDK:$documentScannerVersion"
|
|
qaImplementation "com.github.zynkware:Document-Scanning-Android-SDK:$documentScannerVersion"
|
|
versionDevImplementation "com.github.zynkware:Document-Scanning-Android-SDK:$documentScannerVersion"
|
|
|
|
spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.12.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"
|
|
|
|
implementation 'org.conscrypt:conscrypt-android:2.5.2'
|
|
|
|
implementation "com.google.android.exoplayer:exoplayer:$exoplayerVersion"
|
|
implementation "com.google.android.exoplayer:extension-okhttp:$exoplayerVersion"
|
|
|
|
implementation 'me.zhanghai.android.fastscroll:library:1.1.8'
|
|
|
|
// Shimmer animation
|
|
implementation 'io.github.elye:loaderviewlibrary:3.0.0'
|
|
|
|
// dependencies for markdown rendering
|
|
implementation "io.noties.markwon:core:$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:syntax-highlight:$markwonVersion"
|
|
implementation "io.noties:prism4j:$prismVersion"
|
|
kapt "io.noties:prism4j-bundler:$prismVersion"
|
|
|
|
implementation('org.mnode.ical4j:ical4j:3.0.0') {
|
|
['org.apache.commons', 'commons-logging'].each {
|
|
exclude group: "$it"
|
|
}
|
|
}
|
|
|
|
if (project.hasProperty("leakCanary")) {
|
|
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.9.1'
|
|
}
|
|
|
|
// dependencies for local unit tests
|
|
testImplementation 'junit:junit:4.13.2'
|
|
testImplementation "org.mockito:mockito-core:$mockitoVersion"
|
|
testImplementation "androidx.test:core:$androidxTestVersion"
|
|
testImplementation 'org.json:json:20220924'
|
|
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
|
|
testImplementation 'androidx.arch.core:core-testing:2.1.0'
|
|
testImplementation "io.mockk:mockk:$mockkVersion"
|
|
testImplementation "io.mockk:mockk-android:$mockkVersion"
|
|
|
|
// dependencies for instrumented tests
|
|
// JUnit4 Rules
|
|
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
|
|
androidTestImplementation "androidx.test:rules:$androidxTestVersion"
|
|
// Android JUnit Runner
|
|
androidTestImplementation "androidx.test:runner:$androidxTestVersion"
|
|
androidTestUtil "androidx.test:orchestrator:$androidxTestVersion"
|
|
androidTestImplementation "androidx.test:core-ktx:$androidxTestVersion"
|
|
|
|
// Espresso
|
|
androidTestImplementation "androidx.test.espresso:espresso-core:$espressoVersion"
|
|
androidTestImplementation "androidx.test.espresso:espresso-contrib:$espressoVersion"
|
|
androidTestImplementation "androidx.test.espresso:espresso-web:$espressoVersion"
|
|
androidTestImplementation "androidx.test.espresso:espresso-accessibility:$espressoVersion"
|
|
androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion"
|
|
|
|
// Mocking support
|
|
androidTestImplementation 'com.github.tmurakami:dexopener:2.0.5' // required to allow mocking on API 27 and older
|
|
androidTestImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
|
|
androidTestImplementation "org.mockito:mockito-core:$mockitoVersion"
|
|
androidTestImplementation("org.mockito:mockito-android:$mockitoVersion")
|
|
androidTestImplementation "io.mockk:mockk-android:$mockkVersion"
|
|
androidTestImplementation 'androidx.arch.core:core-testing:2.0.1'
|
|
androidTestImplementation "com.facebook.testing.screenshot:core:0.15.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:2.1.1'
|
|
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
|
|
implementation "com.github.stateless4j:stateless4j:2.6.0"
|
|
|
|
// upon each update first test: new registration, receive push
|
|
gplayImplementation "com.google.firebase:firebase-messaging:23.1.0"
|
|
|
|
implementation 'com.github.nextcloud.android-common:ui:0.3.0'
|
|
}
|
|
|
|
configurations.all {
|
|
resolutionStrategy {
|
|
cacheChangingModulesFor 0, 'seconds'
|
|
force 'org.objenesis:objenesis:2.6'
|
|
eachDependency { details ->
|
|
if ('org.jacoco' == details.requested.group) {
|
|
details.useVersion "$jacoco_version"
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
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"
|
|
}
|
|
}
|
|
|
|
spotless {
|
|
kotlin {
|
|
target "**/*.kt"
|
|
ktlint()
|
|
}
|
|
}
|
|
|
|
detekt {
|
|
reports {
|
|
xml {
|
|
enabled = false
|
|
}
|
|
}
|
|
config = files("detekt.yml")
|
|
}
|
|
|
|
shot {
|
|
showOnlyFailingTestsInReports = ciBuild
|
|
// CI environment renders some shadows slightly different from local VMs
|
|
// Add a 0.5% tolerance to account for that
|
|
tolerance = ciBuild ? 0.5 : 0
|
|
}
|
|
|
|
jacoco {
|
|
toolVersion = "$jacoco_version"
|
|
}
|
|
|
|
spotbugs {
|
|
ignoreFailures = true // should continue checking
|
|
effort = "max"
|
|
reportLevel = "medium"
|
|
}
|
|
|
|
tasks.withType(SpotBugsTask) { task ->
|
|
String variantNameCap = task.name.replace("spotbugs", "")
|
|
String variantName = variantNameCap.substring(0, 1).toLowerCase() + variantNameCap.substring(1)
|
|
|
|
dependsOn "compile${variantNameCap}Sources"
|
|
|
|
excludeFilter = file("${project.rootDir}/spotbugs-filter.xml")
|
|
classes = fileTree("$project.buildDir/intermediates/javac/${variantName}/classes/")
|
|
reports {
|
|
xml {
|
|
required = true
|
|
}
|
|
html {
|
|
required = true
|
|
outputLocation = file("$project.buildDir/reports/spotbugs/spotbugs.html")
|
|
stylesheet = 'fancy.xsl'
|
|
}
|
|
}
|
|
}
|