Прошло некоторое время с тех пор, как это было опубликовано, поэтому, вероятно, спорный вопрос, но может помочь другим.
Другим вариантом наличия единой общей библиотеки, используемой отдельными приложениями более высокого уровня, является система управления версиями в служебной библиотеке.
По сути, вы публикуете определенный «уровень обслуживания» API из библиотеки утилит под некоторым идентификатором версии, например, с увеличенным целым числом (независимо от базовой базы кода библиотеки утилит):
- Уровень API: 1
- API ID: UTIL_API_20110630_1.0.1
Затем в служебной библиотеке вы обрабатываете промежуточную поддержку «устаревших» API ... просто помещая «старые» интерфейсы библиотеки в новую библиотеку… либо в тот же jar, либо в «дочернюю» jar. (Utility.jar переназначает вызовы child.jar).
Таким образом, приложение устанавливает Уровень API , который оно желает. Таким образом, приложения только когда-либо видят основной «Utility.jar» и получают к нему доступ через требуемый уровень API, даже если внутренняя реализация может изменяться и развиваться.
App X, Y, Z
Util.jar
--> Util_1.0.1.jar (API Level: 1)
--> Util_1.0.3.jar (API Level: 1)
--> Util_1.2.7.jar (API Level: 1)
--> ...
--> Util_2.0.1.jar (API Level: 2)
Еще одним преимуществом является то, что, если «App X» больше не находится в активной разработке, оно все еще имеет тот же API, функциональность и поведение, которые всегда были известны. Между тем библиотека утилит и Приложения Y и Z могут продолжать работать без изменений.
Немного больше работы по созданию проходных пакетов для первого из последующих выпусков. (И сильно зависит от природы служебной библиотеки.) Но затем она становится быстрой копией / вставкой, изменяет уровень API, переименовывает, и вы уже в пути.