SubwayTooter-Android-App/app/build.gradle

309 lines
11 KiB
Groovy
Raw Normal View History

import io.gitlab.arturbosch.detekt.Detekt
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2017-04-23 07:42:09 +02:00
import java.text.SimpleDateFormat
import java.util.regex.Pattern
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.serialization")
id("com.google.devtools.ksp").version("$kspVersion")
id("io.gitlab.arturbosch.detekt")
}
2017-04-20 18:23:59 +02:00
def keystorePropertiesFile = rootProject.file("keystore.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
2017-04-20 18:23:59 +02:00
android {
compileSdkVersion stCompileSdkVersion
buildToolsVersion stBuildToolsVersion
2018-09-12 07:55:15 +02:00
// exoPlayer 2.9.0 以降は Java 8 compiler support を要求する
compileOptions {
sourceCompatibility javaSourceCompatibility
targetCompatibility javaTargetCompatibility
coreLibraryDesugaringEnabled true
}
2017-04-20 18:23:59 +02:00
defaultConfig {
targetSdkVersion stTargetSdkVersion
minSdkVersion stMinSdkVersion
2023-07-10 23:53:13 +02:00
versionCode 534
versionName "5.534"
2018-09-12 07:55:15 +02:00
applicationId "jp.juggler.subwaytooter"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2017-04-20 18:23:59 +02:00
}
2023-03-31 04:28:59 +02:00
buildFeatures {
viewBinding true
buildConfig true
}
kotlinOptions {
jvmTarget = kotlinJvmTarget
freeCompilerArgs += [
2022-05-29 15:38:21 +02:00
"-opt-in=kotlin.ExperimentalStdlibApi",
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
"-opt-in=androidx.media3.common.util.UnstableApi"
// "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi",
// "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi",
]
}
// kotlin 1.6.0にすると This version (1.0.5) of the Compose Compiler requires Kotlin version 1.5.31 but you appear to be using Kotlin version 1.6.0 which is not known to be compatible. と怒られる
// buildFeatures {
// compose true
// }
// composeOptions {
// kotlinCompilerExtensionVersion compose_version
// }
signingConfigs {
release {
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
}
}
2017-04-20 18:23:59 +02:00
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
lintOptions {
disable "MissingTranslation"
}
signingConfig signingConfigs.release
2017-04-20 18:23:59 +02:00
}
debug {
2023-02-01 19:07:26 +01:00
}
2017-04-20 18:23:59 +02:00
}
// Specifies comma-separated list of flavor dimensions.
flavorDimensions "fcmType"
2017-04-23 07:42:09 +02:00
productFlavors {
nofcm {
dimension "fcmType"
versionNameSuffix "-noFcm"
applicationIdSuffix ".noFcm"
def scheme = "subwaytooternofcm"
manifestPlaceholders = [customScheme: scheme]
buildConfigField("String", "customScheme", "\"$scheme\"")
}
fcm {
dimension "fcmType"
def scheme = "subwaytooter"
manifestPlaceholders = [customScheme: scheme]
buildConfigField("String", "customScheme", "\"$scheme\"")
2017-04-23 07:42:09 +02:00
}
}
// https://github.com/tateisu/SubwayTooter/issues/229
// splits {
// abi {
// enable true
// reset()
// include "arm64-v8a", "x86", "x86_64"
// universalApk true
// }
// }
2017-04-23 07:42:09 +02:00
// Generate Signed APK のファイル名を変更
android.applicationVariants.all { variant ->
2017-04-23 07:42:09 +02:00
if (variant.buildType.name == "release") {
variant.outputs.all { output ->
// Rename APK
def versionCode = defaultConfig.versionCode
def versionName = defaultConfig.versionName
def flavor = variant.flavorName
// def abi = output.getFilter("ABI") ?: "all"
def date = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
def branch = providers.exec {
commandLine("git", "rev-parse", "--abbrev-ref", "HEAD")
}.standardOutput.asText.get()?.trim() ?: "(no branch)"
outputFileName = "SubwayTooter-${branch}-${flavor}-${versionCode}-${versionName}-${date}.apk"
2017-04-23 07:42:09 +02:00
}
}
}
packagingOptions {
2021-10-27 22:58:19 +02:00
resources {
excludes += ["/META-INF/{AL2.0,LGPL2.1}", "META-INF/DEPENDENCIES"]
2023-01-26 16:54:04 +01:00
// https://github.com/Kotlin/kotlinx.coroutines/issues/1064
pickFirsts += ["META-INF/atomicfu.kotlin_module"]
2021-10-27 22:58:19 +02:00
}
}
2019-08-30 06:02:08 +02:00
useLibrary "android.test.base"
useLibrary "android.test.mock"
2023-01-26 16:54:04 +01:00
lint {
warning "DuplicatePlatformClasses"
}
namespace "jp.juggler.subwaytooter"
2023-01-26 16:54:04 +01:00
2017-04-20 18:23:59 +02:00
}
kotlin {
jvmToolchain(kotlinJvmToolchain)
}
tasks.withType(KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = kotlinJvmTarget
}
}
2017-04-20 18:23:59 +02:00
dependencies {
// desugar_jdk_libs 2.0.0 は AGP 7.4.0-alpha10 以降を要求する
//noinspection GradleDependency
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:$desugarLibVersion"
2023-06-29 16:39:48 +02:00
implementation project(":base")
implementation project(":colorpicker")
implementation project(":emoji")
implementation project(":apng_android")
implementation project(":anko")
implementation fileTree(include: ["*.aar"], dir: "src/main/libs")
fcmImplementation "com.google.firebase:firebase-messaging:23.1.2"
fcmImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$kotlinxCoroutinesVersion"
2023-02-01 19:07:26 +01:00
// implementation "org.conscrypt:conscrypt-android:$conscryptVersion"
api "org.conscrypt:conscrypt-android:$conscryptVersion"
implementation "com.github.UnifiedPush:android-connector:2.1.1"
implementation "jp.wasabeef:glide-transformations:4.3.0"
implementation 'com.github.androidmads:QRGenerator:1.0.1'
2023-06-29 16:39:48 +02:00
def apng4AndroidVersion = '2.25.0'
implementation "com.github.penfeizhou.android.animation:apng:$apng4AndroidVersion"
2022-06-13 19:23:46 +02:00
ksp "com.github.bumptech.glide:ksp:$glideVersion"
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:$detektVersion")
testImplementation(project(":base"))
androidTestImplementation(project(":base"))
androidTestApi "androidx.test.espresso:espresso-core:$androidxTestEspressoCoreVersion"
androidTestApi "androidx.test.ext:junit-ktx:1.1.5"
androidTestApi "androidx.test.ext:junit:$androidxTestExtJunitVersion"
androidTestApi "androidx.test.ext:truth:1.5.0"
androidTestApi "androidx.test:core-ktx:$testKtxVersion"
androidTestApi "androidx.test:core:$androidxTestVersion"
androidTestApi "androidx.test:runner:1.5.2"
2023-06-29 16:39:48 +02:00
androidTestApi "org.jetbrains.kotlin:kotlin-test:$kotlinTestVersion"
androidTestApi "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinxCoroutinesVersion"
testApi "androidx.arch.core:core-testing:$archVersion"
testApi "junit:junit:$junitVersion"
2023-06-29 16:39:48 +02:00
testApi "org.jetbrains.kotlin:kotlin-test:$kotlinTestVersion"
testApi "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinxCoroutinesVersion"
// To use android test orchestrator
androidTestUtil "androidx.test:orchestrator:1.4.2"
testApi("com.squareup.okhttp3:mockwebserver:$okhttpVersion") {
exclude group: "com.squareup.okio", module: "okio"
exclude group: "com.squareup.okhttp3", module: "okhttp"
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-common"
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk8"
}
androidTestApi("com.squareup.okhttp3:mockwebserver:$okhttpVersion") {
exclude group: "com.squareup.okio", module: "okio"
exclude group: "com.squareup.okhttp3", module: "okhttp"
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-common"
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib"
exclude group: "org.jetbrains.kotlin", module: "kotlin-stdlib-jdk8"
}
2017-04-20 18:23:59 +02:00
}
repositories {
mavenCentral()
}
def willApplyGoogleService() {
2023-06-29 16:39:48 +02:00
def gradle = getGradle()
String taskRequestsString = gradle.getStartParameter().getTaskRequests().toString()
def isMatch = Pattern.compile(
"(assemble|generate|connected)Fcm",
).matcher(taskRequestsString).find()
println "willApplyGoogleService=$isMatch. $taskRequestsString"
return isMatch
}
if (willApplyGoogleService()) apply plugin: "com.google.gms.google-services"
2021-06-20 05:02:30 +02:00
tasks.register("detektAll", Detekt) {
description = "Custom DETEKT build for all modules"
2021-06-20 05:02:30 +02:00
// activate all available (even unstable) rules.
allRules = false
// a way of suppressing issues before introducing detekt
2022-03-11 00:18:41 +01:00
// baseline = file("$rootDir/config/detekt/baseline.xml")
2021-06-20 05:02:30 +02:00
parallel = true
ignoreFailures = false
autoCorrect = false
2021-06-20 05:02:30 +02:00
// preconfigure defaults
buildUponDefaultConfig = true
def configFile = files("$rootDir/config/detekt/config.yml")
config.setFrom(configFile)
def baselineFile = file("$rootDir/config/detekt/baseline.xml")
if (baselineFile.isFile()) {
baseline.set(baselineFile)
}
source = files(
"$rootDir/anko/src",
"$rootDir/apng/src",
"$rootDir/apng_android/src",
"$rootDir/app/src",
"$rootDir/base/src",
"$rootDir/colorpicker/src",
"$rootDir/emoji/src",
"$rootDir/icon_material_symbols/src",
"$rootDir/sample_apng/src",
)
// def kotlinFiles = "**/*.kt"
// include(kotlinFiles)
def resourceFiles = "**/resources/**"
def buildFiles = "**/build/**"
exclude(resourceFiles, buildFiles)
reports {
html.enabled = true
xml.enabled = false
txt.enabled = false
xml.required.set(true)
xml.outputLocation = file("$buildDir/reports/detekt/st-${name}.xml")
html.required.set(true)
html.outputLocation = file("$buildDir/reports/detekt/st-${name}.html")
txt.required.set(true)
txt.outputLocation = file("$buildDir/reports/detekt/st-${name}.txt")
sarif.required.set(true)
sarif.outputLocation = file("$buildDir/reports/detekt/st-${name}.sarif")
2021-06-20 05:02:30 +02:00
}
}