breezy/app/build.gradle.kts
2025-11-21 15:11:39 +01:00

408 lines
12 KiB
Kotlin
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@file:Suppress("ChromeOsAbiSupport")
import breezy.buildlogic.getCommitCount
import breezy.buildlogic.getGitSha
import breezy.buildlogic.registerLocalesConfigTask
import java.util.Properties
plugins {
id("breezy.android.application")
id("breezy.android.application.compose")
id("com.android.application")
id("com.google.devtools.ksp")
id("com.google.dagger.hilt.android")
kotlin("plugin.serialization")
id("com.mikepenz.aboutlibraries.plugin.android")
}
val supportedAbi = setOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")
android {
namespace = "org.breezyweather"
defaultConfig {
applicationId = "org.breezyweather"
versionCode = 60012
versionName = "6.0.12"
buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"")
buildConfigField("String", "COMMIT_SHA", "\"${getGitSha()}\"")
multiDexEnabled = true
ndk {
abiFilters += supportedAbi
}
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
splits {
abi {
isEnable = true
reset()
include(*supportedAbi.toTypedArray())
isUniversalApk = true
}
}
buildTypes {
named("debug") {
applicationIdSuffix = ".debug"
versionNameSuffix = "-r${getCommitCount()}"
}
named("release") {
isShrinkResources = true
isMinifyEnabled = true
isDebuggable = false
isCrunchPngs = false // No need to do that, we already optimized them
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
val properties = Properties()
if (project.rootProject.file("local.properties").canRead()) {
properties.load(project.rootProject.file("local.properties").inputStream())
}
buildTypes.forEach {
it.buildConfigField(
"String",
"DEFAULT_LOCATION_SOURCE",
"\"${properties.getProperty("breezy.source.default_location") ?: "native"}\""
)
it.buildConfigField(
"String",
"DEFAULT_LOCATION_SEARCH_SOURCE",
"\"${properties.getProperty("breezy.source.default_location_search") ?: "openmeteo"}\""
)
it.buildConfigField(
"String",
"DEFAULT_GEOCODING_SOURCE",
"\"${properties.getProperty("breezy.source.default_geocoding") ?: "naturalearth"}\""
)
it.buildConfigField(
"String",
"DEFAULT_FORECAST_SOURCE",
"\"${properties.getProperty("breezy.source.default_weather") ?: "auto"}\""
)
it.buildConfigField(
"String",
"ACCU_WEATHER_KEY",
"\"${properties.getProperty("breezy.accu.key") ?: ""}\""
)
it.buildConfigField(
"String",
"AEMET_KEY",
"\"${properties.getProperty("breezy.aemet.key") ?: ""}\""
)
it.buildConfigField(
"String",
"ATMO_AURA_KEY",
"\"${properties.getProperty("breezy.atmoaura.key") ?: ""}\""
)
it.buildConfigField(
"String",
"ATMO_FRANCE_KEY",
"\"${properties.getProperty("breezy.atmofrance.key") ?: ""}\""
)
it.buildConfigField(
"String",
"ATMO_GRAND_EST_KEY",
"\"${properties.getProperty("breezy.atmograndest.key") ?: ""}\""
)
it.buildConfigField(
"String",
"ATMO_HDF_KEY",
"\"${properties.getProperty("breezy.atmohdf.key") ?: ""}\""
)
it.buildConfigField(
"String",
"ATMO_SUD_KEY",
"\"${properties.getProperty("breezy.atmosud.key") ?: ""}\""
)
it.buildConfigField(
"String",
"BAIDU_IP_LOCATION_AK",
"\"${properties.getProperty("breezy.baiduip.key") ?: ""}\""
)
it.buildConfigField(
"String",
"BMKG_KEY",
"\"${properties.getProperty("breezy.bmkg.key") ?: ""}\""
)
it.buildConfigField(
"String",
"CWA_KEY",
"\"${properties.getProperty("breezy.cwa.key") ?: ""}\""
)
it.buildConfigField(
"String",
"ECCC_KEY",
"\"${properties.getProperty("breezy.eccc.key") ?: ""}\""
)
it.buildConfigField(
"String",
"GEO_NAMES_KEY",
"\"${properties.getProperty("breezy.geonames.key") ?: ""}\""
)
it.buildConfigField(
"String",
"MET_IE_KEY",
"\"${properties.getProperty("breezy.metie.key") ?: ""}\""
)
it.buildConfigField(
"String",
"MET_OFFICE_KEY",
"\"${properties.getProperty("breezy.metoffice.key") ?: ""}\""
)
it.buildConfigField(
"String",
"MF_WSFT_JWT_KEY",
"\"${properties.getProperty("breezy.mf.jwtKey") ?: ""}\""
)
it.buildConfigField(
"String",
"MF_WSFT_KEY",
"\"${properties.getProperty("breezy.mf.key") ?: ""}\""
)
it.buildConfigField(
"String",
"OPEN_WEATHER_KEY",
"\"${properties.getProperty("breezy.openweather.key") ?: ""}\""
)
it.buildConfigField(
"String",
"PIRATE_WEATHER_KEY",
"\"${properties.getProperty("breezy.pirateweather.key") ?: ""}\""
)
it.buildConfigField(
"String",
"POLLENINFO_KEY",
"\"${properties.getProperty("breezy.polleninfo.key") ?: ""}\""
)
}
flavorDimensions.add("default")
productFlavors {
create("basic") {
dimension = "default"
}
create("freenet") {
dimension = "default"
versionNameSuffix = "_freenet"
}
}
sourceSets {
getByName("basic") {
java.srcDirs("src/src_nonfreenet")
res.srcDirs("src/res_nonfreenet")
}
getByName("freenet") {
java.srcDirs("src/src_freenet")
res.srcDirs("src/res_freenet")
}
}
packaging {
resources.excludes.addAll(
listOf(
"kotlin-tooling-metadata.json",
"LICENSE.txt",
"META-INF/versions/9/OSGI-INF/MANIFEST.MF",
"META-INF/**/*.properties",
"META-INF/**/LICENSE.txt",
"META-INF/*.properties",
"META-INF/*.version",
"META-INF/DEPENDENCIES",
"META-INF/LICENSE",
"META-INF/NOTICE",
"META-INF/README.md"
)
)
}
dependenciesInfo {
includeInApk = false
}
buildFeatures {
viewBinding = true
buildConfig = true
// Disable some unused things
aidl = false
renderScript = false
shaders = false
}
lint {
abortOnError = false
checkReleaseBuilds = false
disable.addAll(listOf("MissingTranslation", "ExtraTranslation"))
}
testOptions {
unitTests {
isIncludeAndroidResources = true
unitTests.isReturnDefaultValues = true
}
}
}
kotlin {
compilerOptions {
freeCompilerArgs.addAll(
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
"-opt-in=androidx.compose.material3.ExperimentalMaterial3ExpressiveApi",
"-opt-in=androidx.compose.foundation.layout.ExperimentalLayoutApi",
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-opt-in=com.google.accompanist.permissions.ExperimentalPermissionsApi"
)
}
}
aboutLibraries {
offlineMode = true
collect {
// Define the path configuration files are located in. E.g. additional libraries, licenses to add to the target .json
// Warning: Please do not use the parent folder of a module as path, as this can result in issues. More details: https://github.com/mikepenz/AboutLibraries/issues/936
// The path provided is relative to the modules path (not project root)
configPath = file("../config")
}
export {
// Remove the "generated" timestamp to allow for reproducible builds
excludeFields.add("generated")
}
}
dependencies {
implementation(projects.data)
implementation(projects.domain)
implementation(projects.mapsUtils)
implementation(projects.uiWeatherView)
implementation(projects.weatherUnit)
implementation(libs.breezy.datasharing.lib)
implementation(libs.core.ktx)
implementation(libs.appcompat)
implementation(libs.material)
implementation(libs.core.splashscreen)
implementation(libs.cardview)
implementation(libs.swiperefreshlayout)
implementation(platform(libs.compose.bom))
implementation(libs.activity.compose)
implementation(libs.compose.material.ripple)
implementation(libs.compose.animation)
implementation(libs.compose.ui.tooling)
implementation(libs.compose.ui.util)
implementation(libs.compose.foundation)
implementation(libs.compose.material3)
implementation(libs.compose.material.icons)
implementation(libs.navigation.compose)
lintChecks(libs.compose.lint.checks)
implementation(libs.accompanist.permissions)
testImplementation(libs.bundles.test)
testRuntimeOnly(libs.junit.platform)
// preference.
implementation(libs.preference.ktx)
// db
implementation(libs.bundles.sqlite)
// work.
implementation(libs.work.runtime)
// lifecycle.
implementation(libs.bundles.lifecycle)
implementation(libs.recyclerview)
// hilt.
implementation(libs.dagger.hilt.core)
ksp(libs.dagger.hilt.compiler)
implementation(libs.hilt.work)
ksp(libs.hilt.compiler)
// HTTP
implementation(libs.bundles.retrofit)
implementation(libs.bundles.okhttp)
// implementation(libs.kotlinx.serialization.csv) // Can be reenabled if needed (see also HttpModule.kt)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.serialization.xml.core)
implementation(libs.kotlinx.serialization.xml)
// data store
// implementation(libs.datastore)
// jwt - Only used by MF at the moment
"basicImplementation"(libs.jjwt.api)
"basicRuntimeOnly"(libs.jjwt.impl)
"basicRuntimeOnly"(libs.jjwt.orgjson) {
exclude("org.json", "json") // provided by Android natively
}
// rx java.
implementation(libs.rxjava)
implementation(libs.rxandroid)
implementation(libs.kotlinx.coroutines.rx3)
// ui.
implementation(libs.vico.compose.m3)
implementation(libs.vico.views)
implementation(libs.adaptiveiconview)
implementation(libs.activity)
// utils.
implementation(libs.suncalc)
implementation(libs.aboutLibraries)
// Allows reflection of the relative time class to pass Locale as parameter
implementation(libs.restrictionBypass)
// debugImplementation because LeakCanary should only run in debug builds.
// debugImplementation(libs.leakcanary)
}
tasks {
// May be too heavy to run, so lets keep the generated file in Git
// val naturalEarthConfigTask = registerNaturalEarthConfigTask(project)
val localesConfigTask = registerLocalesConfigTask(project)
// Duplicating Hebrew string assets due to some locale code issues on different devices
val copyHebrewStrings by registering(Copy::class) {
from("./src/main/res/values-he")
into("./src/main/res/values-iw")
include("**/*")
}
// Duplicating Indonesian string assets due to some locale code issues on different devices
val copyIndonesianStrings by registering(Copy::class) {
from("./src/main/res/values-id")
into("./src/main/res/values-in")
include("**/*")
}
preBuild {
dependsOn(
// naturalEarthConfigTask,
copyHebrewStrings,
copyIndonesianStrings,
localesConfigTask
)
}
}
buildscript {
dependencies {
classpath(libs.kotlin.gradle)
}
}