import groovy.xml.XmlUtil apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { compileSdkVersion 30 buildToolsVersion '30.0.2' // adapt in .travis.yaml if changed here defaultConfig { minSdkVersion 29 // leave at 29 for robolectric tests targetSdkVersion 30 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments disableAnalytics: 'true' } buildTypes { release { minifyEnabled false } } lintOptions { abortOnError false } compileOptions { targetCompatibility 1.8 sourceCompatibility 1.8 } kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } 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" } } // optional signingConfigs def keystorePropertiesFile = rootProject.file("keystore.properties") if (keystorePropertiesFile.exists()) { def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } buildTypes.release.signingConfig = signingConfigs.release buildTypes.debug.signingConfig = signingConfigs.release } } gradle.projectsEvaluated { tasks.withType(JavaCompile) { if (JavaVersion.current() >= JavaVersion.VERSION_1_9) { options.compilerArgs.addAll(['--release', '8']) } options.compilerArgs.add('-Xbootclasspath/p:app/libs/android.jar:app/libs/libcore.jar') } } // http://www.31mins.com/android-studio-build-system-application/ preBuild.doLast { def imlFile = file(project.name + ".iml") try { def parsedXml = (new XmlParser()).parse(imlFile) def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' } parsedXml.component[1].remove(jdkNode) def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform" //noinspection GroovyResultOfObjectAllocationIgnored // the note gets inserted new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK']) XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile)) } catch (NullPointerException | FileNotFoundException ex) { ex.printStackTrace() } } // To produce these binaries, in latest AOSP source tree, run // $ m def aospDeps = fileTree(include: [ // For more information about this module: // https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-11.0.0_r3/Android.bp#507 // framework_intermediates/classes-header.jar works for gradle build as well, // but not unit tests, so we use the actual classes (without updatable modules). // // out/target/common/obj/JAVA_LIBRARIES/framework-minus-apex_intermediates/classes.jar 'android.jar', // out/target/common/obj/JAVA_LIBRARIES/core-libart.com.android.art.release_intermediates/classes.jar 'libcore.jar' ], dir: 'libs') dependencies { compileOnly aospDeps /** * 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. */ //noinspection GradleDependency implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" // https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-11.0.0_r3/current/androidx/Android.bp#610 //noinspection GradleDependency implementation 'androidx.core:core-ktx:1.5.0-alpha01' // A newer version gets pulled in with AOSP via core, so we include this here explicitly // https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-11.0.0_r3/current/androidx/Android.bp#930 //noinspection GradleDependency implementation 'androidx.fragment:fragment-ktx:1.3.0-alpha07' // https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-11.0.0_r3/current/androidx/Android.bp#2412 //noinspection GradleDependency implementation 'androidx.preference:preference:1.1.1' // 1.2.0-alpha01 is not even released // https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-11.0.0_r3/current/androidx/Android.bp#1553 //noinspection GradleDependency implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0-alpha05' // https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-11.0.0_r3/current/androidx/Android.bp#1353 //noinspection GradleDependency implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.0-alpha05' // https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-11.0.0_r3/current/extras/constraint-layout-x/Android.bp#30 //noinspection GradleDependency implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta7' // https://android.googlesource.com/platform/prebuilts/sdk/+/refs/tags/android-11.0.0_r3/current/extras/material-design-x/Android.bp#6 //noinspection GradleDependency implementation 'com.google.android.material:material:1.1.0-alpha05' /** * 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 */ def koin_version = '2.1.1' implementation("org.koin:koin-android:$koin_version") { exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib' } implementation("org.koin:koin-androidx-viewmodel:$koin_version") { exclude group: 'org.koin', module: 'koin-androidx-scope' exclude group: 'androidx.lifecycle' } implementation 'io.github.novacrypto:BIP39:2019.01.27' /** * Test Dependencies (do not concern the AOSP build) */ lintChecks 'com.github.thirdegg:lint-rules:0.0.5-alpha' def junit_version = "5.5.2" // careful, upgrading this can change a Cipher's IV size in tests!? def mockk_version = "1.10.0" testImplementation aospDeps // anything less than 'implementation' fails tests run with gradlew testImplementation 'androidx.test.ext:junit:1.1.2' testImplementation('org.robolectric:robolectric:4.3.1') { // 4.4 has issue with non-idle Looper // https://github.com/robolectric/robolectric/issues/5245 exclude group: "com.google.auto.service", module: "auto-service" } testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version" testImplementation "io.mockk:mockk:$mockk_version" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version" testRuntimeOnly "org.junit.vintage:junit-vintage-engine:$junit_version" androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation "io.mockk:mockk-android:$mockk_version" }