Как эффективно поддерживать 2 проекта с небольшим различием в коде?

У нас сначала был только 1 проект, но со временем появилась необходимость сделать такое же приложение с брендированием клиента (другими словами, White-label product). Единственными отличиями от первоначального проекта были цвета, ресурсы и код некоторых классов.

Я принял решение сделать копию ветки в Git и внедрять изменения. В результате сейчас у меня есть 2 приложения, где дублирование кода составляет около 95%. Главная проблема в том, что делать изменения в одинаковом для приложений коде очень время затратно, так как эти две ветки невозможно смерджить (merge). У них разный пакет, а название пакета в Android соответствует пути к файлам на диске. Соответственно, все файлы просто находятся в разных директориях.

Я обратил внимание на Product Flavors.  Это решает вопрос «как поддерживать 2 проекта в одной git ветке», но не совсем понятно как эффективно вносить изменения. Если у меня есть 2 класса, что незначительно отличаются, я должен хранить их в разных директориях чтобы Gradle смог подхватить нужный файл при сборке.

Но как эффективно вносить изменения в общий код для этих файлов? Возможно, вы сталкивались с такой проблемой раньше.
  • Вопрос задан
  • 556 просмотров
Пригласить эксперта
Ответы на вопрос 6
@Alexander1705
Henryh
@Henryh
Веб-программист
У меня есть 3 проекта на одном коде. Я вынес весь системный (одинаковый) код в субрепозиторий. Таким образом разные цвета мержить не приходится, так как они в разных проектах.
А если я в одном из проектов пофиксил системный код, то он улучшится сразу в трёх проектах, при ближайшем адейте.
Ответ написан
afishr
@afishr
make const not var
А если весь одинаковый код внести в отдельную ветку. Потом Создать другую ветку для первого продукта, и ещё одну для второго.
Когда вносятся изменения в общий код комитишь их в главную ветку, потом делаешь слияние с веткой каждого продукта. А когда уже изменения касаются только функционала одного продукта, работать только с его веткой.
Ответ написан
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
Мы с помощью git cherry-pick переносим коммиты с "новыми фичами" в нужные ветки.
Ответ написан
artemgapchenko
@artemgapchenko
Мог бы написать длинный ответ, но, к счастью Ханнес Дорфман пару месяцев назад уже изложил всю мою боль по поводу поддержки двух проектов с относительно общей кодовой базой в своей статье, поэтому посылаю вас к нему.
Ответ написан
@vahaketiladze
В одном проекте студии создать модуль в котором находиться общий код.
И на каждое приложение еще по одному модулю, в которых и прописывать различия.
Связать эти модули и все.
Использую данный подход для поддержки 14 приложения в которых отличаются только темы оформления, названия, иконки и БД.

Разные классы в проектах можно реализовать через интерфейс.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы