zcash-android-wallet/app/build.gradle

196 lines
7.3 KiB
Groovy

import cash.z.ecc.android.Deps
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: "androidx.navigation.safeargs.kotlin"
apply plugin: 'com.github.ben-manes.versions'
archivesBaseName = 'zcash-android-wallet'
group = 'cash.z.ecc.android'
version = Deps.versionName
android {
ndkVersion "21.1.6352462"
compileSdkVersion Deps.compileSdkVersion
defaultConfig {
applicationId Deps.packageName
minSdkVersion Deps.minSdkVersion
targetSdkVersion Deps.targetSdkVersion
versionCode = Deps.versionCode
versionName = Deps.versionName
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
if (Boolean.parseBoolean(isUseTestOrchestrator)) {
testInstrumentationRunnerArguments clearPackageData: 'true'
}
multiDexEnabled true
resValue 'string', 'bugsnag_api_key', "${(project.findProperty('BUGSNAG_API_KEY') ?: System.getenv('BUGSNAG_API_KEY')) ?: ''}"
// this setting allows using color resources in vector drawables, rather than hardcoded values (note: only works when minApi is 21)
// per https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.VectorDrawablesOptions.html: If set to an empty collection, all special handling of vector drawables will be disabled.
vectorDrawables.generatedDensities = []
}
buildFeatures {
viewBinding true
buildConfig = true
}
flavorDimensions 'network'
productFlavors {
// would rather name them "testnet" and "mainnet" but product flavor names cannot start with the word "test"
zcashtestnet {
dimension 'network'
applicationId 'cash.z.ecc.android.testnet'
buildConfigField "String", "DEFAULT_SERVER_URL", '"lightwalletd.testnet.electriccoin.co"'
matchingFallbacks = ['zcashtestnet', 'debug']
}
zcashmainnet {
dimension 'network'
buildConfigField "String", "DEFAULT_SERVER_URL", '"lightwalletd.electriccoin.co"'
matchingFallbacks = ['zcashmainnet', 'release']
}
}
signingConfigs {
placeholder {
storeFile file("${rootProject.projectDir}/placeholder.keystore")
keyAlias "androiddebugkey"
keyPassword "android"
storePassword "android"
}
}
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.placeholder
}
debug {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
// builds for testing only in the wallet team, typically unfinished features
// this flavor can be installed alongside the others
qa {
initWith debug
debuggable true
applicationIdSuffix ".internal"
matchingFallbacks = ['debug']
signingConfig signingConfigs.placeholder
}
}
def javaVersion = JavaVersion.toVersion(project.property("ANDROID_JVM_TARGET"))
compileOptions {
// enable support for new language APIs but also fix the issue with zxing on API < 24
coreLibraryDesugaringEnabled true
sourceCompatibility javaVersion
targetCompatibility javaVersion
}
kotlinOptions {
jvmTarget = javaVersion.toString()
freeCompilerArgs += "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"
freeCompilerArgs += "-opt-in=kotlin.time.ExperimentalTime"
// freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.ObsoleteCoroutinesApi"
// freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.FlowPreview"
}
testOptions {
if (Boolean.parseBoolean(isUseTestOrchestrator)) {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
kapt {
arguments {
arg 'dagger.fastInit', 'enabled'
arg 'dagger.fullBindingGraphValidation', 'ERROR'
}
}
packagingOptions {
resources {
excludes += ['META-INF/AL2.0', 'META-INF/LGPL2.1']
}
}
namespace 'cash.z.ecc.android'
applicationVariants.all { variant ->
variant.outputs.all {
if (variant.buildType.name == "qa") {
it.versionNameOverride = "${Deps.versionName}-QA"
}
outputFileName = "$archivesBaseName-v${Deps.versionName}-${variant.buildType.name}.apk"
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project(':qrecycler')
implementation project(':feedback')
implementation project(':mnemonic')
implementation project(':lockbox')
// Zcash
implementation Deps.Zcash.ANDROID_WALLET_PLUGINS
implementation Deps.Zcash.SDK
// Kotlin
implementation Deps.Kotlin.STDLIB
// Android
implementation Deps.AndroidX.ANNOTATION
implementation Deps.AndroidX.APPCOMPAT
implementation Deps.AndroidX.BIOMETRICS
implementation Deps.AndroidX.CONSTRAINT_LAYOUT
implementation Deps.AndroidX.CORE_KTX
implementation Deps.AndroidX.FRAGMENT_KTX
implementation Deps.AndroidX.LEGACY
implementation Deps.AndroidX.PAGING
implementation Deps.AndroidX.RECYCLER
implementation Deps.AndroidX.CameraX.CAMERA2
implementation Deps.AndroidX.CameraX.CORE
implementation Deps.AndroidX.CameraX.LIFECYCLE
implementation Deps.AndroidX.CameraX.View.EXT
implementation Deps.AndroidX.CameraX.View.VIEW
implementation Deps.AndroidX.Lifecycle.LIFECYCLE_RUNTIME_KTX
implementation Deps.AndroidX.Navigation.FRAGMENT_KTX
implementation Deps.AndroidX.Navigation.UI_KTX
implementation Deps.AndroidX.Room.ROOM_KTX
kapt Deps.AndroidX.Room.ROOM_COMPILER
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
// Google
implementation Deps.Google.GUAVA
implementation Deps.Google.MATERIAL
// grpc-java
implementation Deps.Grpc.ANDROID
implementation Deps.Grpc.OKHTTP
implementation Deps.Grpc.PROTOBUG
implementation Deps.Grpc.STUB
implementation 'com.squareup.okio:okio:2.8.0'
implementation Deps.JavaX.JAVA_ANNOTATION
// Misc.
implementation Deps.Misc.LOTTIE
implementation Deps.Misc.CHIPS
implementation Deps.Misc.Plugins.QR_SCANNER
// Tests
testImplementation Deps.Test.JUNIT
testImplementation Deps.Test.MOKITO
testImplementation Deps.Test.MOKITO_KOTLIN
androidTestImplementation Deps.Kotlin.REFLECT
testImplementation(Deps.Kotlin.Coroutines.TEST)
androidTestImplementation Deps.Test.Android.JUNIT
androidTestImplementation Deps.Test.Android.CORE
androidTestImplementation Deps.Test.Android.FRAGMENT
androidTestImplementation Deps.Test.Android.ESPRESSO
androidTestImplementation Deps.Test.Android.ESPRESSO_INTENTS
androidTestImplementation Deps.Test.Android.NAVIGATION
// androidTestImplementation is preferred, but then the androidx.fragment.app.testing.FragmentScenario$EmptyFragmentActivity isn't available
debugImplementation Deps.Test.Android.FRAGMENT
}
defaultTasks 'clean', 'assembleZcashmainnetRelease'