409 lines
12 KiB
Text
409 lines
12 KiB
Text
|
|
@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 let’s 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)
|
|||
|
|
}
|
|||
|
|
}
|