SchildiChat-android/vector/build.gradle

408 lines
14 KiB
Groovy
Raw Normal View History

import com.android.build.OutputFile
2018-10-03 17:56:33 +02:00
apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.oss-licenses-plugin'
2018-10-03 17:56:33 +02:00
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
2018-10-19 14:26:38 +02:00
apply plugin: 'kotlin-kapt'
kapt {
correctErrorTypes = true
}
2018-10-03 17:56:33 +02:00
2018-12-29 17:54:03 +01:00
androidExtensions {
experimental = true
}
2019-07-11 16:49:06 +02:00
ext.versionMajor = 0
2020-05-15 15:48:15 +02:00
ext.versionMinor = 21
2020-03-17 14:18:08 +01:00
ext.versionPatch = 0
2019-03-18 18:53:14 +01:00
static def getGitTimestamp() {
def cmd = 'git show -s --format=%ct'
return cmd.execute().text.trim() as Long
}
2019-03-13 17:00:30 +01:00
static def generateVersionCodeFromTimestamp() {
// It's unix timestamp, minus timestamp of October 3rd 2018 (first commit date) divided by 100: It's incremented by one every 100 seconds.
2020-01-13 15:12:39 +01:00
// plus 20_000_000 for compatibility reason with the previous way the Version Code was computed
// Note that the result will be multiplied by 10 when adding the digit for the arch
return ((getGitTimestamp() - 1_538_524_800) / 100).toInteger() + 20_000_000
}
def generateVersionCodeFromVersionName() {
2020-01-13 15:12:39 +01:00
// plus 4_000_000 for compatibility reason with the previous way the Version Code was computed
// Note that the result will be multiplied by 10 when adding the digit for the arch
return (versionMajor * 1_00_00 + versionMinor * 1_00 + versionPatch) + 4_000_000
}
def getVersionCode() {
if (gitBranchName() == "develop") {
return generateVersionCodeFromTimestamp()
} else {
return generateVersionCodeFromVersionName()
}
}
2019-03-13 17:00:30 +01:00
static def gitRevision() {
2020-01-17 16:06:58 +01:00
def cmd = "git rev-parse --short=8 HEAD"
2019-03-13 17:00:30 +01:00
return cmd.execute().text.trim()
}
static def gitRevisionDate() {
def cmd = "git show -s --format=%ci HEAD^{commit}"
return cmd.execute().text.trim()
}
static def gitBranchName() {
def fromEnv = System.env.BUILDKITE_BRANCH as String ?: ""
if (!fromEnv.isEmpty()) {
return fromEnv
} else {
// Note: this command return "HEAD" on Buildkite, so use the system env 'BUILDKITE_BRANCH' content first
def cmd = "git rev-parse --abbrev-ref HEAD"
return cmd.execute().text.trim()
}
2019-03-13 17:00:30 +01:00
}
// For Google Play build, build on any other branch than master will have a "-dev" suffix
static def getGplayVersionSuffix() {
if (gitBranchName() == "master") {
return ""
} else {
return "-dev"
}
}
static def gitTag() {
def cmd = "git describe --exact-match --tags"
return cmd.execute().text.trim()
}
// For F-Droid build, build on a not tagged commit will have a "-dev" suffix
static def getFdroidVersionSuffix() {
if (gitTag() == "") {
return "-dev"
} else {
return ""
}
}
project.android.buildTypes.all { buildType ->
buildType.javaCompileOptions.annotationProcessorOptions.arguments =
[
validateEpoxyModelUsage: String.valueOf(buildType.name == 'debug')
]
}
// map for the version codes last digit
// x86 must have greater values than arm
// 64 bits have greater value than 32 bits
ext.abiVersionCodes = ["armeabi-v7a": 1, "arm64-v8a": 2, "x86": 3, "x86_64": 4].withDefault { 0 }
def buildNumber = System.env.BUILDKITE_BUILD_NUMBER as Integer ?: 0
2019-03-13 17:00:30 +01:00
2018-10-03 17:56:33 +02:00
android {
2020-03-26 10:06:50 +01:00
compileSdkVersion 29
2018-10-03 17:56:33 +02:00
defaultConfig {
applicationId "im.vector.riotx"
// Set to API 19 because motionLayout is min API 18.
// In the future we may consider using an alternative of MotionLayout to support API 16. But for security reason, maybe not.
minSdkVersion 19
2020-03-26 10:06:50 +01:00
targetSdkVersion 29
multiDexEnabled true
2019-07-11 16:49:06 +02:00
// `develop` branch will have version code from timestamp, to ensure each build from CI has a incremented versionCode.
// Other branches (master, features, etc.) will have version code based on application version.
versionCode project.getVersionCode()
2019-07-11 16:49:06 +02:00
buildConfigField "String", "GIT_REVISION", "\"${gitRevision()}\""
2019-03-13 17:00:30 +01:00
resValue "string", "git_revision", "\"${gitRevision()}\""
buildConfigField "String", "GIT_REVISION_DATE", "\"${gitRevisionDate()}\""
2019-03-13 17:00:30 +01:00
resValue "string", "git_revision_date", "\"${gitRevisionDate()}\""
buildConfigField "String", "GIT_BRANCH_NAME", "\"${gitBranchName()}\""
2019-03-13 17:00:30 +01:00
resValue "string", "git_branch_name", "\"${gitBranchName()}\""
buildConfigField "String", "BUILD_NUMBER", "\"${buildNumber}\""
2019-03-13 17:00:30 +01:00
resValue "string", "build_number", "\"${buildNumber}\""
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// Keep abiFilter for the universalApk
ndk {
abiFilters "armeabi-v7a", "x86", 'arm64-v8a', 'x86_64'
}
// Ref: https://developer.android.com/studio/build/configure-apk-splits.html
splits {
// Configures multiple APKs based on ABI.
abi {
// Enables building multiple APKs per ABI.
enable true
// By default all ABIs are included, so use reset() and include to specify that we only
// want APKs for armeabi-v7a, x86, arm64-v8a and x86_64.
// Resets the list of ABIs that Gradle should create APKs for to none.
reset()
// Specifies a list of ABIs that Gradle should create APKs for.
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
// Generate a universal APK that includes all ABIs, so user who install from CI tool can use this one by default.
universalApk true
}
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def baseAbiVersionCode = project.ext.abiVersionCodes.get(output.getFilter(OutputFile.ABI))
// Known limitation: it does not modify the value in the BuildConfig.java generated file
output.versionCodeOverride = variant.versionCode * 10 + baseAbiVersionCode
}
}
2018-10-03 17:56:33 +02:00
}
2019-03-13 17:00:30 +01:00
signingConfigs {
debug {
keyAlias 'androiddebugkey'
keyPassword 'android'
storeFile file('./signature/debug.keystore')
storePassword 'android'
}
}
2018-10-03 17:56:33 +02:00
buildTypes {
2019-03-13 15:11:02 +01:00
debug {
applicationIdSuffix ".debug"
resValue "string", "app_name", "RiotX dbg"
2019-03-13 15:11:02 +01:00
resValue "bool", "debug_mode", "true"
buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"
signingConfig signingConfigs.debug
2019-03-13 15:11:02 +01:00
}
2018-10-03 17:56:33 +02:00
release {
resValue "string", "app_name", "RiotX"
2019-03-13 15:11:02 +01:00
resValue "bool", "debug_mode", "false"
buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"
2019-03-13 15:11:02 +01:00
2018-10-03 17:56:33 +02:00
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
2018-12-13 11:00:50 +01:00
2019-03-13 17:00:30 +01:00
flavorDimensions "store"
productFlavors {
2019-03-19 14:38:15 +01:00
gplay {
2019-03-13 17:00:30 +01:00
dimension "store"
versionName "${versionMajor}.${versionMinor}.${versionPatch}${getGplayVersionSuffix()}"
resValue "bool", "isGplay", "true"
2019-03-13 17:00:30 +01:00
buildConfigField "boolean", "ALLOW_FCM_USE", "true"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"G\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"GooglePlay\""
}
2019-03-19 14:38:15 +01:00
fdroid {
2019-03-13 17:00:30 +01:00
dimension "store"
versionName "${versionMajor}.${versionMinor}.${versionPatch}${getFdroidVersionSuffix()}"
resValue "bool", "isGplay", "false"
2019-03-13 17:00:30 +01:00
buildConfigField "boolean", "ALLOW_FCM_USE", "false"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"F\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"FDroid\""
}
}
lintOptions {
2019-04-03 12:04:24 +02:00
lintConfig file("lint.xml")
2019-03-13 17:00:30 +01:00
}
2018-12-13 11:00:50 +01:00
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
2020-04-28 14:15:23 +02:00
sourceSets {
androidTest {
java.srcDirs += "src/sharedTest/java"
}
test {
java.srcDirs += "src/sharedTest/java"
}
}
2018-10-03 17:56:33 +02:00
}
dependencies {
2018-10-19 14:26:38 +02:00
2019-12-30 10:46:25 +01:00
def epoxy_version = '3.9.0'
def fragment_version = '1.2.0'
def arrow_version = "0.8.2"
2019-10-07 14:13:30 +02:00
def coroutines_version = "1.3.2"
def markwon_version = '4.1.2'
def big_image_viewer_version = '1.6.2'
2019-09-27 13:49:55 +02:00
def glide_version = '4.10.0'
def moshi_version = '1.8.0'
def daggerVersion = '2.25.4'
2019-12-30 10:46:25 +01:00
def autofill_version = "1.0.0"
2020-03-09 10:50:49 +01:00
def work_version = '2.3.3'
2020-04-28 14:15:23 +02:00
def arch_version = '2.1.0'
2018-10-19 14:26:38 +02:00
implementation project(":matrix-sdk-android")
implementation project(":matrix-sdk-android-rx")
implementation project(":diff-match-patch")
2020-03-20 10:12:59 +01:00
implementation project(":multipicker")
implementation 'com.android.support:multidex:1.0.3'
2018-10-03 17:56:33 +02:00
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
2019-02-27 17:17:47 +01:00
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
2020-01-06 18:43:34 +01:00
implementation "androidx.recyclerview:recyclerview:1.2.0-alpha01"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation "androidx.fragment:fragment:$fragment_version"
implementation "androidx.fragment:fragment-ktx:$fragment_version"
2019-12-30 10:46:25 +01:00
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
implementation 'androidx.core:core-ktx:1.1.0'
2019-10-01 20:11:15 +02:00
implementation "org.threeten:threetenbp:1.4.0:no-tzdb"
implementation "com.gabrielittner.threetenbp:lazythreetenbp:0.7.0"
implementation "com.squareup.moshi:moshi-adapters:$moshi_version"
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
// Log
implementation 'com.jakewharton.timber:timber:4.7.1'
// Debug
2019-09-27 13:49:55 +02:00
implementation 'com.facebook.stetho:stetho:1.5.1'
// Phone number https://github.com/google/libphonenumber
implementation 'com.googlecode.libphonenumber:libphonenumber:8.10.23'
// rx
implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
2019-09-27 13:49:55 +02:00
implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.1'
// RXBinding
implementation 'com.jakewharton.rxbinding3:rxbinding:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-appcompat:3.0.0'
implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.0.0'
2018-10-19 14:26:38 +02:00
implementation("com.airbnb.android:epoxy:$epoxy_version")
kapt "com.airbnb.android:epoxy-processor:$epoxy_version"
implementation "com.airbnb.android:epoxy-paging:$epoxy_version"
2019-11-12 15:11:52 +01:00
implementation 'com.airbnb.android:mvrx:1.3.0'
2018-10-19 15:30:40 +02:00
// Work
2020-03-06 18:29:15 +01:00
implementation "androidx.work:work-runtime-ktx:$work_version"
// Paging
2019-12-30 10:46:25 +01:00
implementation "androidx.paging:paging-runtime-ktx:2.1.1"
2019-06-18 18:29:48 +02:00
// Functional Programming
implementation "io.arrow-kt:arrow-core:$arrow_version"
// Pref
implementation 'androidx.preference:preference:1.1.0'
// UI
2018-10-29 17:20:08 +01:00
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
2019-12-30 10:46:25 +01:00
implementation 'com.google.android.material:material:1.2.0-alpha03'
implementation 'me.gujun.android:span:1.7'
implementation "io.noties.markwon:core:$markwon_version"
implementation "io.noties.markwon:html:$markwon_version"
implementation 'com.googlecode.htmlcompressor:htmlcompressor:1.4'
implementation 'me.saket:better-link-movement-method:2.2.0'
implementation 'com.google.android:flexbox:1.1.1'
2019-11-21 11:02:12 +01:00
implementation "androidx.autofill:autofill:$autofill_version"
2019-05-16 10:23:57 +02:00
// Passphrase strength helper
2019-09-27 13:49:55 +02:00
implementation 'com.nulab-inc:zxcvbn:1.2.7'
2019-05-16 10:23:57 +02:00
//Alerter
2020-03-24 14:56:57 +01:00
implementation 'com.tapadoo.android:alerter:5.1.2'
2019-05-16 10:23:57 +02:00
implementation 'com.otaliastudios:autocomplete:1.1.0'
// Butterknife
2019-09-27 13:49:55 +02:00
implementation 'com.jakewharton:butterknife:10.2.0'
kapt 'com.jakewharton:butterknife-compiler:10.2.0'
// Shake detection
implementation 'com.squareup:seismic:1.0.2'
// Image Loading
implementation "com.github.piasy:BigImageViewer:$big_image_viewer_version"
implementation "com.github.piasy:GlideImageLoader:$big_image_viewer_version"
implementation "com.github.piasy:ProgressPieIndicator:$big_image_viewer_version"
implementation "com.github.piasy:GlideImageViewFactory:$big_image_viewer_version"
implementation "com.github.bumptech.glide:glide:$glide_version"
kapt "com.github.bumptech.glide:compiler:$glide_version"
implementation 'com.danikula:videocache:2.7.1'
implementation 'com.github.yalantis:ucrop:2.2.4'
2018-10-29 17:20:08 +01:00
// Badge for compatibility
2019-09-27 13:49:55 +02:00
implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
// DI
implementation "com.google.dagger:dagger:$daggerVersion"
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
2019-09-27 13:49:55 +02:00
compileOnly 'com.squareup.inject:assisted-inject-annotations-dagger2:0.5.0'
kapt 'com.squareup.inject:assisted-inject-processor-dagger2:0.5.0'
2018-10-03 17:56:33 +02:00
// gplay flavor only
// Warning: due to the exclude, Android Studio does not propose to upgrade. Uncomment next line to be proposed to upgrade
// implementation 'com.google.firebase:firebase-messaging:20.0.0'
gplayImplementation('com.google.firebase:firebase-messaging:20.0.0') {
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'
}
// OSS License, gplay flavor only
gplayImplementation 'com.google.android.gms:play-services-oss-licenses:17.0.0'
implementation "androidx.emoji:emoji-appcompat:1.0.0"
implementation 'com.github.BillCarsonFr:JsonViewer:0.5'
2020-02-12 16:48:11 +01:00
2020-01-22 14:19:04 +01:00
// QR-code
// Stick to 3.3.3 because of https://github.com/zxing/zxing/issues/1170
implementation 'com.google.zxing:core:3.3.3'
2020-01-22 14:19:04 +01:00
implementation 'me.dm7.barcodescanner:zxing:1.9.13'
// TESTS
2018-10-03 17:56:33 +02:00
testImplementation 'junit:junit:4.12'
2020-02-06 23:22:07 +01:00
testImplementation 'org.amshove.kluent:kluent-android:1.44'
2020-04-28 14:15:23 +02:00
// Plant Timber tree for test
testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1'
2020-02-06 23:22:07 +01:00
2020-04-28 14:15:23 +02:00
androidTestImplementation 'androidx.test:core:1.2.0'
2019-07-02 09:39:45 +02:00
androidTestImplementation 'androidx.test:runner:1.2.0'
2020-04-28 14:15:23 +02:00
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
2019-07-02 09:39:45 +02:00
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
2020-02-06 23:22:07 +01:00
androidTestImplementation 'org.amshove.kluent:kluent-android:1.44'
2020-04-28 14:15:23 +02:00
androidTestImplementation "androidx.arch.core:core-testing:$arch_version"
// Plant Timber tree for test
androidTestImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1'
2018-10-03 17:56:33 +02:00
}
2018-10-19 14:26:38 +02:00
if (getGradle().getStartParameter().getTaskRequests().toString().contains("Gplay")) {
apply plugin: 'com.google.gms.google-services'
}