408 lines
12 KiB
Kotlin
408 lines
12 KiB
Kotlin
@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)
|
||
}
|
||
}
|