281 lines
10 KiB
Groovy
281 lines
10 KiB
Groovy
loadConfig('config.gradle')
|
|
|
|
// Publishing settings
|
|
project.group = config.publish.group
|
|
project.version = config.publish.versionName
|
|
project.ext.POM_ARTIFACT_ID = config.publish.artifactId
|
|
|
|
buildscript {
|
|
repositories {
|
|
mavenLocal()
|
|
google()
|
|
mavenCentral()
|
|
jcenter()
|
|
maven {
|
|
url 'https://jitpack.io'
|
|
}
|
|
maven {
|
|
url "https://plugins.gradle.org/m2/"
|
|
}
|
|
}
|
|
dependencies {
|
|
//noinspection GradlePluginVersion
|
|
classpath "com.android.tools.build:gradle:_"
|
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:_"
|
|
classpath "org.jetbrains.kotlin:kotlin-allopen:_"
|
|
classpath "org.jetbrains.dokka:dokka-gradle-plugin:_"
|
|
classpath "com.google.protobuf:protobuf-gradle-plugin:_"
|
|
classpath 'com.github.str4d:rust-android-gradle:68b4ecc053'
|
|
classpath 'org.owasp:dependency-check-gradle:_'
|
|
classpath 'com.vanniktech:gradle-maven-publish-plugin:_'
|
|
}
|
|
}
|
|
|
|
apply from: 'custom-tasks.gradle'
|
|
apply from: "$rootDir/ktlint.gradle"
|
|
apply plugin: 'com.android.library'
|
|
apply plugin: 'kotlin-android'
|
|
apply plugin: 'kotlin-kapt'
|
|
apply plugin: 'kotlin-allopen'
|
|
apply plugin: 'org.jetbrains.dokka'
|
|
apply plugin: 'com.google.protobuf'
|
|
apply plugin: 'org.mozilla.rust-android-gradle.rust-android'
|
|
apply plugin: 'org.owasp.dependencycheck'
|
|
apply plugin: 'com.vanniktech.maven.publish'
|
|
//apply from: 'ci.gradle'
|
|
|
|
|
|
repositories {
|
|
google()
|
|
mavenCentral()
|
|
jcenter()
|
|
maven { url 'https://jitpack.io' }
|
|
}
|
|
|
|
android {
|
|
compileSdkVersion config.compileSdkVersion
|
|
|
|
useLibrary 'android.test.runner'
|
|
|
|
ndkVersion "21.1.6352462"
|
|
|
|
defaultConfig {
|
|
minSdkVersion config.minSdkVersion
|
|
targetSdkVersion config.targetSdkVersion
|
|
versionCode = config.publish.versionCode
|
|
versionName = config.publish.versionName
|
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
|
testInstrumentationRunnerArguments clearPackageData: 'true'
|
|
multiDexEnabled true
|
|
archivesBaseName = "zcash-android-sdk-${config.publish.name}"
|
|
|
|
javaCompileOptions {
|
|
annotationProcessorOptions {
|
|
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
debug {
|
|
// for test builds, which exceed the dex limit because they pull in things like mockito and grpc-testing
|
|
multiDexEnabled true
|
|
minifyEnabled false
|
|
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
|
|
}
|
|
release {
|
|
multiDexEnabled false
|
|
minifyEnabled false
|
|
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
|
|
}
|
|
}
|
|
|
|
sourceSets {
|
|
main {
|
|
java {
|
|
srcDirs "build/generated/source/grpc"
|
|
}
|
|
proto {
|
|
srcDir 'src/main/proto'
|
|
}
|
|
}
|
|
}
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_1_8
|
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
}
|
|
|
|
// ExperimentalCoroutinesApi and FlowPreview help to clear the build warnings
|
|
kotlinOptions {
|
|
jvmTarget = "1.8"
|
|
freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"
|
|
freeCompilerArgs += "-Xopt-in=kotlinx.coroutines.FlowPreview"
|
|
// Tricky: fix: By default, the kotlin_module name will not include the version (in classes.jar/META-INF). Instead it has a colon, which breaks compilation on Windows. This is one way to set it explicitly to the proper value. See https://github.com/zcash/zcash-android-wallet-sdk/issues/222 for more info.
|
|
freeCompilerArgs += ["-module-name", "${config.publish.artifactId}-${config.publish.versionName}_${config.publish.target}"]
|
|
}
|
|
|
|
packagingOptions {
|
|
exclude 'META-INF/DEPENDENCIES'
|
|
exclude 'META-INF/LICENSE'
|
|
exclude 'META-INF/LICENSE.txt'
|
|
exclude 'META-INF/license.txt'
|
|
exclude 'META-INF/NOTICE'
|
|
exclude 'META-INF/NOTICE.txt'
|
|
exclude 'META-INF/notice.txt'
|
|
exclude 'META-INF/ASL2.0'
|
|
exclude 'META-INF/LICENSE.md'
|
|
exclude 'META-INF/LICENSE-notice.md'
|
|
}
|
|
}
|
|
mavenPublish {
|
|
androidVariantToPublish = config.publish.target
|
|
}
|
|
|
|
allOpen {
|
|
// marker for classes that we want to be able to extend in debug builds for testing purposes
|
|
annotation 'cash.z.ecc.android.sdk.annotation.OpenClass'
|
|
}
|
|
|
|
clean {
|
|
delete "$project.projectDir/src/generated/source/grpc"
|
|
}
|
|
|
|
dokkaHtml.configure {
|
|
dokkaSourceSets {
|
|
configureEach {
|
|
outputDirectory.set(file("build/docs/rtd"))
|
|
displayName.set("Zcash Android SDK")
|
|
includes.from("packages.md")
|
|
// samples.from("samples/basic.kt", "samples/advanced.kt")
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
protobuf {
|
|
generatedFilesBaseDir = "$projectDir/src/generated/source/grpc"
|
|
protoc { artifact = 'com.google.protobuf:protoc:3.14.0' }
|
|
plugins {
|
|
grpc { artifact = "io.grpc:protoc-gen-grpc-java:1.37.0" }
|
|
}
|
|
generateProtoTasks {
|
|
all().each { task ->
|
|
task.builtins {
|
|
java {
|
|
option "lite"
|
|
}
|
|
}
|
|
task.plugins {
|
|
grpc {
|
|
option 'lite'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
cargo {
|
|
module = "."
|
|
libname = "zcashwalletsdk"
|
|
targets = [
|
|
"arm",
|
|
"arm64",
|
|
"x86",
|
|
"x86_64"
|
|
]
|
|
profile = "release"
|
|
forceTargets = true
|
|
prebuiltToolchains = true
|
|
}
|
|
|
|
dependencies {
|
|
|
|
implementation AndroidX.appCompat
|
|
|
|
// Architecture Components: Lifecycle
|
|
implementation AndroidX.lifecycle.runtimeKtx
|
|
implementation AndroidX.lifecycle.commonJava8
|
|
|
|
// Architecture Components: Room
|
|
implementation AndroidX.room.ktx
|
|
implementation AndroidX.paging.runtimeKtx
|
|
kapt AndroidX.room.compiler
|
|
|
|
// Kotlin
|
|
implementation Kotlin.stdlib.jdk8
|
|
implementation KotlinX.coroutines.core
|
|
implementation KotlinX.coroutines.android
|
|
|
|
// grpc-java
|
|
implementation "io.grpc:grpc-okhttp:_"
|
|
implementation "io.grpc:grpc-android:_"
|
|
implementation "io.grpc:grpc-protobuf-lite:_"
|
|
implementation "io.grpc:grpc-stub:_"
|
|
compileOnly 'javax.annotation:javax.annotation-api:_'
|
|
|
|
|
|
//
|
|
// Locked Versions
|
|
// these should be checked regularly and removed when possible
|
|
|
|
// solves error: Duplicate class com.google.common.util.concurrent.ListenableFuture found in modules jetified-guava-26.0-android.jar (com.google.guava:guava:26.0-android) and listenablefuture-1.0.jar (com.google.guava:listenablefuture:1.0)
|
|
// per this recommendation from Chris Povirk, given guava's decision to split ListenableFuture away from Guava: https://groups.google.com/d/msg/guava-discuss/GghaKwusjcY/bCIAKfzOEwAJ
|
|
implementation 'com.google.guava:guava:30.0-android'
|
|
// Transitive dependencies used because they're already necessary for other libraries
|
|
// GSON is available as a transitive dependency from several places so we use it for processing
|
|
// checkpoints but also document that by explicitly including here. If dependencies like Room
|
|
// or grpc-okhttp stop including GSON, then we should switch to something else for parsing JSON.
|
|
implementation 'com.google.code.gson:gson:2.8.6'
|
|
// OKIO is a transitive dependency used when writing param files to disk. Like GSON, this can be
|
|
// replaced if needed. For compatibility, we match the library version used in grpc-okhttp:
|
|
// https://github.com/grpc/grpc-java/blob/v1.37.x/build.gradle#L159
|
|
implementation 'com.squareup.okio:okio:1.17.5'
|
|
|
|
// Tests
|
|
testImplementation 'androidx.multidex:multidex:_'
|
|
testImplementation "org.jetbrains.kotlin:kotlin-reflect:_"
|
|
testImplementation 'org.mockito:mockito-junit-jupiter:_'
|
|
testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:_'
|
|
testImplementation "org.junit.jupiter:junit-jupiter-api:_"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-engine:_"
|
|
testImplementation "org.junit.jupiter:junit-jupiter-migrationsupport:_"
|
|
testImplementation "io.grpc:grpc-testing:_"
|
|
|
|
// NOTE: androidTests will use JUnit4, while src/test/java tests will leverage Junit5
|
|
// Attempting to use JUnit5 via https://github.com/mannodermaus/android-junit5 was painful. The plugin configuration
|
|
// was buggy, crashing in several places. It also would require a separate test flavor because it's minimum API 26
|
|
// because "JUnit 5 uses Java 8-specific APIs that didn't exist on Android before the Oreo release."
|
|
androidTestImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:_'
|
|
androidTestImplementation 'org.mockito:mockito-android:_'
|
|
androidTestImplementation "androidx.test:runner:_"
|
|
androidTestImplementation 'com.android.support:support-annotations:_'
|
|
androidTestImplementation "androidx.test:core:_"
|
|
androidTestImplementation "androidx.arch.core:core-testing:_"
|
|
androidTestImplementation 'androidx.test.ext:junit:_'
|
|
androidTestImplementation 'ru.gildor.coroutines:kotlin-coroutines-okhttp:_'
|
|
// used by 'ru.gildor.coroutines.okhttp.await' (to make simple suspended requests) and breaks on versions higher than 3.8.0
|
|
androidTestImplementation "com.squareup.okhttp3:okhttp:3.8.0"
|
|
|
|
// sample mnemonic plugin
|
|
androidTestImplementation 'com.github.zcash:zcash-android-wallet-plugins:_'
|
|
androidTestImplementation 'cash.z.ecc.android:kotlin-bip39:_'
|
|
}
|
|
|
|
//taskTree{
|
|
// noRepeat = true //do not print a sub-tree in the task-tree more than once
|
|
// impliesSubProjects = true //do not print task-tree for child projects in a multi-project
|
|
// taskDepth = 2 // limit tree depth to 3. Equivalent to running with the --task-depth option.
|
|
//}
|
|
|
|
defaultTasks 'ciBuild'
|
|
|
|
preBuild.dependsOn('ktlintFormat')
|
|
preBuild.dependsOn('ktlint')
|
|
preBuild.dependsOn includeDirBugFix
|
|
|
|
//check.dependsOn dependencyCheckAggregate
|
|
|
|
def loadConfig(fileName) {
|
|
def config = new ConfigSlurper().parse(file(fileName).toURL())
|
|
project.ext.config = config
|
|
} |