Есть ли какие-либо проблемы с конфигурацией или совместимостью в настройке и зависимостях Gradle моего проекта Android?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли какие-либо проблемы с конфигурацией или совместимостью в настройке и зависимостях Gradle моего проекта Android?

Сообщение Anonymous »

Я новичок в разработке для Android и пытаюсь понять, правильно ли настроена моя конфигурация Gradle, особенно в отношении совместимости между библиотеками, которые я использую. Ниже я включил соответствующие части своей установки, и мне интересно, есть ли что-нибудь проблемное или потенциально несовместимое. Мы будем очень признательны за любые отзывы.
Ключевые аспекты, которые меня беспокоят:
  • Совместимость между зависимостями. Я использую несколько библиотек AndroidX, Compose и Kotlin. Я не уверен, существуют ли какие-либо явные несовместимости между этими версиями.
  • Конфигурация ProGuard: Я хочу убедитесь, что настройка ProGuard для обфускации правильна.
  • Совместимость Kotlin и Java: Я нацелен на JVM 21. , и я хотел бы знать, может ли это вызвать какие-либо проблемы.
  • Общие рекомендации: Есть ли какие-либо параметры конфигурации в моем build.gradle.kts что можно оптимизировать?
Ниже я включил свой файл settings.gradle.kts, build.gradle.kts как для модуля приложения, так и для уровня проекта, proguard-rules.pro и libs.versions.toml.

Код: Выделить всё

settings.gradle.kts
[/b]

Код: Выделить всё

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")
Модуль приложения build.gradle.kts

Код: Выделить всё

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)
}
Уровень проекта build.gradle.kts

Код: Выделить всё

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
[/b]

Код: Выделить всё

-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
[/b]

Код: Выделить всё

[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
    ) оптимально?
Любые предложения или советы будут невероятно полезны. Я хочу быть уверен, что не попаду в ловушки, связанные с конфигурацией Gradle или несовместимостью библиотек.
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... jects-grad
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»