2019-08-07 17:46:38 +08:00
import com.android.build.OutputFile
2018-10-03 23:56:33 +08:00
apply plugin: 'com.android.application'
2019-06-18 23:42:07 +08:00
apply plugin: 'com.google.android.gms.oss-licenses-plugin'
2018-10-03 23:56:33 +08:00
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
2018-10-19 20:26:38 +08:00
apply plugin: 'kotlin-kapt'
kapt {
correctErrorTypes = true
}
2018-10-03 23:56:33 +08:00
2018-12-30 00:54:03 +08:00
androidExtensions {
experimental = true
}
2019-07-11 22:49:06 +08:00
ext . versionMajor = 0
2019-12-12 01:34:06 +08:00
ext . versionMinor = 11
2019-12-06 01:19:20 +08:00
ext . versionPatch = 0
2019-01-30 19:55:35 +08:00
2019-03-19 01:53:14 +08:00
static def getGitTimestamp ( ) {
2019-03-13 20:10:36 +08:00
def cmd = 'git show -s --format=%ct'
return cmd . execute ( ) . text . trim ( ) as Long
}
2019-03-14 00:00:30 +08:00
static def generateVersionCodeFromTimestamp ( ) {
2019-01-30 19:55:35 +08:00
// It's unix timestamp divided by 10: It's incremented by one every 10 seconds.
2019-03-13 20:10:36 +08:00
return ( getGitTimestamp ( ) / 10 ) . toInteger ( )
2019-01-30 19:55:35 +08:00
}
def generateVersionCodeFromVersionName ( ) {
2019-08-14 16:43:47 +08:00
return versionMajor * 1 _00_00 + versionMinor * 1 _00 + versionPatch
}
def getVersionCode ( ) {
if ( gitBranchName ( ) = = "develop" ) {
return generateVersionCodeFromTimestamp ( )
} else {
return generateVersionCodeFromVersionName ( )
}
2019-01-30 19:55:35 +08:00
}
2019-03-14 00:00:30 +08:00
static def gitRevision ( ) {
def cmd = "git rev-parse --short HEAD"
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 ( ) {
2019-09-12 22:05:04 +08:00
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-14 00:00:30 +08:00
}
2019-08-08 22:57:03 +08:00
static def getVersionSuffix ( ) {
if ( gitBranchName ( ) = = "master" ) {
return ""
} else {
return "-dev"
}
}
2019-02-11 20:47:47 +08:00
project . android . buildTypes . all { buildType - >
buildType . javaCompileOptions . annotationProcessorOptions . arguments =
[
2019-03-12 15:29:49 +08:00
validateEpoxyModelUsage: String . valueOf ( buildType . name = = 'debug' )
2019-02-11 20:47:47 +08:00
]
}
2019-08-07 17:46:38 +08:00
// map for the version codes
// x86 must have greater values than arm, see https://software.intel.com/en-us/android/articles/google-play-supports-cpu-architecture-filtering-for-multiple-apk
// 64 bits have greater value than 32 bits
ext . abiVersionCodes = [ "armeabi-v7a" : 1 , "arm64-v8a" : 2 , "x86" : 3 , "x86_64" : 4 ] . withDefault { 0 }
2019-09-12 22:05:04 +08:00
def buildNumber = System . env . BUILDKITE_BUILD_NUMBER as Integer ? : 0
2019-03-14 00:00:30 +08:00
2018-10-03 23:56:33 +08:00
android {
compileSdkVersion 28
defaultConfig {
2019-07-02 23:27:08 +08:00
applicationId "im.vector.riotx"
2019-06-28 16:06:36 +08:00
// 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
2018-10-03 23:56:33 +08:00
targetSdkVersion 28
2019-01-24 23:30:05 +08:00
multiDexEnabled true
2019-07-11 22:49:06 +08:00
2019-08-14 16:43:47 +08: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 22:49:06 +08:00
2019-08-08 22:57:03 +08:00
versionName "${versionMajor}.${versionMinor}.${versionPatch}${getVersionSuffix()}"
2019-03-14 00:00:30 +08:00
2019-06-21 17:13:16 +08:00
buildConfigField "String" , "GIT_REVISION" , "\"${gitRevision()}\""
2019-03-14 00:00:30 +08:00
resValue "string" , "git_revision" , "\"${gitRevision()}\""
2019-06-21 17:13:16 +08:00
buildConfigField "String" , "GIT_REVISION_DATE" , "\"${gitRevisionDate()}\""
2019-03-14 00:00:30 +08:00
resValue "string" , "git_revision_date" , "\"${gitRevisionDate()}\""
2019-06-21 17:13:16 +08:00
buildConfigField "String" , "GIT_BRANCH_NAME" , "\"${gitBranchName()}\""
2019-03-14 00:00:30 +08:00
resValue "string" , "git_branch_name" , "\"${gitBranchName()}\""
2019-06-21 17:13:16 +08:00
buildConfigField "String" , "BUILD_NUMBER" , "\"${buildNumber}\""
2019-03-14 00:00:30 +08:00
resValue "string" , "build_number" , "\"${buildNumber}\""
2019-01-17 02:25:43 +08:00
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2019-08-07 17:46:38 +08:00
// 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
}
}
2019-08-07 22:51:39 +08:00
applicationVariants . all { variant - >
2019-08-07 17:46:38 +08:00
variant . outputs . each { output - >
def baseAbiVersionCode = project . ext . abiVersionCodes . get ( output . getFilter ( OutputFile . ABI ) )
2019-08-07 22:51:39 +08:00
// Known limitation: it does not modify the value in the BuildConfig.java generated file
2019-08-07 17:46:38 +08:00
output . versionCodeOverride = baseAbiVersionCode * 10 _000_000 + variant . versionCode
}
}
2018-10-03 23:56:33 +08:00
}
2019-03-14 00:00:30 +08:00
2019-06-07 16:17:14 +08:00
signingConfigs {
debug {
keyAlias 'androiddebugkey'
keyPassword 'android'
storeFile file ( './signature/debug.keystore' )
storePassword 'android'
}
}
2018-10-03 23:56:33 +08:00
buildTypes {
2019-03-13 22:11:02 +08:00
debug {
2019-07-11 23:59:07 +08:00
applicationIdSuffix ".debug"
resValue "string" , "app_name" , "RiotX dbg"
2019-03-13 22:11:02 +08:00
resValue "bool" , "debug_mode" , "true"
2019-04-03 00:08:43 +08:00
buildConfigField "boolean" , "LOW_PRIVACY_LOG_ENABLE" , "false"
2019-06-07 16:17:14 +08:00
signingConfig signingConfigs . debug
2019-03-13 22:11:02 +08:00
}
2018-10-03 23:56:33 +08:00
release {
2019-07-11 23:59:07 +08:00
resValue "string" , "app_name" , "RiotX"
2019-03-13 22:11:02 +08:00
resValue "bool" , "debug_mode" , "false"
2019-04-03 00:08:43 +08:00
buildConfigField "boolean" , "LOW_PRIVACY_LOG_ENABLE" , "false"
2019-03-13 22:11:02 +08:00
2018-10-03 23:56:33 +08:00
minifyEnabled false
proguardFiles getDefaultProguardFile ( 'proguard-android.txt' ) , 'proguard-rules.pro'
}
}
2018-12-13 18:00:50 +08:00
2019-03-14 00:00:30 +08:00
flavorDimensions "store"
productFlavors {
2019-03-19 21:38:15 +08:00
gplay {
2019-03-14 00:00:30 +08:00
dimension "store"
buildConfigField "boolean" , "ALLOW_FCM_USE" , "true"
buildConfigField "String" , "SHORT_FLAVOR_DESCRIPTION" , "\"G\""
buildConfigField "String" , "FLAVOR_DESCRIPTION" , "\"GooglePlay\""
}
2019-03-19 21:38:15 +08:00
fdroid {
2019-03-14 00:00:30 +08:00
dimension "store"
buildConfigField "boolean" , "ALLOW_FCM_USE" , "false"
buildConfigField "String" , "SHORT_FLAVOR_DESCRIPTION" , "\"F\""
buildConfigField "String" , "FLAVOR_DESCRIPTION" , "\"FDroid\""
}
}
lintOptions {
2019-04-03 18:04:24 +08:00
lintConfig file ( "lint.xml" )
2019-03-14 00:00:30 +08:00
}
2018-12-13 18:00:50 +08:00
compileOptions {
sourceCompatibility JavaVersion . VERSION_1_8
targetCompatibility JavaVersion . VERSION_1_8
}
2019-09-27 17:42:46 +08:00
kotlinOptions {
jvmTarget = "1.8"
}
2018-10-03 23:56:33 +08:00
}
dependencies {
2018-10-19 20:26:38 +08:00
2019-09-27 19:49:55 +08:00
def epoxy_version = '3.8.0'
2019-11-05 02:33:56 +08:00
def fragment_version = '1.2.0-rc01'
2019-01-17 02:25:43 +08:00
def arrow_version = "0.8.2"
2019-10-07 20:13:30 +08:00
def coroutines_version = "1.3.2"
2019-10-30 02:08:48 +08:00
def markwon_version = '4.1.2'
2019-11-28 16:39:04 +08:00
def big_image_viewer_version = '1.6.2'
2019-09-27 19:49:55 +08:00
def glide_version = '4.10.0'
2019-05-10 00:26:32 +08:00
def moshi_version = '1.8.0'
2019-09-27 19:49:55 +08:00
def daggerVersion = '2.24'
2019-11-21 18:02:12 +08:00
def autofill_version = "1.0.0-rc01"
2018-10-19 20:26:38 +08:00
2018-10-04 21:19:03 +08:00
implementation project ( ":matrix-sdk-android" )
2018-10-29 02:18:14 +08:00
implementation project ( ":matrix-sdk-android-rx" )
2019-12-11 17:44:51 +08:00
implementation project ( ":diff-match-patch" )
2019-01-24 23:30:05 +08:00
implementation 'com.android.support:multidex:1.0.3'
2018-10-03 23:56:33 +08:00
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
2019-02-28 00:17:47 +08:00
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
2019-01-17 22:04:57 +08:00
2019-09-27 17:42:46 +08:00
implementation 'androidx.appcompat:appcompat:1.1.0'
2019-11-05 02:33:56 +08:00
implementation "androidx.fragment:fragment:$fragment_version"
implementation "androidx.fragment:fragment-ktx:$fragment_version"
2019-07-03 05:06:40 +08:00
//Do not use beta2 at the moment, as it breaks things
2019-09-27 19:49:55 +08:00
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta1'
2019-09-27 17:42:46 +08:00
implementation 'androidx.core:core-ktx:1.1.0'
2019-01-25 01:04:55 +08:00
2019-10-02 02:11:15 +08:00
implementation "org.threeten:threetenbp:1.4.0:no-tzdb"
implementation "com.gabrielittner.threetenbp:lazythreetenbp:0.7.0"
2019-05-10 00:26:32 +08:00
implementation "com.squareup.moshi:moshi-adapters:$moshi_version"
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
2019-03-29 00:28:20 +08:00
2019-06-18 23:42:07 +08:00
// OSS License
implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0'
2019-03-29 00:28:20 +08:00
// Log
2018-10-16 21:52:30 +08:00
implementation 'com.jakewharton.timber:timber:4.7.1'
2019-03-29 00:28:20 +08:00
// Debug
2019-09-27 19:49:55 +08:00
implementation 'com.facebook.stetho:stetho:1.5.1'
2018-10-16 21:52:30 +08:00
2019-11-21 19:11:58 +08:00
// Phone number https://github.com/google/libphonenumber
implementation 'com.googlecode.libphonenumber:libphonenumber:8.10.23'
2018-12-30 02:57:38 +08:00
// rx
implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
2019-09-27 17:42:46 +08:00
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
2019-09-27 19:49:55 +08:00
implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.1'
2019-07-16 21:01:14 +08:00
// RXBinding
2019-09-12 21:14:17 +08:00
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-12-30 02:57:38 +08:00
2018-10-19 20:26:38 +08:00
implementation ( "com.airbnb.android:epoxy:$epoxy_version" )
kapt "com.airbnb.android:epoxy-processor:$epoxy_version"
2019-07-30 20:51:14 +08:00
implementation "com.airbnb.android:epoxy-paging:$epoxy_version"
2019-11-12 22:11:52 +08:00
implementation 'com.airbnb.android:mvrx:1.3.0'
2018-10-19 21:30:40 +08:00
2019-04-03 00:08:43 +08:00
// Work
2019-09-27 17:42:46 +08:00
implementation "androidx.work:work-runtime-ktx:2.3.0-alpha01"
2019-04-03 00:08:43 +08:00
2019-07-30 20:51:14 +08:00
// Paging
implementation "androidx.paging:paging-runtime-ktx:2.1.0"
2019-06-19 00:29:48 +08:00
// Functional Programming
2018-12-30 02:57:38 +08:00
implementation "io.arrow-kt:arrow-core:$arrow_version"
2019-03-28 18:53:28 +08:00
// Pref
2019-09-27 17:42:46 +08:00
implementation 'androidx.preference:preference:1.1.0'
2019-03-28 18:53:28 +08:00
2018-12-30 02:57:38 +08:00
// UI
2018-10-30 00:20:08 +08:00
implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1'
2019-10-11 16:10:16 +08:00
implementation 'com.google.android.material:material:1.1.0-beta01'
2019-02-20 18:39:25 +08:00
implementation 'me.gujun.android:span:1.7'
2019-10-30 02:08:48 +08:00
implementation "io.noties.markwon:core:$markwon_version"
implementation "io.noties.markwon:html:$markwon_version"
2019-12-18 17:57:00 +08:00
implementation 'com.googlecode.htmlcompressor:htmlcompressor:1.4'
2019-06-03 23:53:04 +08:00
implementation 'me.saket:better-link-movement-method:2.2.0'
2019-10-04 01:15:11 +08:00
implementation 'com.google.android:flexbox:1.1.1'
2019-11-21 18:02:12 +08:00
implementation "androidx.autofill:autofill:$autofill_version"
2019-02-22 02:21:08 +08:00
2019-05-16 16:23:57 +08:00
// Passphrase strength helper
2019-09-27 19:49:55 +08:00
implementation 'com.nulab-inc:zxcvbn:1.2.7'
2019-05-16 16:23:57 +08:00
//Alerter
2019-06-12 22:30:30 +08:00
implementation 'com.tapadoo.android:alerter:4.0.3'
2019-05-16 16:23:57 +08:00
2019-04-08 21:51:35 +08:00
implementation 'com.otaliastudios:autocomplete:1.1.0'
2019-03-28 18:53:28 +08:00
// Butterknife
2019-09-27 19:49:55 +08:00
implementation 'com.jakewharton:butterknife:10.2.0'
kapt 'com.jakewharton:butterknife-compiler:10.2.0'
2019-03-28 18:53:28 +08:00
// Shake detection
implementation 'com.squareup:seismic:1.0.2'
2019-03-12 15:29:49 +08:00
// 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"
2019-04-12 19:46:59 +08:00
implementation 'com.danikula:videocache:2.7.1'
2018-10-30 00:20:08 +08:00
2019-04-03 00:08:43 +08:00
// Badge for compatibility
2019-09-27 19:49:55 +08:00
implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
2019-04-03 00:08:43 +08:00
2019-04-11 19:21:51 +08:00
// File picker
2019-10-10 01:51:00 +08:00
implementation 'com.kbeanie:multipicker:1.6@aar'
2019-04-04 04:54:48 +08:00
2018-12-30 02:57:38 +08:00
// DI
2019-06-19 02:00:20 +08:00
implementation "com.google.dagger:dagger:$daggerVersion"
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
2019-09-27 19:49:55 +08: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 23:56:33 +08:00
2019-04-03 00:08:43 +08:00
// gplay flavor only
2019-09-27 17:42:46 +08:00
// 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' ) {
2019-06-27 16:42:22 +08:00
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'
}
2019-04-03 00:08:43 +08:00
2019-08-19 02:26:53 +08:00
implementation "androidx.emoji:emoji-appcompat:1.0.0"
2018-12-30 02:57:38 +08:00
// TESTS
2018-10-03 23:56:33 +08:00
testImplementation 'junit:junit:4.12'
2019-07-02 15:39:45 +08:00
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
2018-10-03 23:56:33 +08:00
}
2018-10-19 20:26:38 +08:00
2019-07-04 00:18:07 +08:00
if ( getGradle ( ) . getStartParameter ( ) . getTaskRequests ( ) . toString ( ) . contains ( "Gplay" ) ) {
2019-04-03 00:08:43 +08:00
apply plugin: 'com.google.gms.google-services'
}