Формирование зависимостей gradle от Android
Я не разрабатывал Android некоторое время, и я стараюсь делать все правильно с новыми функциями в качестве зависимостей Gradle.
Мне интересно, какие наилучшие методы вам нужно изменить, чтобы изменить одну конкретную зависимость для удовлетворения ваших потребностей.
Например, предположим, что у нас есть две библиотеки, которые расширяют функциональность RecyclerView путем подклассификации адаптера:
Adapter --> AdapterA
Adapter --> AdapterB
Так как Java не поддерживает множественные наследования, я предполагаю, что единственный способ заставить обе библиотеки работать вместе, состоит в том, чтобы модифицировать один из них, чтобы иерархия подклассов выглядела так:
Adapter --> AdapterA --> AdapterB
Если я прав, и это путь, то каким будет лучший способ изменения и интеграции библиотеки, вот варианты, о которых я могу думать:
- Вилка на GitHub и использование JitPack для добавления измененной библиотеки.
- Добавить библиотеку в качестве локального модуля в приложение и изменить источник
Просьба обосновать или предложить, что лучше, и если есть другие альтернативы для достижения этого.
Ответы
Ответ 1
Я говорю, просто создайте локальный модуль, который зависит от другой библиотеки и изменит это. Не забудьте записать, какие изменения вы внесли. В идеале вы импортируете модуль как отдельную фиксацию в VCS, а затем модифицируете его в другой фиксации.
Это имеет то преимущество, что если вы хотите обновить библиотеку, это будет довольно легко сделать, поскольку все, что вам нужно сделать, это скопировать исходный код для новой версии и затем внести те же изменения. Однако, если вы примете другой подход, вам также придется нажать все изменения в GitHub, что добавит сложности, но мало пользы, если вы не захотите поделиться своими изменениями с кем-то еще.
Ответ 2
Это кажется необычным обстоятельством. Может быть, пример поможет
Также рассмотрите состав, прежде чем приступать к разветвлению библиотек.
https://en.wikipedia.org/wiki/Composition_over_inheritance
class YourAdapter {
private AdapterA adapterA
private AdapterB adapterB
}