import java.time.Instant plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' id 'kotlinx-serialization' } android { compileSdk 33 defaultConfig { applicationId 'com.github.libretube' minSdk 21 targetSdk 33 versionCode 34 versionName '0.14.1' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' resValue "string", "app_name", "LibreTube" javaCompileOptions { annotationProcessorOptions { arguments += ["room.schemaLocation": "$projectDir/schemas".toString()] } } } buildFeatures { viewBinding true } applicationVariants.all { variant -> // use the date as version for debug builds if (variant.name == 'debug') { variant.outputs.each { output -> output.versionCodeOverride = getUnixTime() } } } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } debug { debuggable true applicationIdSuffix ".debug" resValue "string", "app_name", "LibreTube Debug" } } compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = JavaVersion.VERSION_17 } splits { abi { enable true reset() include "armeabi-v7a", "arm64-v8a", "x86", "x86_64" universalApk true } } packagingOptions { jniLibs { excludes += ['lib/armeabi-v7a/*_neon.so'] } } namespace 'com.github.libretube' } dependencies { //debugImplementation libs.square.leakcanary /* Android Core */ implementation libs.androidx.appcompat implementation libs.androidx.core implementation libs.androidx.constraintlayout implementation libs.androidx.legacySupport implementation libs.androidx.navigation.fragment implementation libs.androidx.navigation.ui implementation libs.androidx.preference implementation libs.androidx.work.runtime /* Android Lifecycle */ implementation libs.lifecycle.viewmodel implementation libs.lifecycle.runtime implementation libs.lifecycle.livedata implementation libs.lifecycle.service /* Testing */ androidTestImplementation libs.androidx.test.junit androidTestImplementation libs.androidx.test.espressoCore /* Design */ implementation libs.material /* ExoPlayer */ implementation libs.androidx.media3.exoplayer implementation libs.androidx.media3.ui implementation libs.androidx.media3.exoplayer.hls implementation libs.androidx.media3.exoplayer.dash implementation libs.androidx.media3.session implementation(libs.androidx.media3.datasource.cronet) { exclude group: 'com.google.android.gms' } /* Retrofit and Kotlinx Serialization */ implementation libs.square.retrofit implementation libs.kotlinx.serialization implementation libs.kotlinx.datetime implementation libs.kotlinx.serialization.retrofit /* Cronet and Coil */ coreLibraryDesugaring libs.desugaring implementation libs.cronet.embedded implementation libs.cronet.okhttp implementation libs.coil /* Room */ kapt libs.room.compiler implementation libs.room } static def getUnixTime() { return Instant.now().getEpochSecond() }