buildscript { repositories { maven { url 'https://maven.fabric.io/public' } jcenter() } dependencies { classpath 'io.fabric.tools:gradle:1.+' classpath 'com.dicedmelon.gradle:jacoco-android:0.1.4' classpath 'de.undercouch:gradle-download-task:3.4.3' } } apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'com.google.gms.google-services' apply plugin: 'io.fabric' apply plugin: 'jacoco-android' apply plugin: 'com.jakewharton.butterknife' apply plugin: 'de.undercouch.download' jacoco { toolVersion = "0.8.3" } ext { supportLibraryVersion = "28.0.0" ormLiteVersion = "4.46" powermockVersion = "1.7.3" dexmakerVersion = "1.2" butterknifeVersion = "10.1.0" } repositories { maven { url 'https://maven.fabric.io/public' } jcenter { url "https://jcenter.bintray.com/" } mavenCentral() } def generateGitBuild = { -> StringBuilder stringBuilder = new StringBuilder() try { def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'describe', '--always' standardOutput = stdout } String commitObject = stdout.toString().trim() stringBuilder.append(commitObject) } catch (ignored) { stringBuilder.append('NoGitSystemAvailable') } return stringBuilder.toString() } def generateGitRemote = { -> StringBuilder stringBuilder = new StringBuilder(); try { def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'remote', 'get-url', 'origin' standardOutput = stdout } String commitObject = stdout.toString().trim() stringBuilder.append(commitObject) } catch (ignored) { stringBuilder.append('NoGitSystemAvailable') } return stringBuilder.toString() } def generateDate = { -> StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append((new Date()).format('yyyy.MM.dd-HH:mm')) return stringBuilder.toString() } def isMaster = { -> return !version.contains('-') } def allCommited = { -> StringBuilder stringBuilder = new StringBuilder(); try { def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'status', '-s' standardOutput = stdout } String commitObject = stdout.toString().trim() stringBuilder.append(commitObject) } catch (ignored) { return false; // NoGitSystemAvailable } return stringBuilder.toString().isEmpty() } tasks.matching { it instanceof Test }.all { testLogging.events = ["failed", "skipped", "started"] testLogging.exceptionFormat = "full" } android { compileSdkVersion 28 defaultConfig { minSdkVersion 23 targetSdkVersion 28 multiDexEnabled true versionCode 1500 version "2.4-dev" buildConfigField "String", "VERSION", '"' + version + '"' buildConfigField "String", "BUILDVERSION", '"' + generateGitBuild() + '-' + generateDate() + '"' buildConfigField "String", "REMOTE", '"' + generateGitRemote() + '"' buildConfigField "String", "HEAD", '"' + generateGitBuild() + '"' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" // if you change minSdkVersion to less than 11, you need to change executeTask for wear ndk { moduleName "BleCommandUtil" } } kotlinOptions { jvmTarget = '1.8' } lintOptions { // TODO remove once wear dependency com.google.android.gms:play-services-wearable:7.3.0 // has been upgraded (requiring significant code changes), which currently fails release // build with a deprecation warning // abortOnError false // (disabled entirely to avoid reports on the error, which would still be displayed // and it's easy to overlook that it's ignored) checkReleaseBuilds false disable 'MissingTranslation' disable 'ExtraTranslation' } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { testCoverageEnabled(project.hasProperty('coverage')) } firebaseDisable { System.setProperty("disableFirebase", "true") } } productFlavors { flavorDimensions "standard" full { applicationId "info.nightscout.androidaps" dimension "standard" resValue "string", "app_name", "AndroidAPS" versionName version manifestPlaceholders = [ appIcon : "@mipmap/ic_launcher", appIconRound: "@mipmap/ic_launcher_round" ] } pumpcontrol { applicationId "info.nightscout.aapspumpcontrol" dimension "standard" resValue "string", "app_name", "Pumpcontrol" versionName version + "-pumpcontrol" manifestPlaceholders = [ appIcon : "@mipmap/ic_pumpcontrol", appIconRound: "@null" ] } nsclient { applicationId "info.nightscout.nsclient" dimension "standard" resValue "string", "app_name", "NSClient" versionName version + "-nsclient" manifestPlaceholders = [ appIcon : "@mipmap/ic_yellowowl", appIconRound: "@null" ] } nsclient2 { applicationId "info.nightscout.nsclient2" dimension "standard" resValue "string", "app_name", "NSClient2" versionName version + "-nsclient" manifestPlaceholders = [ appIcon : "@mipmap/ic_yellowowl", appIconRound: "@null" ] } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } testOptions { unitTests { returnDefaultValues = true includeAndroidResources = true all { maxParallelForks = 10 forkEvery = 20 } } } useLibrary "org.apache.http.legacy" } allprojects { repositories { jcenter() flatDir { dirs 'libs' } maven { url 'https://jitpack.io' } } } dependencies { wearApp project(':wear') implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.google.android.gms:play-services-wearable:17.0.0' implementation 'com.google.firebase:firebase-core:17.0.1' implementation("com.crashlytics.sdk.android:crashlytics:2.9.9@aar") { transitive = true; } implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.legacy:legacy-support-v13:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.percentlayout:percentlayout:1.0.0' implementation "com.wdullaer:materialdatetimepicker:2.3.0" // Otto bus will be replaced by rx implementation "com.squareup:otto:1.3.7" implementation "io.reactivex.rxjava2:rxandroid:2.1.1" implementation "com.j256.ormlite:ormlite-core:${ormLiteVersion}" implementation "com.j256.ormlite:ormlite-android:${ormLiteVersion}" implementation("com.github.tony19:logback-android-classic:1.1.1-6") { exclude group: "com.google.android", module: "android" } implementation "org.apache.commons:commons-lang3:3.7" implementation "org.slf4j:slf4j-api:1.7.21" // Graphview cannot be upgraded implementation "com.jjoe64:graphview:4.0.1" implementation "com.joanzapata.iconify:android-iconify-fontawesome:2.1.1" implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation(name: "android-edittext-validator-v1.3.4-mod", ext: "aar") implementation 'com.madgag.spongycastle:core:1.58.0.0' implementation("com.google.android:flexbox:0.3.0") { exclude group: "com.android.support" } implementation("io.socket:socket.io-client:1.0.0") { // excluding org.json which is provided by Android exclude group: "org.json", module: "json" } implementation "com.google.code.gson:gson:2.8.5" implementation "com.google.guava:guava:24.1-jre" implementation "net.danlew:android.joda:2.9.9.1" implementation "uk.com.robust-it:cloning:1.9.9" implementation 'org.mozilla:rhino:1.7.7.2' implementation "com.jakewharton:butterknife:${butterknifeVersion}" annotationProcessor "com.jakewharton:butterknife-compiler:${butterknifeVersion}" implementation 'com.github.DavidProdinger:weekdays-selector:1.1.0' testImplementation "junit:junit:4.12" testImplementation "org.json:json:20140107" testImplementation "org.mockito:mockito-core:2.8.47" testImplementation "org.powermock:powermock-api-mockito2:${powermockVersion}" testImplementation "org.powermock:powermock-module-junit4-rule-agent:${powermockVersion}" testImplementation "org.powermock:powermock-module-junit4-rule:${powermockVersion}" testImplementation "org.powermock:powermock-module-junit4:${powermockVersion}" testImplementation "joda-time:joda-time:2.9.9" testImplementation("com.google.truth:truth:0.39") { exclude group: "com.google.guava", module: "guava" } testImplementation("org.robolectric:robolectric:4.2.1") { exclude group: "com.google.guava", module: "guava" } testImplementation "org.skyscreamer:jsonassert:1.5.0" testImplementation "org.hamcrest:hamcrest-all:1.3" testImplementation("uk.org.lidalia:slf4j-test:1.2.0") { exclude group: "com.google.guava", module: "guava" } androidTestImplementation "org.mockito:mockito-core:2.8.47" androidTestImplementation "com.google.dexmaker:dexmaker:${dexmakerVersion}" androidTestImplementation "com.google.dexmaker:dexmaker-mockito:${dexmakerVersion}" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" // new for tidepool implementation 'com.squareup.okhttp3:okhttp:3.10.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' implementation "com.squareup.retrofit2:retrofit:2.4.0" implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0" implementation "com.squareup.retrofit2:converter-gson:2.4.0" } task downloadZipFile(type: Download) { src 'https://github.com/MilosKozak/danars-support-lib/archive/master.zip' dest new File(buildDir, 'danars.zip') } task downloadAndUnzipFile(dependsOn: downloadZipFile, type: Copy) { from zipTree(downloadZipFile.dest) def outputDir = file("${buildDir}/unpacked/dist") into outputDir } task copyLibs(dependsOn: downloadAndUnzipFile, type: Copy) { def src = file("${buildDir}/unpacked/dist/danars-support-lib-master") def target = file("src/main/jniLibs/") from src into target } task full_clean(type: Delete) { delete file("src/main/jniLibs") } clean.dependsOn full_clean preBuild.dependsOn copyLibs printf('--------------\n') printf('isMaster: %s\n', isMaster().toString()) printf('allCommited: %s\n', allCommited().toString()) printf('--------------\n') if (isMaster() && !allCommited()) { throw new GradleException('There are uncommitted changes or git system is not available. Clone sources again as described in wiki and do not allow gradle update') }