Я сталкиваюсь с ошибкой компиляции Hilt только при создании сборки выпуска (с minifyEnabled true).
Отладочная сборка компилируется и работает нормально.
Сообщение об ошибке:
Код: Выделить всё
error: ComponentProcessingStep was unable to process '
.ABCDApplication_HiltComponents.SingletonC' because '.health.HealthRepo' could not be resolved.
Dependency trace:
=> element (CLASS): .health.HealthServiceImpl
=> element (CONSTRUCTOR): HealthServiceImpl(.health.HealthRepo, kotlinx.coroutines.CoroutineDispatcher)
=> type (EXECUTABLE constructor): (.health.HealthRepo, kotlinx.coroutines.CoroutineDispatcher)void
=> type (ERROR parameter type): .health.HealthRepo
If type '.health.HealthRepo' is a generated type, check above for compilation errors that may have prevented the type from being generated.
Otherwise, ensure that type '.health.HealthRepo' is on your classpath.
- Проверил, что HealthRepo и HealthServiceImpl правильно компилируются при отладке.
- Проверил, что HealthRepo — это интерфейс, определенный в другом модуле Gradle (bhpApi), и он добавлен как зависимость реализации в модуль приложения.
- Пытался очистить и пересобрать проект.
- Попытался добавить правила хранения ProGuard для Dagger/Hilt:
-keep class dagger.hilt.** { *;
-сохранить класс кинжала.** { *;
-сохранить класс javax.inject.** { *;
-keepattributes Annotation
Настройка Build.gradle
Код: Выделить всё
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Почему Hilt не может разрешить HealthRepo только в сборке выпуска?
Может ли R8 удалять сгенерированные классы Dagger/Hilt или ссылки на интерфейсы между модулями?
Как я могу настроить ProGuard или мои настройки Gradle, чтобы Hilt правильно распознавал HealthRepo и связанные привязки во время выпускных сборок?
Подробнее здесь: https://stackoverflow.com/questions/797 ... se-package
Мобильная версия