AndroidAPS/app/build.gradle.kts
2023-10-16 15:20:50 +02:00

239 lines
8.3 KiB
Text

import java.io.ByteArrayOutputStream
import java.text.SimpleDateFormat
import java.util.Date
import kotlin.io.println
plugins {
id("com.android.application")
id("kotlin-android")
id("kotlin-kapt")
id("kotlin-allopen")
id("kotlinx-serialization")
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
id("android-app-dependencies")
}
apply(from = "${project.rootDir}/core/main/jacoco_global.gradle")
apply(from = "${project.rootDir}/core/main/test_dependencies.gradle")
repositories {
mavenCentral()
google()
}
fun generateGitBuild(): String {
val stringBuilder: StringBuilder = StringBuilder()
try {
val stdout = ByteArrayOutputStream()
exec {
commandLine("git", "describe", "--always")
standardOutput = stdout
}
val commitObject = stdout.toString().trim()
stringBuilder.append(commitObject)
} catch (ignored: Exception) {
stringBuilder.append("NoGitSystemAvailable")
}
return stringBuilder.toString()
}
fun generateGitRemote(): String {
val stringBuilder: StringBuilder = StringBuilder()
try {
val stdout = ByteArrayOutputStream()
exec {
commandLine("git", "remote", "get-url", "origin")
standardOutput = stdout
}
val commitObject: String = stdout.toString().trim()
stringBuilder.append(commitObject)
} catch (ignored: Exception) {
stringBuilder.append("NoGitSystemAvailable")
}
return stringBuilder.toString()
}
fun generateDate(): String {
val stringBuilder: StringBuilder = StringBuilder()
// showing only date prevents app to rebuild everytime
stringBuilder.append(SimpleDateFormat("yyyy.MM.dd").format(Date()))
return stringBuilder.toString()
}
fun isMaster(): Boolean = !Versions.appVersion.contains("-")
fun gitAvailable(): Boolean {
val stringBuilder: StringBuilder = StringBuilder()
try {
val stdout = ByteArrayOutputStream()
exec {
commandLine("git", "--version")
standardOutput = stdout
}
val commitObject = stdout.toString().trim()
stringBuilder.append(commitObject)
} catch (ignored: Exception) {
return false // NoGitSystemAvailable
}
return stringBuilder.toString().isNotEmpty()
}
fun allCommitted(): Boolean {
val stringBuilder: StringBuilder = StringBuilder()
try {
val stdout = ByteArrayOutputStream()
exec {
commandLine("git", "status", "-s")
standardOutput = stdout
}
// ignore all changes done in .idea/codeStyles
val cleanedList: String = stdout.toString().replace("/(?m)^\\s*(M|A|D|\\?\\?)\\s*.*?\\.idea\\/codeStyles\\/.*?\\s*\$/", "")
// ignore all files added to project dir but not staged/known to GIT
.replace("/(?m)^\\s*(\\?\\?)\\s*.*?\\s*\$/", "")
stringBuilder.append(cleanedList.trim())
} catch (ignored: Exception) {
return false // NoGitSystemAvailable
}
return stringBuilder.toString().isEmpty()
}
android {
namespace = "app.aaps"
ndkVersion = Versions.ndkVersion
defaultConfig {
minSdk = Versions.minSdk
targetSdk = Versions.targetSdk
buildConfigField("String", "VERSION", "\"$version\"")
buildConfigField("String", "BUILDVERSION", "\"${generateGitBuild()}-${generateDate()}\"")
buildConfigField("String", "REMOTE", "\"${generateGitRemote()}\"")
buildConfigField("String", "HEAD", "\"${generateGitBuild()}\"")
buildConfigField("String", "COMMITTED", "\"${allCommitted()}\"")
}
flavorDimensions.add("standard")
productFlavors {
create("full") {
isDefault = true
applicationId = "info.nightscout.androidaps"
dimension = "standard"
resValue("string", "app_name", "AAPS")
versionName = Versions.appVersion
manifestPlaceholders["appIcon"] = "@mipmap/ic_launcher"
manifestPlaceholders["appIconRound"] = "@mipmap/ic_launcher_round"
}
create("pumpcontrol") {
applicationId = "info.nightscout.aapspumpcontrol"
dimension = "standard"
resValue("string", "app_name", "Pumpcontrol")
versionName = Versions.appVersion + "-pumpcontrol"
manifestPlaceholders["appIcon"] = "@mipmap/ic_pumpcontrol"
manifestPlaceholders["appIconRound"] = "@null"
}
create("aapsclient") {
applicationId = "info.nightscout.aapsclient"
dimension = "standard"
resValue("string", "app_name", "AAPSClient")
versionName = Versions.appVersion + "-aapsclient"
manifestPlaceholders["appIcon"] = "@mipmap/ic_yellowowl"
manifestPlaceholders["appIconRound"] = "@mipmap/ic_yellowowl"
}
create("aapsclient2") {
applicationId = "info.nightscout.aapsclient2"
dimension = "standard"
resValue("string", "app_name", "AAPSClient2")
versionName = Versions.appVersion + "-aapsclient"
manifestPlaceholders["appIcon"] = "@mipmap/ic_blueowl"
manifestPlaceholders["appIconRound"] = "@mipmap/ic_blueowl"
}
}
useLibrary("org.apache.http.legacy")
//Deleting it causes a binding error
dataBinding { enable }
}
allprojects {
repositories {
}
}
dependencies {
wearApp(project(":wear"))
// in order to use internet"s versions you"d need to enable Jetifier again
// https://github.com/nightscout/graphview.git
// https://github.com/nightscout/iconify.git
implementation(project(":shared:impl"))
implementation(project(":core:main"))
implementation(project(":core:graphview"))
implementation(project(":core:interfaces"))
implementation(project(":core:libraries"))
implementation(project(":core:nssdk"))
implementation(project(":core:utils"))
implementation(project(":core:ui"))
implementation(project(":core:validators"))
implementation(project(":ui"))
implementation(project(":plugins:aps"))
implementation(project(":plugins:automation"))
implementation(project(":plugins:configuration"))
implementation(project(":plugins:constraints"))
implementation(project(":plugins:insulin"))
implementation(project(":plugins:main"))
implementation(project(":plugins:sensitivity"))
implementation(project(":plugins:smoothing"))
implementation(project(":plugins:source"))
implementation(project(":plugins:sync"))
implementation(project(":implementation"))
implementation(project(":database:entities"))
implementation(project(":database:impl"))
implementation(project(":pump:combo"))
implementation(project(":pump:combov2"))
implementation(project(":pump:dana"))
implementation(project(":pump:danars"))
implementation(project(":pump:danar"))
implementation(project(":pump:diaconn"))
implementation(project(":pump:eopatch"))
implementation(project(":pump:medtrum"))
implementation(project(":insight"))
implementation(project(":pump:medtronic"))
implementation(project(":pump:pump-common"))
implementation(project(":pump:omnipod-common"))
implementation(project(":pump:omnipod-eros"))
implementation(project(":pump:omnipod-dash"))
implementation(project(":pump:rileylink"))
implementation(project(":pump:virtual"))
implementation(project(":workflow"))
testImplementation(project(":shared:tests"))
// implementation(fileTree (include: listOf("*.jar"), dir = "libs"))
/* Dagger2 - We are going to use dagger.android which includes
* support for Activity and fragment injection so we need to include
* the following dependencies */
kapt(Libs.Dagger.androidProcessor)
kapt(Libs.Dagger.compiler)
// MainApp
api(Libs.Rx.rxDogTag)
}
println("-------------------")
println("isMaster: ${isMaster()}")
println("gitAvailable: ${gitAvailable()}")
println("allCommitted: ${allCommitted()}")
println("-------------------")
if (isMaster() && !gitAvailable()) {
throw GradleException("GIT system is not available. On Windows try to run Android Studio as an Administrator. Check if GIT is installed and Studio have permissions to use it")
}
if (isMaster() && !allCommitted()) {
throw GradleException("There are uncommitted changes. Clone sources again as described in wiki and do not allow gradle update")
}