From 6e03bc45efb7118b0cc5e4ac4cea5158468c109b Mon Sep 17 00:00:00 2001 From: rosuH Date: Wed, 10 Jul 2024 23:38:24 +0800 Subject: [PATCH] chore(build): update dependencies and Gradle settings (#312) - Replace plugin IDs with versions from libs.versions.toml. - Update compileSdk to 34. - Update various dependencies to their latest versions. - Modify onDraw method arguments to be non-nullable. - Refactor build scripts to align with new dependency management practices. # GENERATE BY https://aicommit.app --- app/build.gradle.kts | 110 +++++++++--- .../ui/widget/CircleImageView.kt | 2 +- .../ui/widget/ColoredImageVIew.kt | 2 +- .../ui/widget/ProgressImageView.kt | 7 +- .../easywatermark/ui/widget/RadioButton.kt | 2 +- .../ui/widget/SelectableImageView.kt | 2 +- .../ui/widget/TouchSensitiveRv.kt | 6 +- .../ui/widget/WaterMarkImageView.kt | 2 +- .../res/drawable-xxhdpi/bg_avatar_dev.webp | Bin 39040 -> 30784 bytes baseBenchmarks/build.gradle.kts | 11 +- build.gradle.kts | 54 +++--- buildSrc/src/main/kotlin/Dependencies.kt | 2 +- cmonet/build.gradle.kts | 6 +- gradle/libs.versions.toml | 146 ++++++++++++++++ macrobenchmark/build.gradle.kts | 10 +- settings.gradle.kts | 156 ++++++++++-------- 16 files changed, 375 insertions(+), 143 deletions(-) create mode 100644 gradle/libs.versions.toml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index db8794c4..5d7cf6ab 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,11 +1,11 @@ import com.android.build.gradle.internal.api.BaseVariantOutputImpl plugins { - id("com.android.application") - id("kotlin-android") - id("kotlin-parcelize") - id("org.jetbrains.kotlin.kapt") - id("dagger.hilt.android.plugin") + id(libs.plugins.android.application.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) + id(libs.plugins.kotlin.parcelize.get().pluginId) + id(libs.plugins.ksp.get().pluginId) + id(libs.plugins.hilt.plugin.get().pluginId) } android { @@ -15,8 +15,8 @@ android { applicationId = "me.rosuh.easywatermark" minSdk = (Apps.minSdk) targetSdk = (Apps.targetSdk) - versionCode = 20809 - versionName = "2.8.9" + versionCode = 20900 + versionName = "2.9.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" setProperty("archivesBaseName", "$applicationId-v$versionName($versionCode)") } @@ -62,8 +62,19 @@ android { namespace = "me.rosuh.easywatermark" - lint { - baseline = file("lint-baseline.xml") +// lint { +// baseline = file("lint-baseline.xml") +// quiet = true +// abortOnError = false +// checkReleaseBuilds = false +// } + + buildFeatures { + compose = true + } + + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.androidxComposeCompiler.get() } kotlin { @@ -71,9 +82,6 @@ android { } } -kapt { - correctErrorTypes = true -} dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) @@ -81,17 +89,21 @@ dependencies { implementation(libs.room.runtime) implementation(libs.room.ktx) - kapt(libs.room.compiler) + implementation(libs.core.ktx) + ksp(libs.room.compiler) implementation(libs.datastore.preference) - implementation(libs.dagger.hilt.android) - kapt(libs.dagger.hilt.compiler) + // di + implementation(libs.hilt.android) + ksp(libs.hilt.compiler) + androidTestImplementation(libs.hilt.testing) + kspAndroidTest(libs.hilt.compiler) - implementation(libs.asyncLayoutInflater) + implementation(libs.asynclayout.inflater) - implementation(libs.glide.glide) - kapt(libs.glide.compiler) + implementation(libs.glide) + ksp(libs.glide.compiler) implementation(libs.compressor) @@ -105,13 +117,13 @@ dependencies { implementation(libs.activity.ktx) implementation(libs.lifecycle.runtime.ktx) implementation(libs.lifecycle.livedata.ktx) - implementation(libs.lifecycle.viewModel.ktx) + implementation(libs.lifecycle.viewmodel.ktx) implementation(libs.viewpager2) implementation(libs.recyclerview) - implementation(libs.constraintLayout) - implementation(libs.exifInterface) + implementation(libs.constraintlayout) + implementation(libs.exifinterface) implementation(libs.palette.ktx) - implementation(libs.profieinstaller) + implementation(libs.profileinstaller) implementation(libs.colorpicker) @@ -126,4 +138,58 @@ dependencies { androidTestImplementation(libs.test.espresso.core) androidTestImplementation(libs.test.uiautomator) androidTestImplementation(libs.test.ext.junit) + + // or only import the main APIs for the underlying toolkit systems, + // such as input and measurement/layout +// val composeBom = platform("androidx.compose:compose-bom:2023.10.00") +// implementation(composeBom) +// androidTestImplementation(composeBom) + implementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(platform(libs.androidx.compose.bom)) + // implementation("androidx.compose.material3:material3:1.2.0-alpha09") +// implementation("androidx.compose.material3:material3-window-size-class:1.1.2") +// implementation(libs.material) + implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.material3.windowSizeClass) +// implementation("androidx.compose.ui:ui") + implementation(libs.androidx.compose.ui.ui) + +// implementation("androidx.compose.ui:ui-tooling-preview") +// debugImplementation("androidx.compose.ui:ui-tooling") + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.compose.ui.tooling) + + // Optional - Integration with activities +// implementation("androidx.activity:activity-compose:1.8.0") + implementation(libs.androidx.activity.compose) + // Optional - Integration with ViewModels +// implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2") + implementation(libs.androidx.compose.lifecycle.viewmodel) + + // When using a MDC theme +// implementation("com.google.android.material:compose-theme-adapter:1.2.1") + +// implementation("com.google.accompanist:accompanist-permissions:0.33.2-alpha") + implementation(libs.accompanist.permissions) +// implementation("io.coil-kt:coil-compose:2.3.0") + implementation(libs.coil.kt) + implementation(libs.coil.kt.compose) + implementation(libs.coil.kt.svg) + +// implementation("androidx.compose.runtime:runtime-livedata:1.5.3") + implementation(libs.androidx.compose.runtime.livedata) + +// implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.2") + implementation(libs.androidx.lifecycle.runtime.compose) + +// implementation("androidx.navigation:navigation-compose:2.7.4") + implementation(libs.androidx.navigation.compose) + +// implementation("com.google.accompanist:accompanist-navigation-animation:0.31.1-alpha") + implementation(libs.accompanist.navigation.animation) + +// implementation("androidx.constraintlayout:constraintlayout-compose:1.0.1") + implementation(libs.androidx.constraintlayout.compose) + implementation(libs.androidx.motionlayoout.compose) + } diff --git a/app/src/main/java/me/rosuh/easywatermark/ui/widget/CircleImageView.kt b/app/src/main/java/me/rosuh/easywatermark/ui/widget/CircleImageView.kt index b73fa513..dd5f59e2 100644 --- a/app/src/main/java/me/rosuh/easywatermark/ui/widget/CircleImageView.kt +++ b/app/src/main/java/me/rosuh/easywatermark/ui/widget/CircleImageView.kt @@ -60,7 +60,7 @@ class CircleImageView : AppCompatImageView { } @SuppressLint("DrawAllocation") - override fun onDraw(canvas: Canvas?) { + override fun onDraw(canvas: Canvas) { if (sourceImageBitmap == null || (sizeHasChanged && width > 0 && height > 0)) { super.onDraw(canvas) sourceImageBitmap = drawable.toBitmap(width, height) diff --git a/app/src/main/java/me/rosuh/easywatermark/ui/widget/ColoredImageVIew.kt b/app/src/main/java/me/rosuh/easywatermark/ui/widget/ColoredImageVIew.kt index 264fbdb6..da511db9 100644 --- a/app/src/main/java/me/rosuh/easywatermark/ui/widget/ColoredImageVIew.kt +++ b/app/src/main/java/me/rosuh/easywatermark/ui/widget/ColoredImageVIew.kt @@ -83,7 +83,7 @@ class ColoredImageVIew : AppCompatImageView { } @SuppressLint("DrawAllocation") - override fun onDraw(canvas: Canvas?) { + override fun onDraw(canvas: Canvas) { if (innerBitmap == null || (sizeHasChanged && width > 0 && height > 0)) { super.onDraw(canvas) } diff --git a/app/src/main/java/me/rosuh/easywatermark/ui/widget/ProgressImageView.kt b/app/src/main/java/me/rosuh/easywatermark/ui/widget/ProgressImageView.kt index 7c905910..4d5bc30f 100644 --- a/app/src/main/java/me/rosuh/easywatermark/ui/widget/ProgressImageView.kt +++ b/app/src/main/java/me/rosuh/easywatermark/ui/widget/ProgressImageView.kt @@ -61,11 +61,10 @@ class ProgressImageView : AppCompatImageView { private val saveLayerBounds = RectF() @SuppressLint("DrawAllocation") - override fun onDraw(canvas: Canvas?) { + override fun onDraw(canvas: Canvas) { super.onDraw(canvas) - if (measuredWidth < 0 || measuredHeight <= 0 || drawable == null - || drawable.intrinsicWidth <= 0 || drawable.intrinsicHeight <= 0 || canvas == null - || curX <= 0f || !enableProgress.get() + if ((measuredWidth < 0 || measuredHeight <= 0 || drawable == null + || drawable.intrinsicWidth <= 0 || drawable.intrinsicHeight <= 0) || curX <= 0f || !enableProgress.get() ) { return } diff --git a/app/src/main/java/me/rosuh/easywatermark/ui/widget/RadioButton.kt b/app/src/main/java/me/rosuh/easywatermark/ui/widget/RadioButton.kt index 7f4deaaa..88644f96 100644 --- a/app/src/main/java/me/rosuh/easywatermark/ui/widget/RadioButton.kt +++ b/app/src/main/java/me/rosuh/easywatermark/ui/widget/RadioButton.kt @@ -72,7 +72,7 @@ class RadioButton : View { return ContextCompat.getDrawable(context, iconRes) ?: ColorDrawable(context.colorOnSurface) } - override fun onDraw(canvas: Canvas?) { + override fun onDraw(canvas: Canvas) { // draw background paint.style = Paint.Style.FILL paint.color = if (isChecked) bgColorSelected else bgColorNormal diff --git a/app/src/main/java/me/rosuh/easywatermark/ui/widget/SelectableImageView.kt b/app/src/main/java/me/rosuh/easywatermark/ui/widget/SelectableImageView.kt index 948452ca..0dbcdf64 100644 --- a/app/src/main/java/me/rosuh/easywatermark/ui/widget/SelectableImageView.kt +++ b/app/src/main/java/me/rosuh/easywatermark/ui/widget/SelectableImageView.kt @@ -111,7 +111,7 @@ class SelectableImageView : View { invalidate() } - override fun onDraw(canvas: Canvas?) { + override fun onDraw(canvas: Canvas) { super.onDraw(canvas) if (isSelected) { canvas?.drawCircle( diff --git a/app/src/main/java/me/rosuh/easywatermark/ui/widget/TouchSensitiveRv.kt b/app/src/main/java/me/rosuh/easywatermark/ui/widget/TouchSensitiveRv.kt index af6a9d91..435ce23b 100644 --- a/app/src/main/java/me/rosuh/easywatermark/ui/widget/TouchSensitiveRv.kt +++ b/app/src/main/java/me/rosuh/easywatermark/ui/widget/TouchSensitiveRv.kt @@ -196,16 +196,16 @@ class TouchSensitiveRv : RecyclerView { borderAnimator.cancel() } - override fun onDraw(c: Canvas?) { + override fun onDraw(c: Canvas) { super.onDraw(c) - c?.withSave { + c.withSave { drawRect( glowRectF, glowPaint ) } if (enableBorder && scrollState == SCROLL_STATE_IDLE) { - c?.drawRoundRect(borderRectF, 2F.dp, 2F.dp, borderPaint) + c.drawRoundRect(borderRectF, 2F.dp, 2F.dp, borderPaint) } } diff --git a/app/src/main/java/me/rosuh/easywatermark/ui/widget/WaterMarkImageView.kt b/app/src/main/java/me/rosuh/easywatermark/ui/widget/WaterMarkImageView.kt index 386ee84a..b9122da1 100644 --- a/app/src/main/java/me/rosuh/easywatermark/ui/widget/WaterMarkImageView.kt +++ b/app/src/main/java/me/rosuh/easywatermark/ui/widget/WaterMarkImageView.kt @@ -280,7 +280,7 @@ class WaterMarkImageView : androidx.appcompat.widget.AppCompatImageView, Corouti Log.i("onSizeChanged", "$w, $h, $oldh, $oldh") } - override fun onDraw(canvas: Canvas?) { + override fun onDraw(canvas: Canvas) { super.onDraw(canvas) if (config?.text.isNullOrEmpty() || decodedUri.toString().isEmpty() diff --git a/app/src/main/res/drawable-xxhdpi/bg_avatar_dev.webp b/app/src/main/res/drawable-xxhdpi/bg_avatar_dev.webp index 758f961e7e71207ba8eb849c177b02923ffe4ba9..2405d6514c02b1ef5223630453687a32d7f918dd 100644 GIT binary patch literal 30784 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 diff --git a/baseBenchmarks/build.gradle.kts b/baseBenchmarks/build.gradle.kts index 019fbf62..5e25e18e 100644 --- a/baseBenchmarks/build.gradle.kts +++ b/baseBenchmarks/build.gradle.kts @@ -1,11 +1,12 @@ plugins { - id("com.android.library") - id("kotlin-android") + id(libs.plugins.android.library.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) + id(libs.plugins.ksp.get().pluginId) } android { namespace = "me.rosuh.benchmark.macro.base" - compileSdk = 33 + compileSdk = 34 defaultConfig { minSdk = Apps.minSdk @@ -29,4 +30,6 @@ android { } } -dependencies {} \ No newline at end of file +dependencies { + implementation(libs.core.ktx) +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 5f3ce2ae..5c80e4d5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,45 +1,39 @@ buildscript { - repositories { - google() mavenCentral() - maven("https://jitpack.io") - maven("https://plugins.gradle.org/m2/") + google() + gradlePluginPortal() } + dependencies { - classpath("com.android.tools.build:gradle:8.1.0") - classpath(libs.kotlin.plugin) - classpath(libs.ktlint.gradle) - classpath(libs.dagger.hilt.plugin) - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + classpath(libs.agp) + classpath(libs.kotlin.gradlePlugin) + classpath(libs.hilt.plugin) } } -allprojects { - repositories { - google() - mavenCentral() - maven("https://jitpack.io") - } -} tasks.register("clean", Delete::class) { delete(rootProject.buildDir) } -apply(plugin = "org.jlleitschuh.gradle.ktlint") - -subprojects { - apply(plugin = "org.jlleitschuh.gradle.ktlint") // Version should be inherited from parent +//apply(plugin = "org.jlleitschuh.gradle.ktlint") +// +//subprojects { +// apply(plugin = "org.jlleitschuh.gradle.ktlint") // Version should be inherited from parent +// +// repositories { +// // Required to download KtLint +// mavenCentral() +// } +// +// // Optionally configure plugin +// configure { +// debug.set(true) +// } +//} - repositories { - // Required to download KtLint - mavenCentral() - } - - // Optionally configure plugin - configure { - debug.set(true) - } +plugins { + alias(libs.plugins.hilt) apply false + alias(libs.plugins.ksp) apply false } diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 22f6d249..089ef419 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -1,5 +1,5 @@ object Apps { - const val compileSdk = 33 + const val compileSdk = 34 const val buildTools = "33.0.0" const val minSdk = 23 const val targetSdk = 33 diff --git a/cmonet/build.gradle.kts b/cmonet/build.gradle.kts index 1510a4b6..d4e66627 100644 --- a/cmonet/build.gradle.kts +++ b/cmonet/build.gradle.kts @@ -1,6 +1,7 @@ plugins { - id("com.android.library") - id("org.jetbrains.kotlin.android") + id(libs.plugins.android.library.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) + id(libs.plugins.ksp.get().pluginId) } android { @@ -22,6 +23,7 @@ dependencies { implementation(libs.core.ktx) implementation(libs.appcompat) implementation(libs.material) + implementation(libs.core.ktx) testImplementation(libs.test.junit) androidTestImplementation(libs.test.ext.junit) androidTestImplementation(libs.test.espresso.core) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..27c455c9 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,146 @@ +[versions] +agp = "8.1.2" +kotlin = "1.9.10" +ksp = "1.9.10-1.0.13" +hilt = "2.48.1" +toolsGradle = "7.4.2" +ktlintGradle = "11.3.1" +androidxActivity = "1.8.0" +androidxConstraintLayoutCompose = "1.1.0-alpha13" +androidxNavigation = "2.7.4" +coroutines = "1.6.4" +fragmentKtx = "1.6.1" +activityKtx = "1.7.2" +lifecycle = "2.6.1" +lifecycleLiveData = "2.5.1" +lifecycleViewModel = "2.5.1" +coreKtx = "1.10.1" +appcompat = "1.6.0" +material = "1.8.0-rc01" +room = "2.5.2" +datastorePreference = "1.0.0" +asyncLayoutInflater = "1.0.0" +viewpager2 = "1.0.0" +recyclerview = "1.2.1" +constraintLayout = "2.1.4" +exifInterface = "1.3.5" +paletteKtx = "1.0.0" +glide = "4.14.2" +compressor = "3.0.1" +colorpicker = "2.2.3" +benchmark = "1.1.1" +profileinstaller = "1.3.1" +test = "1.4.0" +junit = "4.13.2" +espressoCore = "3.4.0" +uiautomator = "2.2.0" +extJunit = "1.1.4" +mockito = "4.0.0" +robolectric = "4.4" +hamcrest = "2.2" +androidxComposeBom = "2023.10.01" +androidxComposeCompiler = "1.5.3" +androidxComposeRuntimeTracing = "1.0.0-alpha04" +accompanist = "0.33.2-alpha" +coil = "2.4.0" +material3 = "1.2.0-alpha09" + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +android-library = { id = "com.android.library", version.ref = "agp" } +android-test = { id = "com.android.test", version.ref = "agp" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +kotlin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } +hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } +hilt-plugin = { id = "dagger.hilt.android.plugin", version.ref = "hilt" } + + + +[libraries] +agp = { module = "com.android.tools.build:gradle", version.ref = "agp" } +kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } +ksp = { module = "com.google.devtools.ksp:symbol-processing", version.ref = "ksp" } + + +androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" } +androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" } +androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout" } +androidx-compose-material-iconsExtended = { group = "androidx.compose.material", name = "material-icons-extended" } +androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "material3" } +androidx-compose-material3-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class" } +androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime" } +androidx-compose-runtime-livedata = { group = "androidx.compose.runtime", name = "runtime-livedata" } +androidx-compose-runtime-tracing = { group = "androidx.compose.runtime", name = "runtime-tracing", version.ref = "androidxComposeRuntimeTracing" } +androidx-compose-ui-test = { group = "androidx.compose.ui", name = "ui-test-junit4" } +androidx-compose-ui-ui = { group = "androidx.compose.ui", name = "ui" } +androidx-compose-ui-testManifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } +androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } +androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } +androidx-compose-ui-util = { group = "androidx.compose.ui", name = "ui-util" } +androidx-compose-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" } + +accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" } +accompanist-navigation-animation = { group = "com.google.accompanist", name = "accompanist-navigation-animation", version.ref = "accompanist" } +androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidxNavigation" } +androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidxActivity" } +androidx-lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycle" } +androidx-constraintlayout-compose = { group = "androidx.constraintlayout", name = "constraintlayout-compose", version.ref = "androidxConstraintLayoutCompose" } +androidx-motionlayoout-compose = { group = "androidx.constraintlayout", name = "constraintlayout-compose", version.ref = "androidxConstraintLayoutCompose" } + + + + +coil-kt = { group = "io.coil-kt", name = "coil", version.ref = "coil" } +coil-kt-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } +coil-kt-svg = { group = "io.coil-kt", name = "coil-svg", version.ref = "coil" } + +dagger-hilt-plugin = { group = "com.google.dagger", name = "hilt-android-gradle-plugin", version.ref = "hilt" } +tools-gradle = { group = "com.android.tools.build", name = "gradle", version.ref = "toolsGradle" } +kotlin-plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } +ktlint-gradle = { group = "org.jlleitschuh.gradle", name = "ktlint-gradle", version.ref = "ktlintGradle" } +kotlin-stdlib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib", version.ref = "kotlin" } +kotlin-coroutine-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "coroutines" } +kotlin-coroutine-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "coroutines" } +fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragmentKtx" } +activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "activityKtx" } +lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" } +lifecycle-livedata-ktx = { group = "androidx.lifecycle", name = "lifecycle-livedata-ktx", version.ref = "lifecycleLiveData" } +lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycleViewModel" } +core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } +room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } +room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } +room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } +datastore-preference = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastorePreference" } +asynclayout-inflater = { group = "androidx.asynclayoutinflater", name = "asynclayoutinflater", version.ref = "asyncLayoutInflater" } +viewpager2 = { group = "androidx.viewpager2", name = "viewpager2", version.ref = "viewpager2" } +recyclerview = { group = "androidx.recyclerview", name = "recyclerview", version.ref = "recyclerview" } +constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintLayout" } +exifinterface = { group = "androidx.exifinterface", name = "exifinterface", version.ref = "exifInterface" } +palette-ktx = { group = "androidx.palette", name = "palette-ktx", version.ref = "paletteKtx" } + +hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" } +hilt-compiler = { module = "com.google.dagger:hilt-compiler", version.ref = "hilt" } +hilt-testing = { module = "com.google.dagger:hilt-android-testing", version.ref = "hilt" } +hilt-plugin = { module = "com.google.dagger:hilt-android-gradle-plugin", version.ref = "hilt" } + +glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" } +glide-compiler = { group = "com.github.bumptech.glide", name = "compiler", version.ref = "glide" } +compressor = { group = "id.zelory", name = "compressor", version.ref = "compressor" } +colorpicker = { group = "com.github.skydoves", name = "colorpickerview", version.ref = "colorpicker" } +benchmark = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "benchmark" } +profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "profileinstaller" } +test-core = { group = "androidx.test", name = "core", version.ref = "test" } +test-rules = { group = "androidx.test", name = "rules", version.ref = "test" } +test-runner = { group = "androidx.test", name = "runner", version.ref = "test" } +test-junit = { group = "junit", name = "junit", version.ref = "junit" } +test-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } +test-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" } +test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "extJunit" } +mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" } +mockito-android = { group = "org.mockito", name = "mockito-android", version.ref = "mockito" } +robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" } +hamcrest-library = { group = "org.hamcrest", name = "hamcrest-library", version.ref = "hamcrest" } diff --git a/macrobenchmark/build.gradle.kts b/macrobenchmark/build.gradle.kts index da3cc0e1..25540770 100644 --- a/macrobenchmark/build.gradle.kts +++ b/macrobenchmark/build.gradle.kts @@ -1,14 +1,14 @@ import com.android.build.api.dsl.ManagedVirtualDevice plugins { - id("com.android.test") - id("kotlin-android") + id(libs.plugins.android.test.get().pluginId) + id(libs.plugins.kotlin.android.get().pluginId) } // [START macrobenchmark_setup_android] android { // [START_EXCLUDE] - compileSdk = 33 + compileSdk = 34 namespace = "me.rosuh.macrobenchmark" defaultConfig { @@ -45,6 +45,9 @@ android { // [END_EXCLUDE] } } + kotlin { + jvmToolchain(17) + } } // [END macrobenchmark_setup_android] @@ -64,4 +67,5 @@ dependencies { implementation(libs.test.espresso.core) implementation(libs.test.uiautomator) implementation(libs.kotlin.stdlib) + implementation(libs.core.ktx) } diff --git a/settings.gradle.kts b/settings.gradle.kts index fdb3770a..e7127dea 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,75 +1,93 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + maven(url = "https://oss.sonatype.org/content/repositories/snapshots/") + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + gradlePluginPortal() + maven(url = "https://oss.sonatype.org/content/repositories/snapshots/") + } +} + include(":app") include(":cmonet") include(":baseBenchmarks") include(":macrobenchmark") -dependencyResolutionManagement { - versionCatalogs { - create("libs") { - // plugins - val kotlinVersion = "1.8.22" - library("dagger-hilt-plugin", "com.google.dagger:hilt-android-gradle-plugin:2.44.2") - library("tools-gradle", "com.android.tools.build:gradle:7.4.2") - library("kotlin-plugin", "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") - library("ktlint-gradle", "org.jlleitschuh.gradle:ktlint-gradle:11.3.1") - - // kotlin libs - library("kotlin-stdlib", "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") - library("kotlin-coroutine-android", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") - library("kotlin-coroutine-core", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") - - // android platforms libs - library("fragment-ktx", "androidx.fragment:fragment-ktx:1.6.1") - library("activity-ktx", "androidx.activity:activity-ktx:1.7.2") - library("lifecycle-runtime-ktx", "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") - library("lifecycle-livedata-ktx", "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1") - library("lifecycle-viewModel-ktx", "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1") - library("core-ktx", "androidx.core:core-ktx:1.10.1") - library("appcompat", "androidx.appcompat:appcompat:1.6.0") - library("material", "com.google.android.material:material:1.8.0-rc01") - val roomVersion = "2.5.2" - library("room-runtime", "androidx.room:room-runtime:${roomVersion}") - library("room-ktx", "androidx.room:room-ktx:${roomVersion}") - library("room-compiler", "androidx.room:room-compiler:$roomVersion") - library("datastore-preference", "androidx.datastore:datastore-preferences:1.0.0") - library("asyncLayoutInflater", "androidx.asynclayoutinflater:asynclayoutinflater:1.0.0") - library("viewpager2", "androidx.viewpager2:viewpager2:1.0.0") - library("recyclerview", "androidx.recyclerview:recyclerview:1.2.1") - library("constraintLayout", "androidx.constraintlayout:constraintlayout:2.1.4") - library("exifInterface", "androidx.exifinterface:exifinterface:1.3.5") - library("palette-ktx", "androidx.palette:palette-ktx:1.0.0") - - // third party libs - val daggerVersion = "2.44.2" - library("dagger-hilt-android", "com.google.dagger:hilt-android:${daggerVersion}") - library("dagger-hilt-compiler", "com.google.dagger:hilt-compiler:${daggerVersion}") - - val glideVersion = "4.14.2" - library("glide-glide", "com.github.bumptech.glide:glide:${glideVersion}") - library("glide-compiler", "com.github.bumptech.glide:compiler:${glideVersion}") - - library("compressor", "id.zelory:compressor:3.0.1") - library("colorpicker", "com.github.skydoves:colorpickerview:2.2.3") - - - // benchmark && test libs - library("benchmark", "androidx.benchmark:benchmark-macro-junit4:1.1.1") - library("profieinstaller", "androidx.profileinstaller:profileinstaller:1.3.1") - - val testVersion = "1.4.0" - library("test-core", "androidx.test:core:${testVersion}") - library("test-rules", "androidx.test:rules:${testVersion}") - library("test-runner", "androidx.test:runner:${testVersion}") - - library("test-junit", "junit:junit:4.13.2") - library("test-espresso-core", "androidx.test.espresso:espresso-core:3.4.0") - library("test-uiautomator", "androidx.test.uiautomator:uiautomator:2.2.0") - library("test-ext-junit", "androidx.test.ext:junit:1.1.4") - library("mockito-core", "org.mockito:mockito-core:4.0.0") - library("mockito-android", "org.mockito:mockito-android:4.0.0") - library("robolectric", "org.robolectric:robolectric:4.4") - library("hamcrest-library", "org.hamcrest:hamcrest-library:2.2") - } - } -} +//dependencyResolutionManagement { +// versionCatalogs { +// create("libs") { +// // plugins +// val kotlinVersion = "1.9.20" +// library("dagger-hilt-plugin", "com.google.dagger:hilt-android-gradle-plugin:2.44.2") +// library("tools-gradle", "com.android.tools.build:gradle:7.4.2") +// library("kotlin-plugin", "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") +// library("ktlint-gradle", "org.jlleitschuh.gradle:ktlint-gradle:11.3.1") +// +// // kotlin libs +// library("kotlin-stdlib", "org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") +// library("kotlin-coroutine-android", "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4") +// library("kotlin-coroutine-core", "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4") +// +// // android platforms libs +// library("fragment-ktx", "androidx.fragment:fragment-ktx:1.6.1") +// library("activity-ktx", "androidx.activity:activity-ktx:1.7.2") +// library("lifecycle-runtime-ktx", "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") +// library("lifecycle-livedata-ktx", "androidx.lifecycle:lifecycle-livedata-ktx:2.5.1") +// library("lifecycle-viewModel-ktx", "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1") +// library("core-ktx", "androidx.core:core-ktx:1.10.1") +// library("appcompat", "androidx.appcompat:appcompat:1.6.0") +// library("material", "com.google.android.material:material:1.8.0-rc01") +// val roomVersion = "2.5.2" +// library("room-runtime", "androidx.room:room-runtime:${roomVersion}") +// library("room-ktx", "androidx.room:room-ktx:${roomVersion}") +// library("room-compiler", "androidx.room:room-compiler:$roomVersion") +// library("datastore-preference", "androidx.datastore:datastore-preferences:1.0.0") +// library("asyncLayoutInflater", "androidx.asynclayoutinflater:asynclayoutinflater:1.0.0") +// library("viewpager2", "androidx.viewpager2:viewpager2:1.0.0") +// library("recyclerview", "androidx.recyclerview:recyclerview:1.2.1") +// library("constraintLayout", "androidx.constraintlayout:constraintlayout:2.1.4") +// library("exifInterface", "androidx.exifinterface:exifinterface:1.3.5") +// library("palette-ktx", "androidx.palette:palette-ktx:1.0.0") +// +// // third party libs +// val daggerVersion = "2.44.2" +// library("dagger-hilt-android", "com.google.dagger:hilt-android:${daggerVersion}") +// library("dagger-hilt-compiler", "com.google.dagger:hilt-compiler:${daggerVersion}") +// +// val glideVersion = "4.14.2" +// library("glide-glide", "com.github.bumptech.glide:glide:${glideVersion}") +// library("glide-compiler", "com.github.bumptech.glide:compiler:${glideVersion}") +// +// library("compressor", "id.zelory:compressor:3.0.1") +// library("colorpicker", "com.github.skydoves:colorpickerview:2.2.3") +// +// +// // benchmark && test libs +// library("benchmark", "androidx.benchmark:benchmark-macro-junit4:1.1.1") +// library("profieinstaller", "androidx.profileinstaller:profileinstaller:1.3.1") +// +// val testVersion = "1.4.0" +// library("test-core", "androidx.test:core:${testVersion}") +// library("test-rules", "androidx.test:rules:${testVersion}") +// library("test-runner", "androidx.test:runner:${testVersion}") +// +// library("test-junit", "junit:junit:4.13.2") +// library("test-espresso-core", "androidx.test.espresso:espresso-core:3.4.0") +// library("test-uiautomator", "androidx.test.uiautomator:uiautomator:2.2.0") +// library("test-ext-junit", "androidx.test.ext:junit:1.1.4") +// library("mockito-core", "org.mockito:mockito-core:4.0.0") +// library("mockito-android", "org.mockito:mockito-android:4.0.0") +// library("robolectric", "org.robolectric:robolectric:4.4") +// library("hamcrest-library", "org.hamcrest:hamcrest-library:2.2") +// } +// } +//}