228 lines
7.9 KiB
Groovy
228 lines
7.9 KiB
Groovy
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
|
|
plugins {
|
|
id 'com.android.application'
|
|
id 'com.google.devtools.ksp'
|
|
id 'kotlin-android'
|
|
id 'kotlin-kapt'
|
|
id 'dev.flutter.flutter-gradle-plugin'
|
|
}
|
|
|
|
def packageName = "deckers.thibault.aves"
|
|
|
|
// Flutter properties
|
|
|
|
def localProperties = new Properties()
|
|
def localPropertiesFile = rootProject.file('local.properties')
|
|
if (localPropertiesFile.exists()) {
|
|
localPropertiesFile.withReader('UTF-8') { reader ->
|
|
localProperties.load(reader)
|
|
}
|
|
}
|
|
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
|
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
|
|
|
// Keys
|
|
|
|
def keystoreProperties = new Properties()
|
|
def keystorePropertiesFile = rootProject.file('key.properties')
|
|
if (keystorePropertiesFile.exists()) {
|
|
// for release using credentials stored in a local file
|
|
keystorePropertiesFile.withReader('UTF-8') { reader ->
|
|
keystoreProperties.load(reader)
|
|
}
|
|
} else {
|
|
// for release using credentials in environment variables set up by GitHub Actions
|
|
// warning: in property file, single quotes should be escaped with a backslash
|
|
// but they should not be escaped when stored in env variables
|
|
keystoreProperties["storeFile"] = System.getenv("AVES_STORE_FILE") ?: "<NONE>"
|
|
keystoreProperties["storePassword"] = System.getenv("AVES_STORE_PASSWORD") ?: "<NONE>"
|
|
keystoreProperties["keyAlias"] = System.getenv("AVES_KEY_ALIAS") ?: "<NONE>"
|
|
keystoreProperties["keyPassword"] = System.getenv("AVES_KEY_PASSWORD") ?: "<NONE>"
|
|
keystoreProperties["googleApiKey"] = System.getenv("AVES_GOOGLE_API_KEY") ?: "<NONE>"
|
|
}
|
|
|
|
android {
|
|
namespace 'deckers.thibault.aves'
|
|
compileSdk 35
|
|
// cf https://developer.android.com/studio/projects/install-ndk#default-ndk-per-agp
|
|
ndkVersion '26.1.10909125'
|
|
|
|
compileOptions {
|
|
sourceCompatibility JavaVersion.VERSION_17
|
|
targetCompatibility JavaVersion.VERSION_17
|
|
}
|
|
|
|
lint {
|
|
checkAllWarnings true
|
|
warningsAsErrors true
|
|
disable 'InvalidPackage'
|
|
}
|
|
|
|
sourceSets {
|
|
main.java.srcDirs += 'src/main/kotlin'
|
|
}
|
|
|
|
defaultConfig {
|
|
applicationId packageName
|
|
minSdk flutter.minSdkVersion
|
|
targetSdk 35
|
|
versionCode flutterVersionCode.toInteger()
|
|
versionName flutterVersionName
|
|
manifestPlaceholders = [googleApiKey: keystoreProperties["googleApiKey"] ?: "<NONE>"]
|
|
multiDexEnabled true
|
|
}
|
|
|
|
signingConfigs {
|
|
release {
|
|
keyAlias keystoreProperties["keyAlias"]
|
|
keyPassword keystoreProperties["keyPassword"]
|
|
storeFile keystoreProperties["storeFile"] ? file(keystoreProperties["storeFile"]) : null
|
|
storePassword keystoreProperties["storePassword"]
|
|
}
|
|
}
|
|
|
|
flavorDimensions = ["store"]
|
|
|
|
productFlavors {
|
|
play {
|
|
// Google Play
|
|
dimension "store"
|
|
// generate a universal APK without x86 native libs
|
|
ext.useNdkAbiFilters = true
|
|
}
|
|
|
|
izzy {
|
|
// IzzyOnDroid
|
|
// check offending libraries with `scanapk`
|
|
// cf https://android.izzysoft.de/articles/named/app-modules-2
|
|
dimension "store"
|
|
// generate APK by ABI, but NDK ABI filters are incompatible with split APK generation
|
|
ext.useNdkAbiFilters = false
|
|
}
|
|
|
|
libre {
|
|
// F-Droid
|
|
// check offending libraries with `fdroidserver`
|
|
// cf https://f-droid.org/en/docs/Submitting_to_F-Droid_Quick_Start_Guide/
|
|
dimension "store"
|
|
// generate APK by ABI, but NDK ABI filters are incompatible with split APK generation
|
|
ext.useNdkAbiFilters = false
|
|
applicationIdSuffix ".libre"
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
debug {
|
|
applicationIdSuffix ".debug"
|
|
}
|
|
profile {
|
|
applicationIdSuffix ".profile"
|
|
}
|
|
release {
|
|
signingConfig signingConfigs.release
|
|
minifyEnabled true
|
|
shrinkResources true
|
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
|
}
|
|
|
|
applicationVariants.all { variant ->
|
|
variant.resValue 'string', 'screen_saver_settings_activity', "${applicationId}/${packageName}.ScreenSaverSettingsActivity"
|
|
variant.resValue 'string', 'search_provider', "${applicationId}.search_provider"
|
|
|
|
variant.outputs.each { output ->
|
|
def baseAbiVersionCode = rootProject.ext.abiCodes.get(output.getFilter(com.android.build.OutputFile.ABI))
|
|
if (baseAbiVersionCode != null) {
|
|
output.versionCodeOverride = variant.versionCode * 100 + baseAbiVersionCode
|
|
}
|
|
}
|
|
}
|
|
|
|
android.productFlavors.each { flavor ->
|
|
def tasks = gradle.startParameter.taskNames.toString().toLowerCase()
|
|
if (tasks.contains(flavor.name) && flavor.ext.useNdkAbiFilters) {
|
|
release {
|
|
// specify architectures, to specifically exclude native libs for x86,
|
|
// which lead to: UnsatisfiedLinkError...couldn't find "libflutter.so"
|
|
// cf https://github.com/flutter/flutter/issues/37566#issuecomment-640879500
|
|
ndk {
|
|
//noinspection ChromeOsAbiSupport
|
|
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.withType(KotlinCompile).configureEach {
|
|
sourceCompatibility = JavaVersion.VERSION_17
|
|
targetCompatibility = JavaVersion.VERSION_17
|
|
}
|
|
|
|
kotlin {
|
|
jvmToolchain(17)
|
|
}
|
|
|
|
flutter {
|
|
source '../..'
|
|
}
|
|
|
|
repositories {
|
|
maven {
|
|
url 'https://jitpack.io'
|
|
content {
|
|
includeGroup "com.github.deckerst"
|
|
includeGroup "com.github.deckerst.mp4parser"
|
|
}
|
|
}
|
|
maven {
|
|
url 'https://s3.amazonaws.com/repo.commonsware.com'
|
|
content {
|
|
excludeGroupByRegex "com\\.github\\.deckerst.*"
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1'
|
|
|
|
implementation "androidx.appcompat:appcompat:1.7.0"
|
|
implementation 'androidx.core:core-ktx:1.13.1'
|
|
implementation 'androidx.lifecycle:lifecycle-process:2.8.4'
|
|
implementation 'androidx.media:media:1.7.0'
|
|
implementation 'androidx.multidex:multidex:2.0.1'
|
|
implementation 'androidx.security:security-crypto:1.1.0-alpha06'
|
|
implementation 'androidx.work:work-runtime-ktx:2.9.0'
|
|
|
|
implementation 'com.caverock:androidsvg-aar:1.4'
|
|
implementation 'com.commonsware.cwac:document:0.5.0'
|
|
implementation 'com.drewnoakes:metadata-extractor:2.19.0'
|
|
implementation "com.github.bumptech.glide:glide:$glide_version"
|
|
implementation 'com.google.android.material:material:1.12.0'
|
|
// SLF4J implementation for `mp4parser`
|
|
implementation 'org.slf4j:slf4j-simple:2.0.14'
|
|
|
|
// forked, built by JitPack:
|
|
// - https://jitpack.io/p/deckerst/Android-TiffBitmapFactory
|
|
// - https://jitpack.io/p/deckerst/mp4parser
|
|
// - https://jitpack.io/p/deckerst/pixymeta-android
|
|
implementation 'com.github.deckerst:Android-TiffBitmapFactory:90c06eebf4'
|
|
implementation 'com.github.deckerst.mp4parser:isoparser:4cc0c5d06c'
|
|
implementation 'com.github.deckerst.mp4parser:muxer:4cc0c5d06c'
|
|
implementation 'com.github.deckerst:pixymeta-android:9ec7097f17'
|
|
implementation project(':exifinterface')
|
|
|
|
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.10.3'
|
|
|
|
kapt 'androidx.annotation:annotation:1.8.1'
|
|
ksp "com.github.bumptech.glide:ksp:$glide_version"
|
|
|
|
compileOnly rootProject.findProject(':streams_channel')
|
|
}
|
|
|
|
if (useCrashlytics) {
|
|
println("Building flavor with Crashlytics plugin")
|
|
apply plugin: 'com.google.gms.google-services'
|
|
apply plugin: 'com.google.firebase.crashlytics'
|
|
}
|