Работал ли с многомодульными проектами

Ответ

Да, работал. Многомодульные проекты помогают разделить код по функциональности, упрощают тестирование и ускоряют сборку.

Основные подходы:

  • Feature modules – изолированные модули по фичам (например, auth, profile)
  • Library modules – общие утилиты, core-логика
  • Dynamic Feature modules – для уменьшения размера APK

Пример build.gradle модуля:

plugins {
    id 'com.android.library'
}

android {
    namespace 'com.example.core'
    compileSdk 34
}

dependencies {
    implementation 'androidx.core:core-ktx:1.12.0'
}

Плюсы:

  • Чистая архитектура
  • Переиспользование кода
  • Параллельная разработка

Сложности:

  • Настройка зависимостей между модулями
  • Управление версиями зависимостей

Ответ 18+ 🔞

А, ну это же про модули в андроиде! Работал, конечно, работал. Это как если бы ты свою квартиру на зоны поделил: вот тут кухня — готовим, вот спальня — отдыхаем, а вот туалет — ну, сами понимаете. Так и тут: вместо одной большой кучи кода, где всё свалено в кучу, делаешь отдельные комнатки-модули.

Основные подходы, которые реально работают:

  • Feature modules (модули по фичам) — это типа изолированные квартирки для каждой фичи. Допустим, auth — это там, где логин-пароль, profile — где аватарку меняешь. Чтобы когда один модуль накрылся медным тазом, остальные жили спокойно.
  • Library modules (библиотечные модули) — это как общий коридор или подвал, куда складываешь всякий хлам, который всем нужен: утилиты, core-логику. Чтоб не таскать одно и то же по всем комнатам.
  • Dynamic Feature modules (динамические модули) — хитрая жопа, чтобы APK не раздувалось как пузо после новогоднего застолья. Качаешь фичу только когда она нужна. Удобно, но мороки с ней — овердохуища.

Вот смотри, как выглядит типичный build.gradle такого модуля-библиотеки. Код не трогаю, он святой:

plugins {
    id 'com.android.library'
}

android {
    namespace 'com.example.core'
    compileSdk 34
}

dependencies {
    implementation 'androidx.core:core-ktx:1.12.0'
}

Плюсы всей этой движухи очевидны: архитектура становится чище, чем у швейцарской горничной, код переиспользуется, и команда может работать параллельно, не мешая друг другу. Идеально, да?

Но есть и подводные ебушки-воробушки, куда ж без них. Самые частые грабли:

  1. Настройка зависимостей между модулями. Это пиздец, чувак. Один модуль тянет другой, тот третий, а в третьем какая-то библиотека версии каменного века, и всё, приехали. Начинается игра в «найди, кто сломал сборку». Доверия ебать ноль ко всем.
  2. Управление версиями зависимостей. Вот это вот «ой, а давайте в каждом модуле свою версию либы пропишем» — верный путь в ад. Потом у тебя в одном месте одна версия Retrofit, в другом — другая, и приложение падает с непонятными ошибками. Терпения ноль ебать, когда такое ловишь.

Короче, инструмент мощный, но требует прямых рук и ясной головы. А то будет не многомодульный проект, а манда с ушами.