Мы используем Android Library Project, чтобы делиться основными классами и ресурсами в разных сборках (целях) нашего приложения для Android. Android-проекты для каждой конкретной цели ссылаются на проект базовой библиотеки (за кулисами Eclipse создает и ссылается на банку из проекта библиотеки ссылок).
Переопределение ресурсов, таких как изображения и макеты XML, очень просто. Файлы ресурсов, размещенные в целевом проекте, такие как значок приложения или макет XML, автоматически переопределяют ресурсы базовой библиотеки с тем же именем при создании приложения. Однако иногда класс должен быть переопределен, чтобы включить поведение, специфичное для конкретного объекта. Например, экран настроек целевых настроек Amazon не может содержать ссылку на страницу приложения Google Play, требующую изменения в проекте Amazon preferences.xml и предпочтения класса Activity.
Цель состоит в том, чтобы уменьшить количество дублирующихся кодов среди целевых проектов, удалив как можно больше целевого кода из основной библиотеки. Мы придумали пару подходов к реализации логики, специфичной для разных целей:
- Запишите целевые функции в классах Core-библиотеки и используйте if/switch для выбора поведения на основе SKU продукта. Этот подход не очень модульный и раздувает базовую библиотечную базу.
- Расширение конкретного класса Core в целевом проекте и переопределение базовых (основных) функций класса по мере необходимости. Затем сохраните ссылку на объект базового класса в библиотеке Core и создайте экземпляр объекта с расширенным объектом класса (из Как переопределить класс в проекте библиотеки Android?)
Существуют ли другие стратегии для переопределения или расширения класса проекта библиотеки Android? Каковы некоторые из лучших практик для совместного использования и распространения общих классов среди целевых приложений Android?