Changes on flavors

Old flavors has been changed to "beta" and "stable", so beta versions of
husky can be released with the proper flavor config, along the name of
the application, the package name, and the versions.

In the future it will ship ACRA too, so random crashes can be reported
with an email (using a template).
This commit is contained in:
Adolfo Santiago 2021-10-01 16:37:45 +02:00
commit d54974a18f
No known key found for this signature in database
GPG key ID: 244D6F9A317B4A65
21 changed files with 255 additions and 210 deletions

View file

@ -1,219 +1,240 @@
plugins {
id("com.android.application")
id("com.android.application")
kotlin("android")
id("kotlin-android-extensions")
kotlin("kapt")
kotlin("android")
id("kotlin-android-extensions")
kotlin("kapt")
//id("kotlin-parcelize")
id("com.github.ben-manes.versions")
//id("kotlin-parcelize")
id("com.github.ben-manes.versions")
}
android {
compileSdk = AndroidSDK.compileSdk
buildToolsVersion = AndroidSDK.buildTools
compileSdk = AndroidSDK.compileSdk
buildToolsVersion = AndroidSDK.buildTools
defaultConfig {
applicationId = DefaultConfig.applicationID
defaultConfig {
applicationId = DefaultConfig.applicationID
minSdk = DefaultConfig.minSdk
targetSdk = DefaultConfig.targetSdk
minSdk = DefaultConfig.minSdk
targetSdk = DefaultConfig.targetSdk
versionCode = DefaultConfig.versionCodeRel
versionName = DefaultConfig.versionNameRel
versionCode = DefaultConfig.versionCodeRel
versionName = DefaultConfig.versionNameRel
testInstrumentationRunner = DefaultConfig.instrumentationRunner
testInstrumentationRunner = DefaultConfig.instrumentationRunner
vectorDrawables.useSupportLibrary = true
vectorDrawables.useSupportLibrary = true
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas")
arg("room.incremental", true)
}
}
kapt {
arguments {
arg("room.schemaLocation", "$projectDir/schemas")
arg("room.incremental", true)
}
}
// TODO: remove, just for compiling
resValue("string", "app_name", "\"${CustomHuskyBuild.applicationName}\"")
buildConfigField("String", "APPLICATION_NAME", "\"${CustomHuskyBuild.applicationName}\"")
buildConfigField("String", "CUSTOM_LOGO_URL", "\"${CustomHuskyBuild.customLogo}\"")
buildConfigField("String", "CUSTOM_INSTANCE", "\"${CustomHuskyBuild.customInstance}\"")
buildConfigField("String", "SUPPORT_ACCOUNT_URL", "\"${CustomHuskyBuild.supportAccountUrl}\"")
}
// TODO: remove, just for compiling
buildConfigField(
"String", "APPLICATION_NAME",
"\"${CustomHuskyBuild.applicationName}\""
)
buildConfigField(
"String", "CUSTOM_LOGO_URL",
"\"${CustomHuskyBuild.customLogo}\""
)
buildConfigField(
"String", "CUSTOM_INSTANCE",
"\"${CustomHuskyBuild.customInstance}\""
)
buildConfigField(
"String", "SUPPORT_ACCOUNT_URL",
"\"${CustomHuskyBuild.supportAccountUrl}\""
)
}
buildTypes {
getByName(BuildTypes.debug) {
isDebuggable = true
isMinifyEnabled = false
isShrinkResources = false
}
buildTypes {
getByName(BuildTypes.debug) {
isDebuggable = true
isMinifyEnabled = false
isShrinkResources = false
}
getByName(BuildTypes.release) {
isDebuggable = false
isMinifyEnabled = false
isShrinkResources = false
getByName(BuildTypes.release) {
isDebuggable = false
isMinifyEnabled = false
isShrinkResources = false
proguardFiles(
getDefaultProguardFile(ProguardFile.defaultFile),
ProguardFile.defaultRules
)
}
proguardFiles(
getDefaultProguardFile(ProguardFile.defaultFile),
ProguardFile.defaultRules
)
}
flavorDimensions.addAll(
listOf(
"husky",
"color"
)
)
productFlavors {
create("husky") {
dimension = "husky"
}
flavorDimensions.addAll(
listOf(
Flavors.Dimensions.husky,
Flavors.Dimensions.release
)
)
productFlavors {
create(Flavors.husky) {
dimension = Flavors.Dimensions.husky
}
create("blue") {
dimension = "color"
}
create(Flavors.beta) {
dimension = Flavors.Dimensions.release
create("green") {
dimension = "color"
applicationIdSuffix = ".test"
versionNameSuffix = "-beta"
}
}
versionCode = BetaConfig.versionCodeBeta
versionName = BetaConfig.versionNameBeta
lint {
// isAbortOnError = true
disable("MissingTranslation")
disable("ExtraTranslation")
disable("AppCompatCustomView")
disable("UseRequireInsteadOfGet")
}
applicationIdSuffix = BetaConfig.betaSufix
versionNameSuffix = "-${BetaConfig.betaSufix}${BetaConfig.betaSufixVersion}"
compileOptions {
sourceCompatibility = DefaultConfig.javaVersion
targetCompatibility = DefaultConfig.javaVersion
}
buildConfigField(
"String",
"APPLICATION_NAME",
"\"${CustomHuskyBuild.applicationName} Beta\""
)
}
kotlinOptions {
jvmTarget = DefaultConfig.javaVersion.toString()
}
create(Flavors.stable) {
dimension = Flavors.Dimensions.release
}
}
buildFeatures {
viewBinding = true
}
lint {
// isAbortOnError = true
disable("MissingTranslation")
disable("ExtraTranslation")
disable("AppCompatCustomView")
disable("UseRequireInsteadOfGet")
}
// TODO: remove this, only for compiling
androidExtensions {
isExperimental = true
}
compileOptions {
sourceCompatibility = DefaultConfig.javaVersion
targetCompatibility = DefaultConfig.javaVersion
}
testOptions {
unitTests {
isReturnDefaultValues = true
isIncludeAndroidResources = true
}
}
kotlinOptions {
jvmTarget = DefaultConfig.javaVersion.toString()
}
sourceSets {
getByName("androidTest").assets.srcDirs("$projectDir/schemas")
}
buildFeatures {
viewBinding = true
}
packagingOptions {
resources.excludes.addAll(
listOf(
"LICENSE_OFL",
"LICENSE_UNICODE"
)
)
}
// TODO: remove this, only for compiling
androidExtensions {
isExperimental = true
}
bundle {
language {
enableSplit = true
}
}
}
testOptions {
unitTests {
isReturnDefaultValues = true
isIncludeAndroidResources = true
}
}
sourceSets {
getByName("androidTest").assets.srcDirs("$projectDir/schemas")
}
packagingOptions {
resources.excludes.addAll(
listOf(
"LICENSE_OFL",
"LICENSE_UNICODE"
)
)
}
bundle {
language {
enableSplit = true
}
}
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
implementation(ApplicationLibs.AndroidX.appCompat)
implementation(ApplicationLibs.AndroidX.browser)
implementation(ApplicationLibs.AndroidX.cardView)
implementation(ApplicationLibs.AndroidX.constraintLayout)
implementation(ApplicationLibs.AndroidX.coreKtx)
implementation(ApplicationLibs.AndroidX.emoji)
implementation(ApplicationLibs.AndroidX.emojiAppCompat)
implementation(ApplicationLibs.AndroidX.emojiBundled)
implementation(ApplicationLibs.AndroidX.exifInterface)
implementation(ApplicationLibs.AndroidX.fragmentKtx)
implementation(ApplicationLibs.AndroidX.pagingRuntimeKtx)
implementation(ApplicationLibs.AndroidX.preferenceKtx)
implementation(ApplicationLibs.AndroidX.recyclerView)
kapt(ApplicationLibs.AndroidX.roomCompiler)
implementation(ApplicationLibs.AndroidX.roomRuntime)
implementation(ApplicationLibs.AndroidX.roomRxJava)
implementation(ApplicationLibs.AndroidX.shareTarget)
implementation(ApplicationLibs.AndroidX.swipeRefreshLayout)
implementation(ApplicationLibs.AndroidX.viewpager2)
implementation(ApplicationLibs.AndroidX.workRuntime)
implementation(ApplicationLibs.AndroidX.Lifecycle.commonJava)
implementation(ApplicationLibs.AndroidX.Lifecycle.liveDataKtx)
implementation(ApplicationLibs.AndroidX.Lifecycle.reactiveStreamsKtx)
implementation(ApplicationLibs.AndroidX.Lifecycle.viewmodelKtx)
implementation(ApplicationLibs.AndroidX.appCompat)
implementation(ApplicationLibs.AndroidX.browser)
implementation(ApplicationLibs.AndroidX.cardView)
implementation(ApplicationLibs.AndroidX.constraintLayout)
implementation(ApplicationLibs.AndroidX.coreKtx)
implementation(ApplicationLibs.AndroidX.emoji)
implementation(ApplicationLibs.AndroidX.emojiAppCompat)
implementation(ApplicationLibs.AndroidX.emojiBundled)
implementation(ApplicationLibs.AndroidX.exifInterface)
implementation(ApplicationLibs.AndroidX.fragmentKtx)
implementation(ApplicationLibs.AndroidX.pagingRuntimeKtx)
implementation(ApplicationLibs.AndroidX.preferenceKtx)
implementation(ApplicationLibs.AndroidX.recyclerView)
kapt(ApplicationLibs.AndroidX.roomCompiler)
implementation(ApplicationLibs.AndroidX.roomRuntime)
implementation(ApplicationLibs.AndroidX.roomRxJava)
implementation(ApplicationLibs.AndroidX.shareTarget)
implementation(ApplicationLibs.AndroidX.swipeRefreshLayout)
implementation(ApplicationLibs.AndroidX.viewpager2)
implementation(ApplicationLibs.AndroidX.workRuntime)
implementation(ApplicationLibs.AndroidX.Lifecycle.commonJava)
implementation(ApplicationLibs.AndroidX.Lifecycle.liveDataKtx)
implementation(ApplicationLibs.AndroidX.Lifecycle.reactiveStreamsKtx)
implementation(ApplicationLibs.AndroidX.Lifecycle.viewmodelKtx)
implementation(ApplicationLibs.Dagger.dagger)
implementation(ApplicationLibs.Dagger.daggerAndroid)
kapt(ApplicationLibs.Dagger.daggerCompiler)
kapt(ApplicationLibs.Dagger.daggerProcessor)
implementation(ApplicationLibs.Dagger.daggerSupport)
implementation(ApplicationLibs.Dagger.dagger)
implementation(ApplicationLibs.Dagger.daggerAndroid)
kapt(ApplicationLibs.Dagger.daggerCompiler)
kapt(ApplicationLibs.Dagger.daggerProcessor)
implementation(ApplicationLibs.Dagger.daggerSupport)
implementation(ApplicationLibs.Glide.glide)
implementation(ApplicationLibs.Glide.glideOkhttp)
kapt(ApplicationLibs.Glide.glideCompiler)
implementation(ApplicationLibs.Glide.glide)
implementation(ApplicationLibs.Glide.glideOkhttp)
kapt(ApplicationLibs.Glide.glideCompiler)
implementation(ApplicationLibs.Google.flexbox)
implementation(ApplicationLibs.Google.exoplayer)
implementation(ApplicationLibs.Google.materialDesign)
implementation(ApplicationLibs.Google.flexbox)
implementation(ApplicationLibs.Google.exoplayer)
implementation(ApplicationLibs.Google.materialDesign)
implementation(ApplicationLibs.Kotlin.stdlib)
implementation(ApplicationLibs.Kotlin.stdlibJdk)
implementation(ApplicationLibs.Kotlin.stdlib)
implementation(ApplicationLibs.Kotlin.stdlibJdk)
implementation(ApplicationLibs.RxJava.rxAndroid)
implementation(ApplicationLibs.RxJava.rxJava)
implementation(ApplicationLibs.RxJava.rxKotlin)
implementation(ApplicationLibs.RxJava.rxAndroid)
implementation(ApplicationLibs.RxJava.rxJava)
implementation(ApplicationLibs.RxJava.rxKotlin)
implementation(ApplicationLibs.Square.retrofit)
implementation(ApplicationLibs.Square.retrofitAdapterRxJ2)
implementation(ApplicationLibs.Square.retrofitConvGson)
implementation(ApplicationLibs.Square.logginInterceptor)
implementation(ApplicationLibs.Square.okhttp)
implementation(ApplicationLibs.Square.okhttpBrotli)
implementation(ApplicationLibs.Square.retrofit)
implementation(ApplicationLibs.Square.retrofitAdapterRxJ2)
implementation(ApplicationLibs.Square.retrofitConvGson)
implementation(ApplicationLibs.Square.logginInterceptor)
implementation(ApplicationLibs.Square.okhttp)
implementation(ApplicationLibs.Square.okhttpBrotli)
implementation(ApplicationLibs.androidImageCropper)
implementation(ApplicationLibs.autodispose)
implementation(ApplicationLibs.autodisposeAndroidArchComp)
implementation(ApplicationLibs.bigImageViewer)
implementation(ApplicationLibs.conscryptAndroid)
implementation(ApplicationLibs.filemojiCompat)
implementation(ApplicationLibs.glideImage)
implementation(ApplicationLibs.glideImageViewFactory)
implementation(ApplicationLibs.markdownEdit)
implementation(ApplicationLibs.materialDrawer)
implementation(ApplicationLibs.materialDrawerIconics)
implementation(ApplicationLibs.materialDrawerTypeface)
implementation(ApplicationLibs.filemojiCompat)
implementation(ApplicationLibs.sparkButton)
implementation(ApplicationLibs.timber)
implementation(ApplicationLibs.androidImageCropper)
implementation(ApplicationLibs.autodispose)
implementation(ApplicationLibs.autodisposeAndroidArchComp)
implementation(ApplicationLibs.bigImageViewer)
implementation(ApplicationLibs.conscryptAndroid)
implementation(ApplicationLibs.filemojiCompat)
implementation(ApplicationLibs.glideImage)
implementation(ApplicationLibs.glideImageViewFactory)
implementation(ApplicationLibs.markdownEdit)
implementation(ApplicationLibs.materialDrawer)
implementation(ApplicationLibs.materialDrawerIconics)
implementation(ApplicationLibs.materialDrawerTypeface)
implementation(ApplicationLibs.filemojiCompat)
implementation(ApplicationLibs.sparkButton)
implementation(ApplicationLibs.timber)
testImplementation(TestLibs.extJunit)
testImplementation(TestLibs.junit)
testImplementation(TestLibs.mockitoInline)
testImplementation(TestLibs.mockitoKotlin)
testImplementation(TestLibs.roboelectric)
testImplementation(TestLibs.extJunit)
testImplementation(TestLibs.junit)
testImplementation(TestLibs.mockitoInline)
testImplementation(TestLibs.mockitoKotlin)
testImplementation(TestLibs.roboelectric)
androidTestImplementation(TestLibs.espresso)
androidTestImplementation(TestLibs.junit)
androidTestImplementation(TestLibs.roomTesting)
androidTestImplementation(TestLibs.espresso)
androidTestImplementation(TestLibs.junit)
androidTestImplementation(TestLibs.roomTesting)
}

View file

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Husky Beta</string>
</resources>

View file

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before After
Before After

View file

@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Husky</string>
<string name="error_generic">An error occurred.</string>
<string name="error_network">A network error occurred! Please check your connection and try again!</string>

View file

@ -6,67 +6,85 @@ import org.gradle.kotlin.dsl.maven
const val kotlinVersion = "1.5.31"
object AndroidSDK {
const val compileSdk = 30
const val buildTools = "30.0.3"
const val compileSdk = 30
const val buildTools = "30.0.3"
}
object CustomHuskyBuild {
const val applicationName = "Husky"
const val customLogo = ""
const val customInstance = ""
const val supportAccountUrl = "https://huskyapp.dev/users/husky"
const val applicationName = "Husky"
const val customLogo = ""
const val customInstance = ""
const val supportAccountUrl = "https://huskyapp.dev/users/husky"
}
object DefaultConfig {
const val applicationID = "su.xash.husky"
const val minSdk = 23
const val targetSdk = 30
const val versionCodeRel = 169
const val versionNameRel = "1.0.2"
const val applicationID = "su.xash.husky"
const val minSdk = 23
const val targetSdk = 30
const val versionCodeRel = 169
const val versionNameRel = "1.0.2"
val javaVersion = JavaVersion.VERSION_1_8
val javaVersion = JavaVersion.VERSION_1_8
const val instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
const val instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
const val encoding = "UTF-8"
const val encoding = "UTF-8"
}
object BetaConfig {
const val betaSufix = "beta"
const val betaSufixVersion = "1"
const val versionCodeBeta = 1
const val versionNameBeta = "1.0.2"
}
object BuildTypes {
const val debug = "debug"
const val release = "release"
const val debug = "debug"
const val release = "release"
}
object Flavors {
object Dimensions {
const val husky = "husky"
const val release = "release"
}
const val husky = "husky"
const val beta = "beta"
const val stable = "stable"
}
object ProguardFile {
const val defaultFile = "proguard-android-optimize.txt"
const val defaultRules = "proguard-rules.pro"
const val defaultFile = "proguard-android-optimize.txt"
const val defaultRules = "proguard-rules.pro"
}
object BuildTasks {
const val taskTypeClean = "clean"
const val taskTypeClean = "clean"
}
object GradlePlugins {
object Versions {
const val gradle = "7.0.2"
const val gradleVersions = "0.38.0"
}
object Versions {
const val gradle = "7.0.2"
const val gradleVersions = "0.38.0"
}
const val android = "com.android.tools.build:gradle:${Versions.gradle}"
const val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
const val gradleVersions =
"com.github.ben-manes:gradle-versions-plugin:${Versions.gradleVersions}"
const val android = "com.android.tools.build:gradle:${Versions.gradle}"
const val kotlin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
const val gradleVersions =
"com.github.ben-manes:gradle-versions-plugin:${Versions.gradleVersions}"
}
// Function to add repositories to the project.
fun addRepos(handler: RepositoryHandler) {
handler.google()
handler.maven(url = "https://jitpack.io")
handler.gradlePluginPortal()
handler.google()
handler.maven(url = "https://jitpack.io")
handler.gradlePluginPortal()
}
// Function to check stable versions
fun isNonStable(version: String): Boolean {
val stableKeyword = listOf("alpha", "beta", "final", "ga", "m", "release", "rc")
.any { version.toLowerCase(Locale.ROOT).contains(it) }
return stableKeyword.not()
val stableKeyword = listOf("alpha", "beta", "final", "ga", "m", "release", "rc")
.any { version.toLowerCase(Locale.ROOT).contains(it) }
return stableKeyword.not()
}