Элегантное разделение проекта на отдельные сборки для магазинов Google Play, Huawei AppGallery и F-Droid, используя механизм Product Flavors. Он позволяет в рамках одной кодовой базы собирать APK с разными SDK, конфигурациями и зависимостями.
Код разнесен по платформенным модулям :gms, :hms и :foss. Все они реализуют общий контракт из :common, где описан интерфейс AppInteractor. Благодаря этому основной код приложения работает с единой абстракцией, не зная, какой именно сервис подключён – Google или Huawei.
Каждая реализация живет в своём модуле и подключает нужные зависимости: FirebaseAnalytics для Google и HiAnalytics для Huawei. В FOSS-вариант не подключается ничего. Связывание выполняется через модуль :inject, где с помощью Hilt определяется, какая реализация будет подставлена в зависимости от активного flavor.
В приложении задаются три flavors: gms, hms и foss. implementation-конфигурации гарантируют, что в сборку попадет только нужный код. Для плагинов добавлены переменные, вынесенные в buildSrc, чтобы подключать их условно.
Результат – три полностью автономных APK: один использует сервисы Google, другой – Huawei, а третий подходит для F-Droid и устройств без проприетарных SDK. Такой подход даёт гибкость и минимум дублирования, а главное – позволяет поддерживать все экосистемы Android-устройств из одной кодовой базы.
