apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: "androidx.navigation.safeargs" apply plugin: 'kotlin-kapt' apply from: 'sentry.gradle' def getGitHash = { -> def stdout = new ByteArrayOutputStream() exec { commandLine 'git', 'rev-parse', '--short', 'HEAD' standardOutput = stdout } return stdout.toString().trim() } android { compileSdkVersion 30 defaultConfig { applicationId 'me.austinhuang.instagrabber' minSdkVersion 21 targetSdkVersion 30 versionCode 65 versionName '19.2.4' multiDexEnabled true vectorDrawables.useSupportLibrary = true vectorDrawables.generatedDensities = [] javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] } } testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } sourceSets { androidTest.assets.srcDirs += files("$projectDir/schemas".toString()) } compileOptions { // Flag to enable support for the new language APIs coreLibraryDesugaringEnabled true targetCompatibility JavaVersion.VERSION_1_8 sourceCompatibility JavaVersion.VERSION_1_8 } buildFeatures { viewBinding true } aaptOptions { additionalParameters '--no-version-vectors' } buildTypes { debug { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } flavorDimensions "repo" productFlavors { github { dimension "repo" // versionNameSuffix "-github" // appended in assemble task buildConfigField("String", "dsn", SENTRY_DSN) buildConfigField("boolean", "isPre", "false") } fdroid { dimension "repo" versionNameSuffix "-fdroid" buildConfigField("boolean", "isPre", "false") } } splits { // Configures multiple APKs based on ABI. abi { // Enables building multiple APKs per ABI. enable project.hasProperty("split") && !gradle.startParameter.taskNames.isEmpty() && gradle.startParameter.taskNames.get(0).contains('Release') // By default all ABIs are included, so use reset() and include to specify that we only // want APKs for x86 and x86_64. // Resets the list of ABIs that Gradle should create APKs for to none. reset() // Specifies a list of ABIs that Gradle should create APKs for. include "x86", "x86_64", "arm64-v8a", "armeabi-v7a" // Specifies that we want to also generate a universal APK that includes all ABIs. universalApk true } } android.applicationVariants.all { variant -> if (variant.flavorName != "github") return variant.outputs.all { output -> def builtType = variant.buildType.name def versionName = variant.versionName // def versionCode = variant.versionCode def flavor = variant.flavorName def flavorBuiltType = "${flavor}_${builtType}" def suffix // For x86 and x86_64, the versionNames are already overridden if (versionName.contains(flavorBuiltType)) { suffix = "${versionName}" } else { suffix = "${versionName}-${flavorBuiltType}" // eg. 19.1.0-github_debug or release } if (builtType.toString() == 'release' && project.hasProperty("pre")) { buildConfigField("boolean", "isPre", "true") flavorBuiltType = "${getGitHash()}-${flavor}" // For x86 and x86_64, the versionNames are already overridden if (versionName.contains(flavorBuiltType)) { suffix = "${versionName}" } else { // append latest commit short hash for pre-release suffix = "${versionName}.${flavorBuiltType}" // eg. 19.1.0.b123456-github } } output.versionNameOverride = suffix def abi = output.getFilter(com.android.build.OutputFile.ABI) // println(abi + ", " + versionName + ", " + flavor + ", " + builtType + ", " + suffix) outputFileName = abi == null ? "barinsta_${suffix}.apk" : "barinsta_${suffix}_${abi}.apk" } } packagingOptions { // Exclude file to avoid // Error: Duplicate files during packaging of APK exclude 'META-INF/LICENSE.md' exclude 'META-INF/LICENSE-notice.md' exclude 'META-INF/atomicfu.kotlin_module' exclude 'META-INF/AL2.0' exclude 'META-INF/LGPL2.1' } testOptions.unitTests { includeAndroidResources = true } } configurations.all { resolutionStrategy.cacheChangingModulesFor 0, 'seconds' } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' def exoplayer_version = '2.14.1' implementation 'com.google.android.material:material:1.4.0' implementation "com.google.android.exoplayer:exoplayer-core:$exoplayer_version" implementation "com.google.android.exoplayer:exoplayer-dash:$exoplayer_version" implementation "com.google.android.exoplayer:exoplayer-ui:$exoplayer_version" implementation "androidx.recyclerview:recyclerview:1.2.1" implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation "androidx.viewpager2:viewpager2:1.0.0" implementation "androidx.constraintlayout:constraintlayout:2.0.4" implementation "androidx.preference:preference:1.1.1" implementation 'androidx.palette:palette:1.0.0' implementation 'androidx.documentfile:documentfile:1.0.1' implementation 'com.google.guava:guava:27.0.1-android' def core_version = "1.6.0" implementation "androidx.core:core:$core_version" // Fragment implementation "androidx.fragment:fragment-ktx:1.3.5" // Lifecycle implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1" implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" // Navigation implementation "androidx.navigation:navigation-fragment-ktx:$rootProject.nav_version" implementation "androidx.navigation:navigation-ui-ktx:$rootProject.nav_version" // Room def room_version = "2.3.0" implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-guava:$room_version" implementation "androidx.room:room-ktx:$room_version" kapt "androidx.room:room-compiler:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" // CameraX def camerax_version = "1.1.0-alpha06" implementation "androidx.camera:camera-camera2:$camerax_version" implementation "androidx.camera:camera-lifecycle:$camerax_version" implementation "androidx.camera:camera-view:1.0.0-alpha26" // EmojiCompat def emoji_compat_version = "1.1.0" implementation "androidx.emoji:emoji:$emoji_compat_version" implementation "androidx.emoji:emoji-appcompat:$emoji_compat_version" // Work def work_version = '2.5.0' implementation "androidx.work:work-runtime:$work_version" implementation "androidx.work:work-runtime-ktx:$work_version" implementation "ru.gildor.coroutines:kotlin-coroutines-okhttp:1.0" implementation 'com.facebook.fresco:fresco:2.5.0' implementation 'com.facebook.fresco:animated-webp:2.5.0' implementation 'com.facebook.fresco:webpsupport:2.5.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'org.apache.commons:commons-imaging:1.0-alpha2' implementation 'com.github.skydoves:balloon:1.3.5' implementation 'com.github.ammargitham:AutoLinkTextViewV2:3.2.0' implementation 'com.github.ammargitham:uCrop:2.3-non-native' implementation 'com.github.ammargitham:android-gpuimage:2.1.1-beta4' debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' githubImplementation 'io.sentry:sentry-android:5.0.1' testImplementation 'org.junit.jupiter:junit-jupiter:5.7.2' testImplementation "androidx.test.ext:junit-ktx:1.1.3" testImplementation "androidx.test:core-ktx:1.4.0" testImplementation "androidx.arch.core:core-testing:2.1.0" testImplementation "org.robolectric:robolectric:4.5.1" testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.5.0' androidTestImplementation 'org.junit.jupiter:junit-jupiter:5.7.2' androidTestImplementation 'androidx.test:core:1.4.0' androidTestImplementation 'com.android.support:support-annotations:28.0.0' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation "androidx.room:room-testing:2.3.0" androidTestImplementation "androidx.arch.core:core-testing:2.1.0" androidTestImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.5.0' }