I在使用剑柄和KSP进行依赖注入时遇到以下编译时间误差:
Cannot find symbol
import xyz.linglitel.lmusic.viewmodel.PlayerViewModel_HiltModules_BindsModule_Binds_LazyMapKey;
Symbol: class PlayerViewModel_HiltModules_BindsModule_Binds_LazyMapKey
Location: package xyz.linglitel.lmusic.viewmodel
错误表明找不到PlayerViewModel_hiltmodules_bindsmodule_binds_lazymapkey类。我已经检查了我的代码,并确认了PlayerViewModel和AppModule文件中的注释和依赖项注入配置是正确的,但是问题仍然存在。 我的代码
@HiltViewModel
class PlayerViewModel @Inject constructor(
private val repository: MusicRepository,
sessionToken: SessionToken,
@ApplicationContext private val context: Context
) : ViewModel() {...some code}
appModule类:
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
fun provideSessionToken(@ApplicationContext context: Context): SessionToken {
return SessionToken(context, ComponentName(context, MediaPlaybackService::class.java))
}
}
Musicrepository:
package xyz.linglitel.lmusic.repository
import android.content.Context
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
class MusicRepository @Inject constructor(
@ApplicationContext private val context: Context
) {
}
MediaPlayBackservice:
import androidx.media3.session.MediaLibraryService
import androidx.media3.session.MediaSession
class MediaPlaybackService : MediaLibraryService() {
override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaLibrarySession? {
TODO("Not yet implemented")
}
}
@HiltAndroidApp
class BaseApplication: Application() {
}
plugins {
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
id("com.google.devtools.ksp") version "2.1.0-1.0.29" apply false
id ("com.google.dagger.hilt.android") version "2.55" apply false
alias(libs.plugins.compose.compiler) apply false
}
import org.gradle.kotlin.dsl.testImplementation
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
id("com.google.devtools.ksp")
id("com.google.dagger.hilt.android")
alias(libs.plugins.compose.compiler)
}
android {
namespace = "xyz.linglitel.lmusic"
compileSdk = 35
buildFeatures {
compose = true
}
defaultConfig {
applicationId = "xyz.linglitel.lmusic"
minSdk = 31
targetSdk = 35
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
ksp{
arg("room.schemaLocation", "$projectDir/schemas")
}
}
dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
val room_version = "2.6.1"
implementation(libs.androidx.room.runtime)
ksp("androidx.room:room-compiler:$room_version")
implementation(libs.hilt.android)
ksp(libs.hilt.android.compiler)
implementation(libs.androidx.media3.ui)
implementation(libs.androidx.media3.exoplayer)
annotationProcessor("androidx.room:room-compiler:$room_version")
implementation(libs.androidx.room.ktx)
implementation(libs.androidx.media3.session)
implementation(libs.androidx.media3.extractor)
implementation(libs.androidx.media3.cast)
implementation(libs.androidx.media3.exoplayer.workmanager)
implementation(libs.androidx.media3.transformer)
implementation (libs.kotlinx.coroutines.android)
implementation(libs.androidx.room.guava)
implementation(libs.androidx.hilt.navigation.compose)
testImplementation(libs.androidx.room.testing)
implementation(libs.androidx.room.paging)
val composeBom = platform("androidx.compose:compose-bom:2025.01.01")
implementation(composeBom)
androidTestImplementation(composeBom)
implementation(libs.androidx.material3)
implementation(libs.androidx.material.icons.core)
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.kotlinx.coroutines.android)
debugImplementation(libs.androidx.ui.tooling)
implementation(libs.androidx.adaptive)
implementation(libs.androidx.activity.compose)
implementation (libs.androidx.hilt.navigation.compose)
implementation(libs.androidx.runtime.livedata)
}
[versions]
activityCompose = "1.10.0"
agp = "8.7.3"
hiltAndroid = "2.54"
hiltAndroidCompiler = "2.51.1"
hiltCompiler = "1.2.0"
hiltNavigationCompose = "1.2.0"
kotlin = "2.1.0"
coreKtx = "1.15.0"
junit = "4.13.2"
junitVersion = "1.2.1"
espressoCore = "3.6.1"
appcompat = "1.7.0"
kotlinxCoroutinesAndroid = "1.10.1"
material = "1.12.0"
media3Extractor = "x.y.z"
media3Ui = "1.5.1"
roomRuntime = "2.6.1"
activity = "1.10.0"
constraintlayout = "2.2.0"
[libraries]
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "activityCompose" }
androidx-adaptive = { module = "androidx.compose.material3.adaptive:adaptive" }
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" }
androidx-material-icons-core = { module = "androidx.compose.material:material-icons-core" }
androidx-material3 = { module = "androidx.compose.material3:material3" }
androidx-media3-cast = { module = "androidx.media3:media3-cast" }
androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3Ui" }
androidx-media3-exoplayer-workmanager = { module = "androidx.media3:media3-exoplayer-workmanager" }
androidx-media3-extractor = { module = "androidx.media3:media3-extractor", version.ref = "media3Extractor" }
androidx-media3-session = { module = "androidx.media3:media3-session" }
androidx-media3-transformer = { module = "androidx.media3:media3-transformer" }
androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3Ui" }
androidx-room-guava = { module = "androidx.room:room-guava", version.ref = "roomRuntime" }
androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomRuntime" }
androidx-room-paging = { module = "androidx.room:room-paging", version.ref = "roomRuntime" }
androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" }
androidx-room-testing = { module = "androidx.room:room-testing", version.ref = "roomRuntime" }
androidx-runtime-livedata = { module = "androidx.compose.runtime:runtime-livedata" }
androidx-ui = { module = "androidx.compose.ui:ui" }
androidx-ui-tooling = { module = "androidx.compose.ui:ui-tooling" }
androidx-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview" }
hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hiltAndroidCompiler" }
hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hiltAndroid" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinxCoroutinesAndroid" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
您正在混合三个不同的刀柄版本:
2.51.1
com.google.dagger:hilt-android
com.google.dagger.hilt.android
hilt = "2.55"
:
hiltAndroid = "2.54"
hiltAndroidCompiler = "2.51.1"
hiltCompiler = "1.2.0"
hilt
而不是:
hilt-android-compiler
hilt-android
[plugins]
部分:
hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
您现在可以在gradle文件中使用它分别替换
id ("com.google.dagger.hilt.android") version "2.55" apply false`
id("com.google.dagger.hilt.android")
alias(libs.plugins.hilt.android) apply false
alias(libs.plugins.hilt.android)
(注意:hiltNavigationCompose = "1.2.0"
但是,您在版本目录中还有其他问题。从我可以告诉您的情况下,至少应该做以下操作:
删除了不存在的版本media3Extractor = "x.y.z"
media3Ui
替换其用法(您应该将其重命名为
media3
,因为它不仅适用于UI Artifact)。
将KSP插件定义转换为版本目录,与上述刀柄插件相同。由于其第一个版本的组件需要与您的Kotlin版本相同,因此您应该将两个版本保持在彼此之间。这样,当您更新Kotlin时,您也可以直接更新KSP。 您的Gradle文件中有两个房间依赖性,这些依赖性不使用版本目录。相反,他们使用版本定义的单独定义。这是危险的,因为更新室将需要您记住更改this版本
和val room_version = "2.6.1"
roomRuntime
room
.