Рекомендация: расширение или переопределение класса проекта библиотеки Android.

Мы используем Проект библиотеки Androidдля совместного использования основных классов и ресурсов в разных сборках (целях) нашего приложения Android. Проекты Android для каждой конкретной цели ссылаются на проект основной библиотеки (за кулисами Eclipse создает и ссылается на jar-файл из указанного проекта библиотеки).

Переопределить такие ресурсы, как изображения и макеты XML, очень просто. Файлы ресурсов, размещенные в целевом проекте, такие как значок приложения или макет XML, автоматически переопределяют ресурсы основной библиотеки с тем же именем при сборке приложения. Однако иногда класс необходимо переопределить, чтобы включить целевое поведение. Например, экран целевых настроек Amazon не может содержать ссылку на страницу приложения Google Play, что требует внесения изменений в файл preferences.xml проекта Amazon и класс активности предпочтений.

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

  1. Напишите функции, специфичные для цели, в классах основной библиотеки и используйте блоки if/switch для выбора поведения на основе SKU продукта. Этот подход не очень модульный и раздувает кодовую базу основной библиотеки.
  2. Расширьте конкретный класс Core в целевом проекте и при необходимости переопределите функции базового (Core) класса. Затем сохраните ссылку на объект базового класса в основной библиотеке и создайте его экземпляр с помощью объекта расширенного класса (из Как переопределить класс в проекте библиотеки Android? )

Существуют ли другие стратегии для переопределить или расширить класс проекта библиотеки Android? Каковы некоторые из лучших практик для совместного использования и расширения общих классов между целевыми приложениями Android?

32
задан Community 23 May 2017 в 12:07
поделиться