Мне недавно пришлось решить ту же проблему:
Создать SDK, который можно использовать в любом поддерживаемом приложении для Android .
IЯ должен был принять предпосылку, что некоторые из приложений, которые захотят использовать SDK, сами не будут использовать Dagger или даже внедрение зависимостей.
Основная проблема с созданием SDK, который использует внедрение зависимостей, заключается в том, чтоКак указывал OP, реализация Application в приложении.
Отчасти причина создания HasActivityInjector, HasFragmentInjector или HasSupportFragmentInjector была необходимостьсоблюдать следующее правило внедрения зависимостей:
Класс не должен ничего знать о том, как он внедряется. Ссылка A
С созданием интерфейсов HasXInjector Android позволяет приложить к приложению граф зависимостей кинжала, а затемчтобы приложение отвечало за внедрение зависимостей, когда их нужно вводить с помощью следующего кода:
AndroidInjection.inject(this) // <-- 'this' being an Activity or Fragment
ВЫПУСК SDK
Проблема заключается в том, что в SDK нетРеализация приложения самостоятельно.Кроме того, SDK не может ничего добавить к реализации приложения в приложении и не может переопределить реализацию приложения в приложении.В случае внешнего SDK он даже не узнает о реализации приложения, а только об интерфейсе приложения.
Так что даже если приложение, включающее SDK, использует Dagger, что не гарантируется,SDK не сможет добавить свой граф зависимостей к графу зависимостей, используемому реализацией приложения приложения, что сделает все зависимости SDK недоступными.
И если приложение не использует Dagger, как эти зависимости будут внедрены в первую очередь?
Мое собственное решение этой проблемы состояло в том, чтобы нарушить указанное выше правило и не использовать HasActivityInjector, HasFragmentInjector или HasSupportFragmentInjector для внутреннего внедрения в SDK.