aboutsummaryrefslogtreecommitdiff
path: root/app/build.gradle
blob: 9355b8b95d78e96dbac85be57ca8d240d3859bf6 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
 * SPDX-License-Identifier: GPL-3.0-only
 */
plugins {
    id 'kotlin-android'
    id 'kotlin-android-extensions'
}

final def keystorePropertiesFile = rootProject.file 'keystore.properties'

final def gitHash = { ->
    final def stdout = new ByteArrayOutputStream()
    exec {
        commandLine 'git', 'describe', '--tags'
        standardOutput = stdout
    }
    stdout.toString().trim()
}

static final def isSnapshot() {
    return System.env['GITHUB_WORKFLOW'] != null && System.env['SNAPSHOT'] != null
}

android {
    if (isSnapshot()) {
        android.applicationVariants.all { final variant ->
            variant.outputs.all {
                outputFileName = "aps_${defaultConfig.versionName}.apk"
            }
        }
    }

    viewBinding.enabled = true

    defaultConfig {
        applicationId versions.packageName
        versionCode 10601
        versionName '1.7.0-SNAPSHOT'
    }

    lintOptions {
        abortOnError = true // make sure build fails with lint errors!
        disable 'MissingTranslation', 'PluralsCandidate'
    }

    packagingOptions {
        exclude '.readme'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    buildTypes {
        release {
            minifyEnabled = true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            buildConfigField 'boolean', 'ENABLE_DEBUG_FEATURES', isSnapshot() ? 'true' : 'false'
        }
        debug {
            applicationIdSuffix = '.debug'
            versionNameSuffix = '-debug'
            minifyEnabled = false
            buildConfigField 'boolean', 'ENABLE_DEBUG_FEATURES', 'true'
        }
    }

    if (keystorePropertiesFile.exists()) {
        final def keystoreProperties = new Properties()
        keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
        signingConfigs {
            release {
                keyAlias = keystoreProperties['keyAlias']
                keyPassword = keystoreProperties['keyPassword']
                storeFile = rootProject.file keystoreProperties['storeFile']
                storePassword = keystoreProperties['storePassword']
            }
        }
        buildTypes.release.signingConfig = signingConfigs.release
        buildTypes.debug.signingConfig = signingConfigs.release
    }
}

dependencies {
    implementation deps.androidx.annotation
    implementation deps.androidx.activity_ktx
    implementation deps.androidx.appcompat
    implementation deps.androidx.biometric
    implementation deps.androidx.constraint_layout
    implementation deps.androidx.core_ktx
    implementation deps.androidx.documentfile
    implementation deps.androidx.fragment_ktx
    implementation deps.androidx.lifecycle_livedata_ktx
    implementation deps.androidx.lifecycle_viewmodel_ktx
    implementation deps.androidx.local_broadcast_manager
    implementation deps.androidx.material
    implementation deps.androidx.preference
    implementation deps.androidx.recycler_view
    implementation deps.androidx.recycler_view_selection
    implementation deps.androidx.security
    implementation deps.androidx.swiperefreshlayout

    implementation deps.kotlin.coroutines.android
    implementation deps.kotlin.coroutines.core

    implementation deps.third_party.commons_io
    implementation deps.third_party.commons_codec
    implementation deps.third_party.fastscroll
    implementation(deps.third_party.jgit) {
        exclude group: 'org.apache.httpcomponents', module: 'httpclient'
    }
    implementation deps.third_party.jsch
    implementation deps.third_party.openpgp_ktx
    implementation deps.third_party.publicsuffixlist
    implementation deps.third_party.ssh_auth
    implementation deps.third_party.timber
    implementation deps.third_party.timberkt
    implementation deps.third_party.whatthestack

    if (isSnapshot()) {
        implementation deps.third_party.leakcanary
    } else {
        debugImplementation deps.third_party.leakcanary
    }

    // Testing-only dependencies
    androidTestImplementation deps.testing.junit
    androidTestImplementation deps.testing.kotlin_test_junit
    androidTestImplementation deps.testing.androidx.runner
    androidTestImplementation deps.testing.androidx.rules
    androidTestImplementation deps.testing.androidx.junit
    androidTestImplementation deps.testing.androidx.espresso_core
    androidTestImplementation deps.testing.androidx.espresso_intents
}