Разделение ресурсов с помощью библиотек Android

У меня есть проект Android, в котором необходимо изменить пару строк, изображений и базу данных, чтобы они подходили каждому клиенту (это будут отдельные приложения, а не, например, клиент, вводящий свое имя). Насколько я могу судить, для меня лучший способ сделать это — использовать библиотеку, обрабатывающую все графические интерфейсы и логику, но затем изменять необходимые вещи в проекте, используя ее. К сожалению, библиотека, кажется, ищет макеты в папке res/layout родительского проекта, но по-прежнему требует те же файлы в своей собственной папке res/layout для создания R.java. В основном это означает, что мне приходится иметь дело с дубликатами ресурсов.

Мой вопрос в основном таков: возможно ли, чтобы мой проект использовал ресурсы из библиотеки (в отличие от родительского проекта), за исключением нескольких ресурсов, хранящихся в родительском проекте (на которые можно ссылаться в коде в библиотеке)?

В противном случае, есть ли лучший способ справиться с этим?


person Flibx    schedule 26.04.2012    source источник


Ответы (1)


К сожалению, библиотека, кажется, ищет макеты в папке res/layout родительского проекта, но по-прежнему требует те же файлы в своей собственной папке res/layout для создания R.java. В основном это означает, что мне приходится иметь дело с дубликатами ресурсов.

Верно, хотя копия в библиотеке будет просто вашей копией по умолчанию. Вы могли бы переопределить их в проекте хостинга, только если бы вам нужно было их заменить. Следовательно, единственные места, где будут «дубликаты», — это места, где файлы на самом деле разные.

Возможно ли, чтобы мой проект использовал ресурсы из библиотеки (в отличие от родительского проекта), за исключением нескольких ресурсов, хранящихся в родительском проекте (на которые можно ссылаться в коде в библиотеке)?

Только если вы измените API своей библиотеки, чтобы он принимал идентификаторы ресурсов в качестве параметров, а не принимал определенные ресурсы по R имени. Например, большая часть Android SDK использует идентификаторы ресурсов в качестве параметров методов (например, setContentView()), а не предполагает имя используемого ресурса (например, R.layout.main).

В противном случае, есть ли лучший способ справиться с этим?

Ваш оригинальный подход показался мне хорошим.

person CommonsWare    schedule 26.04.2012