| plugins { |
| id 'com.android.application' |
| id 'org.jetbrains.kotlin.android' |
| id 'org.jlleitschuh.gradle.ktlint' |
| } |
| |
| def gitDescribe = { -> |
| def stdout = new ByteArrayOutputStream() |
| exec { |
| commandLine 'git', 'describe', '--always', '--tags', '--dirty=-dirty' |
| standardOutput = stdout |
| } |
| return stdout.toString().trim() |
| } |
| |
| android { |
| namespace 'com.stevesoltys.seedvault' |
| compileSdk rootProject.ext.compileSdk |
| |
| defaultConfig { |
| minSdk 32 // leave at 32 for robolectric tests |
| targetSdk rootProject.ext.targetSdk |
| versionNameSuffix "-$gitDescribe" |
| testInstrumentationRunner "com.stevesoltys.seedvault.KoinInstrumentationTestRunner" |
| testInstrumentationRunnerArguments disableAnalytics: 'true' |
| |
| if (project.hasProperty('instrumented_test_size')) { |
| final testSize = project.getProperty('instrumented_test_size') |
| println("Instrumented test size: $testSize") |
| |
| testInstrumentationRunnerArguments size: testSize |
| } |
| } |
| |
| buildTypes { |
| release { |
| minifyEnabled false |
| } |
| } |
| |
| lint { |
| disable "DialogFragmentCallbacksDetector", |
| "InvalidFragmentVersionForActivityResult", |
| "CheckedExceptions" |
| abortOnError true |
| } |
| compileOptions { |
| sourceCompatibility = JavaVersion.VERSION_11 |
| targetCompatibility = JavaVersion.VERSION_11 |
| } |
| kotlinOptions { |
| jvmTarget = JavaVersion.VERSION_11.toString() |
| languageVersion = "1.7" |
| } |
| testOptions { |
| unitTests.all { |
| useJUnitPlatform() |
| testLogging { |
| events "passed", "skipped", "failed" |
| } |
| } |
| unitTests { |
| includeAndroidResources = true |
| } |
| } |
| |
| sourceSets { |
| test { |
| java.srcDirs += "$projectDir/src/sharedTest/java" |
| } |
| androidTest { |
| java.srcDirs += "$projectDir/src/sharedTest/java" |
| } |
| } |
| |
| signingConfigs { |
| aosp { |
| // Generated from the AOSP platform key: |
| // https://android.googlesource.com/platform/build/+/refs/tags/android-11.0.0_r29/target/product/security/platform.pk8 |
| keyAlias "platform" |
| keyPassword "platform" |
| storeFile file("development/platform.jks") |
| storePassword "platform" |
| } |
| } |
| |
| buildTypes.release.signingConfig = signingConfigs.aosp |
| buildTypes.debug.signingConfig = signingConfigs.aosp |
| } |
| |
| dependencies { |
| compileOnly rootProject.ext.aosp_libs |
| |
| /** |
| * Dependencies in AOSP |
| * |
| * We try to keep the dependencies in sync with what AOSP ships as Seedvault is meant to be built |
| * with the AOSP build system and gradle builds are just for more pleasant development. |
| * Using the AOSP versions in gradle builds allows us to spot issues early on. |
| */ |
| implementation rootProject.ext.kotlin_libs.std |
| // These coroutine libraries get upgraded otherwise to versions incompatible with kotlin version |
| implementation rootProject.ext.kotlin_libs.coroutines |
| |
| implementation rootProject.ext.std_libs.androidx_core |
| // A newer version gets pulled in with AOSP via core, so we include fragment here explicitly |
| implementation rootProject.ext.std_libs.androidx_fragment |
| implementation rootProject.ext.std_libs.androidx_activity |
| implementation rootProject.ext.std_libs.androidx_preference |
| implementation rootProject.ext.std_libs.androidx_lifecycle_viewmodel_ktx |
| implementation rootProject.ext.std_libs.androidx_lifecycle_livedata_ktx |
| implementation rootProject.ext.std_libs.androidx_constraintlayout |
| implementation rootProject.ext.std_libs.androidx_documentfile |
| implementation rootProject.ext.std_libs.com_google_android_material |
| |
| implementation rootProject.ext.storage_libs.com_google_crypto_tink_android |
| |
| /** |
| * Storage Dependencies |
| */ |
| implementation project(':storage:lib') |
| |
| /** |
| * External Dependencies |
| * |
| * If the dependencies below are updated, |
| * please make sure to update the prebuilt libraries and the Android.bp files |
| * in the top-level `libs` folder to reflect that. |
| * You can copy these libraries from ~/.gradle/caches/modules-2/files-2.1 |
| */ |
| // later versions than 2.1.1 require newer kotlin version |
| // implementation "io.insert-koin:koin-core-jvm:3.2.0" |
| // implementation "io.insert-koin:koin-android:3.2.0" |
| implementation fileTree(include: ['*.jar'], dir: "${rootProject.rootDir}/libs/koin-android") |
| implementation fileTree(include: ['*.aar'], dir: "${rootProject.rootDir}/libs/koin-android") |
| |
| // implementation "cash.z.ecc.android:kotlin-bip39:1.0.4" |
| implementation fileTree(include: ['kotlin-bip39-jvm-1.0.4.jar'], dir: "${rootProject.rootDir}/libs") |
| |
| /** |
| * Test Dependencies (do not concern the AOSP build) |
| */ |
| lintChecks rootProject.ext.lint_libs.exceptions |
| |
| // anything less than 'implementation' fails tests run with gradlew |
| testImplementation rootProject.ext.aosp_libs |
| testImplementation 'androidx.test.ext:junit:1.1.3' |
| testImplementation('org.robolectric:robolectric:4.8.1') { |
| // https://github.com/robolectric/robolectric/issues/5245 |
| exclude group: "com.google.auto.service", module: "auto-service" |
| } |
| testImplementation 'org.hamcrest:hamcrest:2.2' |
| testImplementation "org.junit.jupiter:junit-jupiter-api:$junit5_version" |
| testImplementation "org.junit.jupiter:junit-jupiter-params:$junit5_version" |
| testImplementation "io.mockk:mockk:$mockk_version" |
| testImplementation 'org.bitcoinj:bitcoinj-core:0.15.10' |
| testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit5_version" |
| testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junit5_version" |
| |
| androidTestImplementation rootProject.ext.aosp_libs |
| androidTestImplementation 'androidx.test:runner:1.4.0' |
| androidTestImplementation 'androidx.test:rules:1.4.0' |
| androidTestImplementation 'androidx.test.ext:junit:1.1.3' |
| androidTestImplementation "io.mockk:mockk-android:$mockk_version" |
| |
| androidTestImplementation 'com.kaspersky.android-components:kaspresso:1.5.3' |
| } |
| |
| apply from: "${rootProject.rootDir}/gradle/ktlint.gradle" |
| |
| gradle.projectsEvaluated { |
| tasks.withType(JavaCompile) { |
| options.compilerArgs.add('-Xbootclasspath/p:app/libs/android.jar:app/libs/libcore.jar') |
| } |
| } |
| |
| configurations { |
| all { |
| resolutionStrategy { |
| failOnNonReproducibleResolution() |
| } |
| } |
| } |
| |
| tasks.register('provisionEmulator', Exec) { |
| group("emulator") |
| |
| dependsOn(tasks.assembleRelease) |
| |
| doFirst { |
| commandLine "${project.projectDir}/development/scripts/provision_emulator.sh", |
| "seedvault", |
| "system-images;android-33;google_apis;x86_64" |
| |
| environment "ANDROID_SDK_HOME", android.sdkDirectory.absolutePath |
| environment "JAVA_HOME", System.properties['java.home'] |
| } |
| } |
| |
| tasks.register('startEmulator', Exec) { |
| group("emulator") |
| |
| doFirst { |
| commandLine "${project.projectDir}/development/scripts/start_emulator.sh", "seedvault" |
| |
| environment "ANDROID_SDK_HOME", android.sdkDirectory.absolutePath |
| environment "JAVA_HOME", System.properties['java.home'] |
| } |
| } |
| |
| tasks.register('installEmulatorRelease', Exec) { |
| group("emulator") |
| |
| dependsOn(tasks.assembleRelease) |
| |
| doFirst { |
| commandLine "${project.projectDir}/development/scripts/install_app.sh" |
| |
| environment "ANDROID_SDK_HOME", android.sdkDirectory.absolutePath |
| environment "JAVA_HOME", System.properties['java.home'] |
| } |
| } |
| |
| tasks.register('clearEmulatorAppData', Exec) { |
| group("emulator") |
| |
| doFirst { |
| commandLine "${project.projectDir}/development/scripts/clear_app_data.sh" |
| |
| environment "ANDROID_SDK_HOME", android.sdkDirectory.absolutePath |
| environment "JAVA_HOME", System.properties['java.home'] |
| } |
| } |