Как будешь связывать модули в многомодульном приложении

«Как будешь связывать модули в многомодульном приложении» — вопрос из категории Gradle и сборка, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для связи модулей в многомодульном приложении можно использовать несколько подходов:

  1. Зависимости через Gradle – модули подключаются как implementation project(':feature') в build.gradle.
  2. Интерфейсы и DI (Dagger/Hilt/Koin) – модули общаются через абстракции, а зависимости внедряются через DI.
  3. Navigation Component – для навигации между модулями через NavGraph с динамическими feature-модулями.
  4. EventBus/RxJava/Coroutines Flow – для передачи событий между модулями.

Пример с Hilt:

// Core module  
interface AnalyticsService {  
    fun trackEvent(event: String)  
}  

// Feature module  
@Module  
@InstallIn(SingletonComponent::class)  
object AnalyticsModule {  
    @Provides  
    fun provideAnalytics(): AnalyticsService = FirebaseAnalytics()  
}  

// App module  
@AndroidEntryPoint  
class MainActivity : AppCompatActivity() {  
    @Inject lateinit var analytics: AnalyticsService  
}  

Лучше избегать жестких связей, отдавая предпочтение DI и интерфейсам.