все данные функции ввода/вывода записываются в пакете библиотеки
OK.
данные могут быть разделены только между приложениями с этой библиотекой (опционально)
прекрасно с соответствующими правами доступа для провайдера (signature).
каждые приложения с этой библиотекой могут инициировать «DB» в первый раз, а затем установленные приложения могут получить доступ к тому же «БД»
Я думал ContentProvider является идеальным решением для меня, но мне кажется, что условие 3 невозможно.
Это зависит от вас, чтобы закодировать основную структуру ваших данных. Поскольку вы уже предполагали, что поставщик будет принадлежать специальному пакету библиотеки, возможно решение:
- Внесите вашего провайдера в пакет
com.mysuite.library
.
- Публикация этого приложения в Play Маркете.
- Сделайте клиентские приложения A, B и C.
- Публикуйте их в Play Маркете.
- Попросите пользователей загрузить этот пакет библиотеки, если приложения A, B или C не могут найти
com.mysuite.library
.
Однако, если вы не хотите предоставлять центральный пакет, я считаю, что вам нужно будет обслуживать поставщика в каждом из ваших собственных приложений с разными полномочиями (чтобы избежать ошибки CONFLICTING_PROVIDER). После инициализации каждого клиента вы сначала проверяете наличие другого поставщика в вашем пространстве имен (com.mysuite.provider *), предполагая, что вы либо знаете все возможные полномочия, которые вы собираетесь создавать и/или повторять среди них при поиске (com.mysuite. провайдер1, 2 и т. д.).
Однако это предложение может создавать проблемы с пользовательскими резервными копиями (скажем, если резервное копирование выполняется только одним из клиентов), что приведет к повторному созданию данных.Это, безусловно, имеет оговорки и, безусловно, более сложный (уродливый, ИМХО), но это может быть готовым к работе.
Лично я придерживался варианта 1 (пакет библиотеки). Я не вижу, чтобы пользователи жаловались при загрузке необходимых пакетов библиотек для приложений.
На самом деле это архитектурное решение.
Поскольку ContentProvider представлен одним приложением, не все из них. И если это принесет их все, кто может решить, какой из них использовать. – flx
@flx Он сформулировал вопрос, явно заявляя, что 1) ввод/вывод данных выполняется в пакете библиотеки; и 2) данные могут делиться только между приложениями с помощью этой библиотеки. Поэтому, насколько я вижу, он уже признает, что пользователь должен установить пакет библиотеки перед использованием любого из «клиентских» приложений. – davidcesarino
Возможно, вы можете создавать службы, которые управляют базой данных, и требовать, чтобы они были установлены для каждого зависимого приложения. Затем используйте эту службу для хранения данных. Просто мысль. Не знаю детали реализации этого, но с объектно-ориентированной точки зрения это возможно. – LuckyMe