aboutsummaryrefslogtreecommitdiff
path: root/app/build.gradle
blob: 7565551594915d4a3e10425916a6cc7afaae3a2a (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
134
135
136
137
138
139
140
141
142
/*
 * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
 * SPDX-License-Identifier: GPL-3.0-only
 */
plugins {
    id 'kotlin-android'
}

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

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-${variant.getFlavorName()}_${defaultConfig.versionName}.apk"
            }
        }
    }

    buildFeatures.viewBinding = true

    defaultConfig {
        applicationId 'dev.msfjarvis.aps'
        versionCode 11001
        versionName '1.11.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 '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
    }

    flavorDimensions "free"
    productFlavors {
        free {
            versionNameSuffix "-free"
        }
        nonFree {
        }
    }
}

dependencies {
    implementation deps.androidx.activity_ktx
    implementation deps.androidx.annotation
    implementation deps.androidx.autofill
    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_common
    implementation deps.androidx.lifecycle_livedata_ktx
    implementation deps.androidx.lifecycle_viewmodel_ktx
    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.first_party.openpgp_ktx
    implementation deps.first_party.zxing_android_embedded

    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.sshj
    implementation deps.third_party.bouncycastle
    implementation deps.third_party.plumber
    implementation deps.third_party.ssh_auth
    implementation deps.third_party.timber
    implementation deps.third_party.timberkt

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

    nonFreeImplementation deps.non_free.google_play_auth_api_phone

    // 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

    testImplementation deps.testing.junit
    testImplementation deps.testing.kotlin_test_junit
}