Можно ли скрыть зависимость, которая находится внутри папки 'libs' в aar?
Чтобы дать вам контекст того, чего я хочу достичь, сначала опишу структуру моего проекта:
Application
|
| - Library Module
| |
| | - Core Library Module
| | Module 1
| |- Jar dependency 1
| |
| | Module 2
| |- Jar dependency 2
Модули 1 и 2 созданы для хранения 2-х jar-файлов, созданных плагином shadow gradle для перемещения зависимостей dagger 2. Это сделано потому, что приложение использует Dagger 1, и их нельзя использовать одновременно на обычных базах.
Базовая библиотека Модуль содержит основные функциональные возможности для разных библиотек, поэтому он является отдельной библиотекой и также использует кинжал 2 для внедрения зависимостей.
Библиотечный модуль содержит функциональность, которую мы предлагаем приложениям наших клиентов, также он использует кинжал 2 для внедрения зависимостей.
Теперь настоящей проблемой является приложение, потому что оно использует Dagger 1 для внедрения зависимостей. Так что с теневыми банками можно использовать кинжал 1 и 2 в одном и том же проекте, потому что тень переименовывает и перемещает все классы, которые использует кинжал 2, например, @Inject в @ Inject2.
В библиотеках все работает как положено, потому что я использую перемещенные и переименованные классы, такие как @ Module2, @ Inject2 и т. Д.
но в приложении, в котором я использую кинжал 1, тегами являются @Inject, @Module, как обычно используется в кинжале 1. В качестве зависимости, импортированной в мой build.gradle, используется Dagger1. Но когда я создаю приложение, я получаю сообщение об ошибке, что мне также нужно добавить модифицированные теги Dagger 2, такие как @Module2, @Inject2. И это именно то, чего я не хочу.
Есть ли способ скрыть или игнорировать эти зависимости, используя gradle, чтобы приложение не могло видеть измененные jar-файлы для dagger 2, но они все еще могут использоваться в библиотеках?
Пока единственное решение, которое у меня есть, это удалить Dagger 2 из библиотеки и самостоятельно внедрить внедрение зависимостей, но это отнимает много времени и не совсем то, что я хочу
Редактировать:
полная ошибка:
Error:(25, 8) error: com.sample.model.ApplicationModule is listed as a module, but is not annotated with @Module2
Изменить 2:
relocate 'javax.inject.Inject', 'javax.inject.Inject2'
relocate 'javax.inject.Named', 'javax.inject.Named2'
relocate 'javax.inject.Provider', 'javax.inject.Provider2'
relocate 'javax.inject.Qualifier', 'javax.inject.Qualifier2'
relocate 'javax.inject.Scope', 'javax.inject.Scope2'
relocate 'javax.inject.Singleton', 'javax.inject.Singleton2'
relocate 'dagger.Lazy', 'dagger.Lazy2'
relocate 'dagger.MembersInjector', 'dagger.MembersInjector2'
relocate 'dagger.Module', 'dagger.Module2'
relocate 'dagger.Provides', 'dagger.Provides2'
relocate 'dagger.Provides$Type', 'dagger.Provides$Type2'
relocate 'dagger.internal', 'dagger.internal2'
relocate 'dagger.producers', 'dagger.producers2'
relocate 'dagger.Component', 'dagger.Component2'
1 ответ
ApplicationModule
кажется, кинжал 1 модуль. Кажется, ошибка происходит от dagger 2. Очевидно, что процессор аннотаций dagger 2 работает с не переименованным @Component
, Вы должны убедиться, что процессор работает только на компонентах кинжала 2.