diff --git a/app/build.gradle b/app/build.gradle deleted file mode 100644 index 5e3817b17..000000000 --- a/app/build.gradle +++ /dev/null @@ -1,159 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-kapt' - -def keystorePropertiesFile = rootProject.file("keystore.properties") -def keystoreProperties = new Properties() -if (keystorePropertiesFile.exists()) { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) -} - -android { - compileSdkVersion 34 - namespace = "com.simplemobiletools.gallery.pro" - - defaultConfig { - applicationId "com.simplemobiletools.gallery.pro" - minSdkVersion 23 - targetSdkVersion 34 - versionCode 394 - versionName "6.27.2" - setProperty("archivesBaseName", "gallery-$versionCode") - vectorDrawables.useSupportLibrary = true - } - - signingConfigs { - if (keystorePropertiesFile.exists()) { - release { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile file(keystoreProperties['storeFile']) - storePassword keystoreProperties['storePassword'] - } - } - } - - buildTypes { - debug { - // we cannot change the original package name, else PhotoEditorSDK won't work - //applicationIdSuffix ".debug" - } - release { - minifyEnabled true - shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - if (keystorePropertiesFile.exists()) { - signingConfig signingConfigs.release - } - } - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - if (is_proprietary) { - main.java.srcDirs += 'src/proprietary/kotlin' - } - } - - flavorDimensions "licensing" - productFlavors { - proprietary {} - foss {} - prepaid {} - } - - lintOptions { - checkReleaseBuilds false - abortOnError false - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - packagingOptions { - resources { - excludes += ['META-INF/library_release.kotlin_module'] - } - } - - buildFeatures { - buildConfig = true - viewBinding = true - } -} - -dependencies { - implementation 'com.github.esensar:Simple-Commons:98cea1b5bb' - implementation 'com.vanniktech:android-image-cropper:4.5.0' - implementation 'it.sephiroth.android.exif:library:1.0.1' - implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.25' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.media3:media3-exoplayer:1.1.0' - implementation 'com.google.vr:sdk-panowidget:1.180.0' - implementation 'com.google.vr:sdk-videowidget:1.180.0' - implementation 'org.apache.sanselan:sanselan:0.97-incubator' - implementation 'info.androidhive:imagefilters:1.0.7' - implementation 'com.caverock:androidsvg-aar:1.4' - implementation 'com.github.tibbi:gestureviews:a8e8fa8d27' - implementation 'com.github.tibbi:subsampling-scale-image-view:80efdaa570' - implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'com.github.penfeizhou.android.animation:awebp:2.25.0' - implementation 'com.github.penfeizhou.android.animation:apng:2.25.0' - implementation 'com.squareup.okio:okio:3.0.0' - implementation('com.squareup.picasso:picasso:2.71828') { - exclude group: 'com.squareup.okhttp3', module: 'okhttp' - } - compileOnly 'com.squareup.okhttp3:okhttp:4.9.0' - - kapt 'com.github.bumptech.glide:compiler:4.15.1' - - kapt 'androidx.room:room-compiler:2.5.2' - implementation 'androidx.room:room-runtime:2.5.2' - annotationProcessor 'androidx.room:room-compiler:2.5.2' - - //implementation project(':commons') -} - -// Apply the PESDKPlugin -if (is_proprietary) { - apply plugin: 'ly.img.android.sdk' - - imglyConfig { - vesdk { - enabled true - licensePath 'vesdk_android_license' - } - - pesdk { - enabled true - licensePath 'pesdk_android_license' - } - - modules { - include 'ui:video-trim' - include 'ui:core' - include 'ui:text' - include 'ui:focus' - include 'ui:brush' - include 'ui:filter' - include 'ui:sticker' - include 'ui:overlay' - include 'ui:transform' - include 'ui:adjustment' - include 'ui:video-composition' - - include 'backend:serializer' - include 'backend:sticker-smart' - include 'backend:sticker-animated' - - include 'assets:font-basic' - include 'assets:filter-basic' - include 'assets:overlay-basic' - include 'assets:sticker-shapes' - include 'assets:sticker-emoticons' - include 'assets:sticker-animated' - } - } -} diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 000000000..7ed9da937 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,135 @@ +import java.io.FileInputStream +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.konan.properties.Properties + +val isProprietary = gradle.startParameter.taskNames.any { task -> task.contains("Proprietary") } + +plugins { + alias(libs.plugins.android) + alias(libs.plugins.kotlinAndroid) + alias(libs.plugins.ksp) + alias(libs.plugins.imgly).apply(false) +} + +val keystorePropertiesFile: File = rootProject.file("keystore.properties") +val keystoreProperties = Properties() +if (keystorePropertiesFile.exists()) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + +android { + compileSdk = project.libs.versions.app.build.compileSDKVersion.get().toInt() + + defaultConfig { + applicationId = libs.versions.app.version.appId.get() + minSdk = project.libs.versions.app.build.minimumSDK.get().toInt() + targetSdk = project.libs.versions.app.build.targetSDK.get().toInt() + versionName = project.libs.versions.app.version.versionName.get() + versionCode = project.libs.versions.app.version.versionCode.get().toInt() + setProperty("archivesBaseName", "gallery-$versionCode") + } + + signingConfigs { + if (keystorePropertiesFile.exists()) { + register("release") { + keyAlias = keystoreProperties.getProperty("keyAlias") + keyPassword = keystoreProperties.getProperty("keyPassword") + storeFile = file(keystoreProperties.getProperty("storeFile")) + storePassword = keystoreProperties.getProperty("storePassword") + } + } + } + + buildFeatures { + viewBinding = true + buildConfig = true + } + + buildTypes { + debug { + // we cannot change the original package name, else PhotoEditorSDK won't work + //applicationIdSuffix = ".debug" + } + release { + isMinifyEnabled = true + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + if (keystorePropertiesFile.exists()) { + signingConfig = signingConfigs.getByName("release") + } + } + } + + flavorDimensions.add("licensing") + productFlavors { + register("proprietary") + register("foss") + register("prepaid") + } + + sourceSets { + getByName("main").java.srcDirs("src/main/kotlin") + if (isProprietary) { + getByName("main").java.srcDirs("src/proprietary/kotlin") + } + } + + compileOptions { + val currentJavaVersionFromLibs = JavaVersion.valueOf(libs.versions.app.build.javaVersion.get().toString()) + sourceCompatibility = currentJavaVersionFromLibs + targetCompatibility = currentJavaVersionFromLibs + } + + tasks.withType { + kotlinOptions.jvmTarget = project.libs.versions.app.build.kotlinJVMTarget.get() + } + + namespace = libs.versions.app.version.appId.get() + + lint { + checkReleaseBuilds = false + abortOnError = false + } + + packaging { + resources { + excludes += "META-INF/library_release.kotlin_module" + } + } +} + +dependencies { + implementation(libs.simple.tools.commons) + implementation(libs.android.image.cropper) + implementation(libs.exif) + implementation(libs.android.gif.drawable) + implementation(libs.androidx.constraintlayout) + implementation(libs.androidx.media3.exoplayer) + implementation(libs.sdk.panowidget) + implementation(libs.sdk.videowidget) + implementation(libs.sanselan) + implementation(libs.imagefilters) + implementation(libs.androidsvg.aar) + implementation(libs.gestureviews) + implementation(libs.subsamplingscaleimageview) + implementation(libs.androidx.swiperefreshlayout) + implementation(libs.awebp) + implementation(libs.apng) + implementation(libs.okio) + implementation(libs.picasso) { + exclude(group = "com.squareup.okhttp3", module = "okhttp") + } + compileOnly(libs.okhttp) + + ksp(libs.glide.compiler) + + implementation(libs.bundles.room) + ksp(libs.androidx.room.compiler) +} + +// Apply the PESDKPlugin +if (isProprietary) { + apply(from = "../gradle/imglysdk.gradle") +} diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 771b08c03..000000000 --- a/build.gradle +++ /dev/null @@ -1,49 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - -buildscript { - // needed only if we are including commons locally from our pc, not via Jitpack - /*ext { - propCompileSdkVersion = 33 - propMinSdkVersion = 23 - propTargetSdkVersion = propCompileSdkVersion - propVersionCode = 1 - propVersionName = '5.34.26' - }*/ - - ext.kotlin_version = '1.8.22' - ext.is_proprietary = gradle.startParameter.taskNames.any { task -> task.contains("Proprietary") } - - repositories { - google() - jcenter() - if (is_proprietary) { - maven { url 'https://artifactory.img.ly/artifactory/imgly' } - } - } - - dependencies { - classpath 'com.android.tools.build:gradle:8.1.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - if (is_proprietary) { - classpath 'ly.img.android.pesdk:plugin:10.7.3' - } - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files - } -} - -allprojects { - repositories { - google() - jcenter() - maven { url "https://jitpack.io" } - if (is_proprietary) { - maven { url 'https://artifactory.img.ly/artifactory/imgly' } - } - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 000000000..dca1ba2f4 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,6 @@ +plugins { + alias(libs.plugins.android).apply(false) + alias(libs.plugins.kotlinAndroid).apply(false) + alias(libs.plugins.ksp).apply(false) + alias(libs.plugins.imgly).apply(false) +} diff --git a/gradle/imglysdk.gradle b/gradle/imglysdk.gradle new file mode 100644 index 000000000..108994a40 --- /dev/null +++ b/gradle/imglysdk.gradle @@ -0,0 +1,42 @@ +// This file had to stay in Groovy +// Since just converting it to Kotlin will not work +// There needs to be a way to conditinally apply this plugin +// But that results in missing references for `imglyConfig` +apply plugin: 'ly.img.android.sdk' + +imglyConfig { + vesdk { + enabled true + licensePath 'vesdk_android_license' + } + + pesdk { + enabled true + licensePath 'pesdk_android_license' + } + + modules { + include 'ui:video-trim' + include 'ui:core' + include 'ui:text' + include 'ui:focus' + include 'ui:brush' + include 'ui:filter' + include 'ui:sticker' + include 'ui:overlay' + include 'ui:transform' + include 'ui:adjustment' + include 'ui:video-composition' + + include 'backend:serializer' + include 'backend:sticker-smart' + include 'backend:sticker-animated' + + include 'assets:font-basic' + include 'assets:filter-basic' + include 'assets:overlay-basic' + include 'assets:sticker-shapes' + include 'assets:sticker-emoticons' + include 'assets:sticker-animated' + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 000000000..30fd14420 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,84 @@ +[versions] +#imgly +imgly = "10.7.3" +#jetbrains +kotlin = "1.8.22" +#KSP +ksp = "1.8.22-1.0.11" +#AndroidX +androidx-swiperefreshlayout = "1.1.0" +androidx-constraintlayout = "2.1.4" +#exif +exif = "1.0.1" +#Room +room = "2.6.0-alpha03" +#Simple tools +simple-commons = "2b25092d2a" +#Gradle +gradlePlugins-agp = "8.1.0" +#Other +androidGifDrawable = "1.2.25" +androidImageCropper = "4.5.0" +apng = "2.25.0" +awebp = "2.25.0" +glideCompiler = "4.15.1" +gestureviews = "a8e8fa8d27" +androidsvgAar = "1.4" +imagefilters = "1.0.7" +sanselan = "0.97-incubator" +sdkVideowidget = "1.180.0" +sdkPanowidget = "1.180.0" +media3Exoplayer = "1.1.0" +okhttp = "4.9.0" +okio = "3.0.0" +picasso = "2.71828" +#build +app-build-compileSDKVersion = "34" +app-build-targetSDK = "34" +app-build-minimumSDK = "23" +app-build-javaVersion = "VERSION_17" +app-build-kotlinJVMTarget = "17" +#versioning +app-version-appId = "com.simplemobiletools.gallery.pro" +app-version-versionCode = "394" +app-version-versionName = "6.27.2" +subsamplingScaleImageView = "80efdaa570" +[libraries] +#AndroidX +androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3Exoplayer" } +androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefreshlayout" } +androidx-constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "androidx-constraintlayout" } +#exif +exif = { module = "it.sephiroth.android.exif:library", version.ref = "exif" } +#Room +androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" } +androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } +androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } +#Simple Mobile Tools +simple-tools-commons = { module = "com.github.SimpleMobileTools:Simple-Commons", version.ref = "simple-commons" } +#Other +android-gif-drawable = { module = "pl.droidsonroids.gif:android-gif-drawable", version.ref = "androidGifDrawable" } +android-image-cropper = { module = "com.vanniktech:android-image-cropper", version.ref = "androidImageCropper" } +subsamplingscaleimageview = { module = "com.github.tibbi:subsampling-scale-image-view", version.ref = "subsamplingScaleImageView" } +androidsvg-aar = { module = "com.caverock:androidsvg-aar", version.ref = "androidsvgAar" } +gestureviews = { module = "com.github.tibbi:gestureviews", version.ref = "gestureviews" } +imagefilters = { module = "info.androidhive:imagefilters", version.ref = "imagefilters" } +okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } +okio = { module = "com.squareup.okio:okio", version.ref = "okio" } +sanselan = { module = "org.apache.sanselan:sanselan", version.ref = "sanselan" } +sdk-videowidget = { module = "com.google.vr:sdk-videowidget", version.ref = "sdkVideowidget" } +sdk-panowidget = { module = "com.google.vr:sdk-panowidget", version.ref = "sdkPanowidget" } +apng = { module = "com.github.penfeizhou.android.animation:apng", version.ref = "apng" } +awebp = { module = "com.github.penfeizhou.android.animation:awebp", version.ref = "awebp" } +glide-compiler = { module = "com.github.bumptech.glide:compiler", version.ref = "glideCompiler" } +picasso = { module = "com.squareup.picasso:picasso", version.ref = "picasso" } +[bundles] +room = [ + "androidx-room-ktx", + "androidx-room-runtime", +] +[plugins] +android = { id = "com.android.application", version.ref = "gradlePlugins-agp" } +kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +imgly = { id = "ly.img.android.sdk", version.ref = "imgly" } diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index d100c1c8e..000000000 --- a/settings.gradle +++ /dev/null @@ -1,3 +0,0 @@ -include ':app' -//include ':commons' -//project(':commons').projectDir = new File('../Simple-Commons/commons') diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 000000000..a1c8e5667 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,20 @@ +pluginManagement { + repositories { + gradlePluginPortal() + google() + jcenter() + mavenCentral() + maven(url = "https://artifactory.img.ly/artifactory/imgly") + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + jcenter() + mavenCentral() + maven { setUrl("https://jitpack.io") } + maven(url = "https://artifactory.img.ly/artifactory/imgly") + } +} +include(":app")