SubwayTooter-Android-App/app/build.gradle

332 lines
12 KiB
Groovy

import io.gitlab.arturbosch.detekt.Detekt
import io.gitlab.arturbosch.detekt.DetektPlugin
import java.text.SimpleDateFormat
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'org.jetbrains.kotlin.plugin.serialization'
apply plugin: "io.gitlab.arturbosch.detekt"
apply plugin: 'com.google.gms.google-services'
android {
compileSdkVersion compile_sdk_version
buildToolsVersion build_tools_version
// exoPlayer 2.9.0 以降は Java 8 compiler support を要求する
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
coreLibraryDesugaringEnabled true
}
defaultConfig {
targetSdkVersion target_sdk_version
minSdkVersion min_sdk_version
versionCode 504
versionName "5.0.4"
applicationId "jp.juggler.subwaytooter"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
viewBinding {
enabled = true
}
kotlinOptions {
jvmTarget = jvm_target
freeCompilerArgs += [
"-opt-in=kotlin.ExperimentalStdlibApi",
"-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-opt-in=kotlinx.serialization.ExperimentalSerializationApi",
// "-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
// }
buildTypes {
release {
minifyEnabled false
shrinkResources false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
lintOptions {
disable 'MissingTranslation'
}
}
}
// Specifies comma-separated list of flavor dimensions.
flavorDimensions "rcOrDev"
productFlavors {
rc {
dimension "rcOrDev"
}
}
// Generate Signed APK のファイル名を変更
android.applicationVariants.all { variant ->
if (variant.buildType.name == "release") {
variant.outputs.all {
// Rename APK
def versionCode = defaultConfig.versionCode
def versionName = defaultConfig.versionName
def flavor = variant.flavorName
def date = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())
def branch = gitBranch()
outputFileName = "../../SubwayTooter-${branch}-${flavor}-${versionCode}-${versionName}-${date}.apk"
}
}
}
packagingOptions {
// https://github.com/Kotlin/kotlinx.coroutines/issues/1064
pickFirst("META-INF/atomicfu.kotlin_module")
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
exclude 'META-INF/DEPENDENCIES'
}
useLibrary 'android.test.base'
useLibrary 'android.test.mock'
lintOptions {
warning 'DuplicatePlatformClasses'
}
}
static def gitBranch() {
def branch = "(no branch)"
def proc = "git status".execute()
proc.in.eachLine { line ->
def matcher = line =~ /\AOn branch (\S+)/
if (matcher) branch = matcher.group(1)
}
proc.err.eachLine { line -> println line }
proc.waitFor()
branch
}
kapt {
useBuildCache = true
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.aar'], dir: 'src/main/libs')
// desugar_jdk_libs 2.0.0 は AGP 7.4.0-alpha10 以降を要求する
//noinspection GradleDependency
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.0'
// targetSdkVersion 31 で androidTest 時に android:exported 云々で怒られる問題の対策
// https://github.com/android/android-test/issues/1022
androidTestImplementation "androidx.test:core:$androidx_test_version"
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-alpha4', {
exclude group: 'com.android.support', module: 'support-annotations'
})
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:$detekt_version")
detektPlugins("io.gitlab.arturbosch.detekt:detekt-cli:$detekt_version")
// implementation project(':exif')
implementation project(':colorpicker')
implementation project(':emoji')
implementation project(':apng_android')
implementation "androidx.appcompat:appcompat:$appcompat_version"
implementation "androidx.core:core-ktx:1.9.0"
def emoji2Version = "1.2.0"
implementation "androidx.emoji2:emoji2:$emoji2Version"
implementation "androidx.emoji2:emoji2-views:$emoji2Version"
implementation "androidx.emoji2:emoji2-views-helper:$emoji2Version"
implementation "androidx.emoji2:emoji2-bundled:$emoji2Version"
// DrawerLayout
implementation "androidx.drawerlayout:drawerlayout:1.1.1"
// NavigationView
implementation "com.google.android.material:material:1.7.0"
implementation "androidx.exifinterface:exifinterface:1.3.5"
// CustomTabs
implementation "androidx.browser:browser:1.4.0"
// Recyclerview
implementation "androidx.recyclerview:recyclerview:1.2.1"
kapt 'androidx.annotation:annotation:1.5.0'
// https://firebase.google.com/support/release-notes/android
implementation "com.google.firebase:firebase-messaging:23.1.1"
implementation "org.jetbrains.kotlin:kotlin-reflect"
testImplementation "org.jetbrains.kotlin:kotlin-test"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinx_coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:$kotlinx_coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2"
implementation "ru.gildor.coroutines:kotlin-coroutines-okhttp:1.0"
testImplementation "junit:junit:$junit_version" // しばらくはkotlin-testとjunitを併用
def okhttpVersion = "4.10.0"
implementation "com.squareup.okhttp3:okhttp:$okhttpVersion"
implementation "com.squareup.okhttp3:okhttp-urlconnection:$okhttpVersion"
testImplementation("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'
}
androidTestImplementation("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'
}
def glideVersion = '4.13.2'
implementation "com.github.bumptech.glide:glide:$glideVersion"
implementation "com.github.bumptech.glide:annotations:$glideVersion"
implementation("com.github.bumptech.glide:okhttp3-integration:$glideVersion") {
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}
kapt "com.github.bumptech.glide:compiler:$glideVersion"
implementation "org.conscrypt:conscrypt-android:2.5.2"
implementation 'io.github.inflationx:calligraphy3:3.1.1'
implementation 'io.github.inflationx:viewpump:2.0.3'
implementation 'com.github.woxthebox:draglistview:1.6.6'
implementation 'com.github.omadahealth:swipy:1.2.3@aar'
implementation 'com.github.kenglxn.QRGen:android:2.5.0'
implementation 'com.google.android.flexbox:flexbox:3.0.0'
implementation 'com.astuetz:pagerslidingtabstrip:1.0.1'
implementation 'com.google.android.exoplayer:exoplayer:2.18.2'
/*
WARNING: [Processor] Library '…\exoplayer-ui-2.12.0.aar' contains references to both AndroidX and old support library. This seems like the library is partially migrated. Jetifier will try to rewrite the library anyway.
Example of androidX reference: 'androidx/core/app/NotificationCompat$Builder'
Example of support library reference: 'android/support/v4/media/session/MediaSessionCompat$Token'
…expPlayerも苦労してるんだなあ…
*/
implementation 'com.caverock:androidsvg-aar:1.4'
implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
// Saved state module for ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"
// if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
// optional - helpers for implementing LifecycleOwner in a Service
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"
// optional - ProcessLifecycleOwner provides a lifecycle for the whole application process
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "androidx.arch.core:core-testing:$arch_version"
implementation 'androidx.work:work-runtime-ktx:2.8.0-rc01'
def roomVersion = "2.4.3"
implementation "androidx.room:room-runtime:$roomVersion"
implementation "androidx.room:room-ktx:$roomVersion"
kapt "androidx.room:room-compiler:$roomVersion"
def workVersion = "2.7.1"
implementation "androidx.work:work-runtime:$workVersion"
implementation "androidx.work:work-runtime-ktx:$workVersion"
implementation "androidx.startup:startup-runtime:1.1.1"
// Koin main features for Android
implementation "io.insert-koin:koin-android:$koin_version"
implementation "io.insert-koin:koin-android-compat:$koin_version"
implementation "io.insert-koin:koin-androidx-workmanager:$koin_version"
// implementation "io.insert-koin:koin-androidx-navigation:$koin_version"
// implementation "io.insert-koin:koin-androidx-compose:$koin_version"
// video transcoder https://github.com/natario1/Transcoder
implementation "com.otaliastudios:transcoder:0.10.4"
// LiveEvent
implementation "com.github.hadilq:live-event:1.3.0"
}
repositories {
mavenCentral()
}
detekt {
// relative path from module path.
basePath = projectDir
// preconfigure defaults
buildUponDefaultConfig = true
// activate all available (even unstable) rules.
allRules = false
// a way of suppressing issues before introducing detekt
// baseline = file("$rootDir/config/detekt/baseline.xml")
// point to your custom config defining rules to run, overwriting default behavior
config = files("$rootDir/config/detekt/config.yml")
}
plugins.withType(DetektPlugin) {
tasks.withType(Detekt) {
reports {
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")
}
}
}