2022-03-12 16:50:37 +01:00
import io.gitlab.arturbosch.detekt.Detekt
2023-07-10 23:52:31 +02:00
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2022-03-12 16:50:37 +01:00
2017-04-23 07:42:09 +02:00
import java.text.SimpleDateFormat
2023-02-04 21:52:26 +01:00
import java.util.regex.Pattern
plugins {
id ( "com.android.application" )
id ( "org.jetbrains.kotlin.android" )
id ( "org.jetbrains.kotlin.plugin.serialization" )
2023-04-22 19:52:20 +02:00
id ( "com.google.devtools.ksp" ) . version ( "$kspVersion" )
2023-02-04 21:52:26 +01:00
id ( "io.gitlab.arturbosch.detekt" )
}
2017-04-20 18:23:59 +02:00
2023-02-08 20:50:08 +01: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 {
2023-02-01 17:11:39 +01:00
compileSdkVersion stCompileSdkVersion
buildToolsVersion stBuildToolsVersion
2018-09-12 07:55:15 +02:00
2019-07-31 20:30:56 +02:00
// exoPlayer 2.9.0 以降は Java 8 compiler support を要求する
2019-07-12 06:38:19 +02:00
compileOptions {
2023-04-15 22:23:34 +02:00
sourceCompatibility javaSourceCompatibility
targetCompatibility javaTargetCompatibility
2022-11-07 03:45:17 +01:00
coreLibraryDesugaringEnabled true
2019-07-12 06:38:19 +02:00
}
2017-04-20 18:23:59 +02:00
defaultConfig {
2023-02-01 17:11:39 +01:00
targetSdkVersion stTargetSdkVersion
minSdkVersion stMinSdkVersion
2018-01-14 22:47:42 +01:00
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"
2021-11-06 04:00:29 +01:00
vectorDrawables . useSupportLibrary = true
2023-01-17 13:42:47 +01:00
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
2017-04-20 18:23:59 +02:00
}
2017-04-25 16:47:27 +02:00
2023-03-31 04:28:59 +02:00
buildFeatures {
viewBinding true
2021-11-06 21:36:59 +01:00
}
2021-05-27 04:15:59 +02:00
kotlinOptions {
2023-02-01 17:11:39 +01:00
jvmTarget = kotlinJvmTarget
2021-05-27 04:15:59 +02:00
freeCompilerArgs + = [
2022-05-29 15:38:21 +02:00
"-opt-in=kotlin.ExperimentalStdlibApi" ,
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi" ,
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi" ,
2023-07-10 23:52:31 +02:00
"-opt-in=androidx.media3.common.util.UnstableApi"
2022-05-29 07:00:51 +02:00
// "-Xopt-in=androidx.compose.foundation.ExperimentalFoundationApi",
// "-Xopt-in=androidx.compose.animation.ExperimentalAnimationApi",
2021-05-27 04:15:59 +02:00
]
}
2021-11-20 01:36:43 +01:00
// 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
// }
2022-05-29 07:00:51 +02:00
// composeOptions {
// kotlinCompilerExtensionVersion compose_version
// }
2021-05-22 00:03:16 +02:00
2023-02-08 20:50:08 +01:00
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 {
2023-02-04 21:52:26 +01:00
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile ( "proguard-android.txt" ) , "proguard-rules.pro"
2018-08-31 15:22:51 +02:00
lintOptions {
2023-02-04 21:52:26 +01:00
disable "MissingTranslation"
2018-08-31 15:22:51 +02:00
}
2023-02-08 20:50:08 +01:00
signingConfig signingConfigs . release
2017-04-20 18:23:59 +02:00
}
2023-02-04 21:52:26 +01:00
debug {
2023-02-01 19:07:26 +01:00
}
2017-04-20 18:23:59 +02:00
}
2017-04-25 16:47:27 +02:00
2017-11-04 15:51:15 +01:00
// Specifies comma-separated list of flavor dimensions.
2023-02-04 21:52:26 +01:00
flavorDimensions "fcmType"
2017-11-04 15:51:15 +01:00
2017-04-23 07:42:09 +02:00
productFlavors {
2023-02-04 21:52:26 +01:00
nofcm {
dimension "fcmType"
versionNameSuffix "-noFcm"
2023-02-08 20:50:08 +01:00
applicationIdSuffix ".noFcm"
2023-07-19 05:31:16 +02:00
manifestPlaceholders = [ customScheme: "subwaytooternofcm" ]
2023-02-04 21:52:26 +01:00
}
fcm {
dimension "fcmType"
2023-07-19 05:31:16 +02:00
manifestPlaceholders = [ customScheme: "subwaytooter" ]
2017-04-23 07:42:09 +02:00
}
}
2023-02-11 13:51:19 +01: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 のファイル名を変更
2017-11-04 15:51:15 +01:00
android . applicationVariants . all { variant - >
2017-04-23 07:42:09 +02:00
if ( variant . buildType . name = = "release" ) {
2023-02-11 13:51:19 +01:00
variant . outputs . all { output - >
2017-11-04 15:51:15 +01:00
// Rename APK
def versionCode = defaultConfig . versionCode
def versionName = defaultConfig . versionName
def flavor = variant . flavorName
2023-02-11 13:51:19 +01:00
// def abi = output.getFilter("ABI") ?: "all"
2017-11-04 15:51:15 +01:00
def date = new SimpleDateFormat ( "yyyyMMdd_HHmmss" ) . format ( new Date ( ) )
2023-04-23 00:00:53 +02:00
def branch = providers . exec {
commandLine ( "git" , "rev-parse" , "--abbrev-ref" , "HEAD" )
} . standardOutput . asText . get ( ) ? . trim ( ) ? : "(no branch)"
2023-04-23 00:09:48 +02:00
2023-04-15 20:30:14 +02:00
outputFileName = "SubwayTooter-${branch}-${flavor}-${versionCode}-${versionName}-${date}.apk"
2017-04-23 07:42:09 +02:00
}
}
}
2017-11-04 15:51:15 +01:00
2019-04-13 01:12:17 +02:00
packagingOptions {
2021-10-27 22:58:19 +02:00
resources {
2023-02-04 21:52:26 +01:00
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
2023-02-04 21:52:26 +01:00
pickFirsts + = [ "META-INF/atomicfu.kotlin_module" ]
2021-10-27 22:58:19 +02:00
}
2019-04-13 01:12:17 +02:00
}
2019-08-30 06:02:08 +02:00
2023-02-04 21:52:26 +01:00
useLibrary "android.test.base"
useLibrary "android.test.mock"
2023-01-26 16:54:04 +01:00
lint {
2023-02-04 21:52:26 +01:00
warning "DuplicatePlatformClasses"
2022-03-14 01:16:44 +01:00
}
2023-02-04 21:52:26 +01:00
namespace "jp.juggler.subwaytooter"
2023-01-26 16:54:04 +01:00
2017-04-20 18:23:59 +02:00
}
2023-04-15 22:23:34 +02:00
kotlin {
jvmToolchain ( kotlinJvmToolchain )
}
2023-07-10 23:52:31 +02:00
tasks . withType ( KotlinCompile ) . configureEach {
2023-04-15 22:23:34 +02:00
kotlinOptions {
jvmTarget = kotlinJvmTarget
}
}
2017-04-20 18:23:59 +02:00
dependencies {
2022-11-07 03:45:17 +01:00
// desugar_jdk_libs 2.0.0 は AGP 7.4.0-alpha10 以降を要求する
//noinspection GradleDependency
2023-02-01 17:11:39 +01:00
coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:$desugarLibVersion"
2022-11-07 03:45:17 +01:00
2023-06-29 16:39:48 +02:00
implementation project ( ":base" )
2023-02-04 21:52:26 +01:00
implementation project ( ":colorpicker" )
implementation project ( ":emoji" )
implementation project ( ":apng_android" )
implementation project ( ":anko" )
implementation fileTree ( include: [ "*.aar" ] , dir: "src/main/libs" )
2018-01-04 19:52:25 +01:00
2023-03-31 04:17:11 +02:00
fcmImplementation "com.google.firebase:firebase-messaging:23.1.2"
2023-02-10 05:57:07 +01:00
fcmImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$kotlinxCoroutinesVersion"
2023-02-06 03:10:24 +01:00
2023-02-01 19:07:26 +01:00
// implementation "org.conscrypt:conscrypt-android:$conscryptVersion"
api "org.conscrypt:conscrypt-android:$conscryptVersion"
2023-02-04 21:52:26 +01:00
implementation "com.github.UnifiedPush:android-connector:2.1.1"
2023-02-09 23:34:40 +01:00
implementation "jp.wasabeef:glide-transformations:4.3.0"
2023-07-10 23:52:31 +02:00
implementation 'com.github.androidmads:QRGenerator:1.0.1'
2023-06-29 16:39:48 +02:00
def apng4AndroidVersion = '2.25.0'
2023-02-09 23:34:40 +01:00
implementation "com.github.penfeizhou.android.animation:apng:$apng4AndroidVersion"
2022-06-13 19:23:46 +02:00
2023-02-04 21:52:26 +01:00
ksp "com.github.bumptech.glide:ksp:$glideVersion"
2023-01-14 11:19:01 +01:00
2023-02-01 17:11:39 +01:00
detektPlugins ( "io.gitlab.arturbosch.detekt:detekt-formatting:$detektVersion" )
2023-01-15 08:51:13 +01:00
testImplementation ( project ( ":base" ) )
androidTestImplementation ( project ( ":base" ) )
2023-02-01 17:11:39 +01:00
androidTestApi "androidx.test.espresso:espresso-core:$androidxTestEspressoCoreVersion"
2023-01-15 08:51:13 +01:00
androidTestApi "androidx.test.ext:junit-ktx:1.1.5"
2023-02-01 17:11:39 +01:00
androidTestApi "androidx.test.ext:junit:$androidxTestExtJunitVersion"
2023-01-15 08:51:13 +01:00
androidTestApi "androidx.test.ext:truth:1.5.0"
2023-02-01 17:11:39 +01:00
androidTestApi "androidx.test:core-ktx:$testKtxVersion"
androidTestApi "androidx.test:core:$androidxTestVersion"
2023-01-15 08:51:13 +01:00
androidTestApi "androidx.test:runner:1.5.2"
2023-06-29 16:39:48 +02:00
androidTestApi "org.jetbrains.kotlin:kotlin-test:$kotlinTestVersion"
2023-02-01 17:11:39 +01:00
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"
2023-02-01 17:11:39 +01:00
testApi "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinxCoroutinesVersion"
2023-01-15 08:51:13 +01:00
// 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
}
2017-05-24 11:20:56 +02:00
2017-11-04 15:51:15 +01:00
repositories {
mavenCentral ( )
}
2017-12-22 13:59:52 +01:00
2023-02-04 21:52:26 +01:00
def willApplyGoogleService ( ) {
2023-06-29 16:39:48 +02:00
def gradle = getGradle ( )
2023-05-15 03:03:30 +02:00
String taskRequestsString = gradle . getStartParameter ( ) . getTaskRequests ( ) . toString ( )
2023-02-04 21:52:26 +01:00
2023-05-15 03:03:30 +02:00
def isMatch = Pattern . compile (
2023-02-05 16:44:28 +01:00
"(assemble|generate|connected)Fcm" ,
2023-05-15 03:03:30 +02:00
) . matcher ( taskRequestsString ) . find ( )
println "willApplyGoogleService=$isMatch. $taskRequestsString"
return isMatch
2023-02-04 21:52:26 +01:00
}
if ( willApplyGoogleService ( ) ) apply plugin: "com.google.gms.google-services"
2021-06-20 05:02:30 +02:00
2023-01-14 11:19:01 +01: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
2023-01-14 11:19:01 +01:00
parallel = true
ignoreFailures = false
autoCorrect = false
2021-06-20 05:02:30 +02:00
2023-01-14 11:19:01 +01:00
// preconfigure defaults
buildUponDefaultConfig = true
2023-01-15 08:51:13 +01:00
def configFile = files ( "$rootDir/config/detekt/config.yml" )
2023-01-14 11:19:01 +01:00
config . setFrom ( configFile )
2023-01-15 08:51:13 +01:00
def baselineFile = file ( "$rootDir/config/detekt/baseline.xml" )
2023-01-14 11:19:01 +01:00
if ( baselineFile . isFile ( ) ) {
baseline . set ( baselineFile )
}
2023-01-15 08:51:13 +01:00
source = files (
2023-02-01 17:11:39 +01:00
"$rootDir/anko/src" ,
2023-01-15 08:51:13 +01:00
"$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/**"
2023-01-14 11:19:01 +01:00
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
}
}
2023-02-04 21:52:26 +01:00