Ключевые аспекты, которые меня беспокоят:
- Совместимость между зависимостями. Я использую несколько библиотек AndroidX, Compose и Kotlin. Я не уверен, существуют ли какие-либо явные несовместимости между этими версиями.
- Конфигурация ProGuard: Я хочу убедитесь, что настройка ProGuard для обфускации правильна.
- Совместимость Kotlin и Java: Я нацелен на JVM 21. , и я хотел бы знать, может ли это вызвать какие-либо проблемы.
- Общие рекомендации: Есть ли какие-либо параметры конфигурации в моем build.gradle.kts что можно оптимизировать?
Код: Выделить всё
settings.gradle.ktsКод: Выделить всё
pluginManagement {
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
gradlePluginPortal()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") } // Correct syntax for JitPack repository
}
}
rootProject.name = "MY APP APP"
include(":app")
Код: Выделить всё
import org.gradle.api.JavaVersion
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
// Top-level plugins configuration
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.ksp)
alias(libs.plugins.kotlin.compose.compiler) // Apply Compose Compiler Plugin using alias
alias(libs.plugins.dependency.analysis) // ./gradlew projectHealth
}
android {
namespace = "com.example.hlpyapp"
compileSdk = 34
defaultConfig {
applicationId = "com.example.hlpyapp"
minSdk = 28
//noinspection OldTargetApi
targetSdk = 34
multiDexEnabled = true
versionCode = 1
versionName = "1.0.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
ndk {
// Specify the ABIs you want to support
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", & q u o t ; x 8 6 _ 6 4 & q u o t ; ) < b r / > } < b r / > } < b r / > < b r / > n d k V e r s i o n = & q u o t ; 2 8 . 0 . 1 2 4 3 3 5 6 6 & q u o t ; < b r / > < b r / > b u i l d T y p e s { < b r / > d e b u g { < b r / > i s M i n i f y E n a b l e d = f a l s e < b r / > } < b r / > r e l e a s e { < b r / > i s M i n i f y E n a b l e d = t r u e < b r / > p r o g u a r d F i l e s ( < b r / > g e t D e f a u l t P r o g u a r d F i l e ( & q u o t ; p r o g u a r d - a n d r o i d - o p t i m i z e . t x t & q u o t ; ) , < b r / > & q u o t ; p r o g u a r d - r u l e s . p r o & q u o t ; < b r / > ) < b r / > } < b r / > } < b r / > < b r / > c o m p i l e O p t i o n s { < b r / > s o u r c e C o m p a t i b i l i t y = J a v a V e r s i o n . V E R S I O N _ 2 1 < b r / > t a r g e t C o m p a t i b i l i t y = J a v a V e r s i o n . V E R S I O N _ 2 1 < b r / > } < b r / > < b r / > k o t l i n O p t i o n s { < b r / > j v m T a r g e t = & q u o t ; 2 1 & q u o t ; < b r / > } < b r / > < b r / > b u i l d F e a t u r e s { < b r / > c o m p o s e = t r u e < b r / > } < b r / > < b r / > p a c k a g i n g { < b r / > r e s o u r c e s { < b r / > e x c l u d e s + = & q u o t ; / M E T A - I N F / { A L 2 . 0 , L G P L 2 . 1 } & q u o t ; < b r / > e x c l u d e s + = & q u o t ; M E T A - I N F / N O T I C E . m d & q u o t ; < b r / > e x c l u d e s + = "META-INF/LICENSE.md"
}
}
}
// Configure Kotlin JVM Toolchain
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(21))
}
}
// Ensure all Kotlin compile tasks target JVM 21
tasks.withType().configureEach {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_21)
}
}
// Dependencies section
dependencies {
// AndroidX core dependencies
implementation(libs.androidx.multidex)
implementation(libs.androidx.core.ktx)
//noinspection GradleDependency
implementation("androidx.core:core:1.13.1")
implementation("androidx.annotation:annotation:1.9.1")
implementation("androidx.sqlite:sqlite:2.4.0")
// Activity and Multidex dependencies
implementation("androidx.activity:activity:1.9.3")
implementation("androidx.activity:activity-compose:1.9.3")
// FlagKit library
implementation(libs.flagkit.android)
// Jetpack Compose dependencies
implementation(platform(libs.androidx.compose.bom))
implementation("androidx.compose.ui:ui:1.7.5")
implementation("androidx.compose.ui:ui-graphics:1.7.5")
implementation("androidx.compose.ui:ui-tooling:1.7.5")
implementation("androidx.compose.material3:material3:1.3.1")
implementation("androidx.compose.material:material-icons-core:1.7.5")
implementation("androidx.compose.material:material-icons-extended:1.7.5")
implementation("androidx.compose.runtime:runtime:1.7.5")
implementation("androidx.compose.runtime:runtime-livedata:1.7.5")
implementation("androidx.compose.runtime:runtime-saveable:1.7.5")
implementation("androidx.compose.foundation:foundation:1.7.5")
implementation("androidx.compose.foundation:foundation-layout:1.7.5")
implementation("androidx.compose.animation:animation:1.7.5")
implementation("androidx.compose.animation:animation-core:1.7.5")
implementation("androidx.compose.ui:ui-geometry:1.7.5")
implementation("androidx.compose.ui:ui-text:1.7.5")
implementation("androidx.compose.ui:ui-unit:1.7.5")
// Navigation component for Compose
implementation(libs.androidx.navigation.compose)
implementation("androidx.navigation:navigation-runtime:2.8.4")
implementation("androidx.navigation:navigation-common:2.8.4")
// Room dependencies for database operations
implementation(libs.androidx.room.ktx)
implementation("androidx.room:room-common:2.6.1")
implementation("androidx.room:room-runtime:2.6.1")
implementation(libs.androidx.room.paging)
ksp(libs.androidx.room.compiler)
// Paging dependencies
implementation(libs.paging.compose)
implementation("androidx.paging:paging-common:3.3.4")
// Lifecycle and ViewModel dependencies
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation("androidx.lifecycle:lifecycle-livedata:2.8.7")
implementation("androidx.lifecycle:lifecycle-livedata-core:2.8.7")
implementation("androidx.lifecycle:lifecycle-viewmodel:2.8.7")
// Dependencies for email-related functionality
implementation(libs.android.mail)
// Testing dependencies
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation("androidx.test:monitor:1.7.2")
androidTestImplementation("junit:junit:4.13.2")
androidTestImplementation(platform(libs.androidx.compose.bom))
// Debugging tools for Compose
debugImplementation("androidx.compose.ui:ui-tooling:1.7.5")
debugRuntimeOnly("androidx.compose.ui:ui-test-manifest:1.7.5")
// PDF and internationalization libraries
implementation(libs.html2pdf)
implementation(libs.icu4j)
implementation(libs.jsoup)
implementation("com.itextpdf:layout:9.0.0")
// Kotlin Coroutines Core
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
// UI Tooling for preview and debugging
coreLibraryDesugaring(libs.desugar.jdk.libs)
}
Код: Выделить всё
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
alias(libs.plugins.dependency.analysis) apply false
}
Код: Выделить всё
proguard-rules.proКод: Выделить всё
-dontwarn com.itextpdf.bouncycastle.BouncyCastleFactory
-dontwarn com.itextpdf.bouncycastlefips.BouncyCastleFipsFactory
-dontwarn org.slf4j.impl.StaticLoggerBinder
# Keep Compose runtime classes to avoid lock verification issues
-keep class androidx.compose.** { *; }
-keep class androidx.lifecycle.LiveData { *; }
-keepclassmembers class androidx.compose.** { *; }
-keepattributes *Annotation*
# Prevent warnings related to Compose classes
-dontwarn androidx.compose.**
# Keep email-related classes
-keep class javax.mail.** { *; }
-dontwarn javax.mail.**
-keep class javax.activation.** { *; }
-dontwarn javax.activation.**
-keep class com.sun.mail.** { *; }
-dontwarn com.sun.mail.**
Код: Выделить всё
libs.versions.tomlКод: Выделить всё
[versions]
agp = "8.6.1"
androidActivation = "1.6.7"
desugar_jdk_libs = "2.1.3"
flagkitAndroid = "1.0.2"
html2pdf = "6.0.0"
icu4j = "76.1"
jsoup = "1.18.1"
kotlin = "2.0.21"
ksp = "2.0.21-1.0.25"
composeCompilerPlugin = "2.0.21"
#noinspection GradleDependency
coreKtx = "1.13.1"
junit = "4.13.2"
junitVersion = "1.2.1"
composeBom = "2024.11.00"
lifecycleViewmodelCompose = "2.8.7"
multidex = "2.0.1"
navigationCompose = "2.8.4"
roomVersion = "2.6.1"
pagingCompose = "3.3.4"
dependencyAnalysis = "2.5.0"
[libraries]
android-mail = { module = "com.sun.mail:android-mail", version.ref = "androidActivation" }
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleViewmodelCompose" }
androidx-multidex = { module = "androidx.multidex:multidex", version.ref = "multidex" }
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" }
androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "roomVersion" }
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomVersion" }
androidx-room-paging = { module = "androidx.room:room-paging", version.ref = "roomVersion" }
desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" }
flagkit-android = { module = "com.github.murgupluoglu:flagkit-android", version.ref = "flagkitAndroid" }
html2pdf = { module = "com.itextpdf:html2pdf", version.ref = "html2pdf" }
icu4j = { module = "com.ibm.icu:icu4j", version.ref = "icu4j" }
jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
paging-compose = { group = "androidx.paging", name = "paging-compose", version.ref = "pagingCompose" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "composeCompilerPlugin" }
dependency-analysis = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependencyAnalysis" }
- Существуют ли какие-либо известные проблемы совместимости между версиями, которые я использую для AndroidX, Compose и других зависимостей, таких как Kotlin и Java?
- Правильно ли настроен мой файл proguard-rules.pro для используемых мной библиотек? Есть ли какие-либо правила, которые мне следует добавить или удалить?
- Совместимость Java и Kotlin: я ориентируюсь на Java 21 для sourceCompatibility и targetCompatibility как а также jvmTarget = "21". Целесообразно ли это или это слишком сложно для текущей поддержки Android?
- Репозитории и плагины: правильно ли я настроен для управления репозиториями () и используя псевдонимы плагинов (
Код: Выделить всё
settings.gradle.kts) оптимально?Код: Выделить всё
libs.versions.toml
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/792 ... jects-grad